new improvements

This commit is contained in:
Fredrik Friis 2012-03-26 18:25:54 +09:00
parent fbf4023c09
commit 625e3fd1e3
9 changed files with 100 additions and 17 deletions

@ -1,22 +1,16 @@
package se.su.dsv.scipro.admin.pages;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.Component;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import se.su.dsv.scipro.admin.pages.match.AdminKeywordPage;
import se.su.dsv.scipro.admin.pages.match.AdminManageMatchPeriodsPage;
import se.su.dsv.scipro.admin.pages.match.AdminManageMatchSupervisorPage;
import se.su.dsv.scipro.admin.pages.match.AdminManageProjectIdeaPage;
import se.su.dsv.scipro.admin.pages.match.AdminSupervisorKeywordsPage;
import se.su.dsv.scipro.admin.pages.match.AutomaticMatchPage;
import se.su.dsv.scipro.admin.pages.match.AdminExemptionPage;
import se.su.dsv.scipro.admin.pages.match.*;
import se.su.dsv.scipro.components.AbstractMenuPanel;
import se.su.dsv.scipro.security.auth.Authorization;
import se.su.dsv.scipro.security.auth.roles.Roles;
import java.util.ArrayList;
import java.util.List;
@Authorization(authorizedRoles = { Roles.SYSADMIN })
public abstract class AbstractAdminMatchPage extends AbstractAdminPage {
private Component feedBackPanel;
@ -40,7 +34,7 @@ public abstract class AbstractAdminMatchPage extends AbstractAdminPage {
items.add(new MenuItem("Manage keywords", AdminKeywordPage.class));
items.add(new MenuItem("Student exemptions", AdminExemptionPage.class));
items.add(new MenuItem("Supervisor settings", AdminManageMatchSupervisorPage.class));
items.add(new MenuItem("Application periods", AdminManageMatchPeriodsPage.class));
items.add(new MenuItem("Project Ideas", AdminManageMatchPeriodsPage.class));
return items;
}

@ -8,18 +8,22 @@
<thead>
<tr>
<th class="rounded-left-top">Status</th>
<th class="rounded-right-top">Total</th>
<th>Total</th>
<th>Bachelor</th>
<th class="rounded-right-top">Master</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="2" class="rounded-foot">&nbsp;</td>
<td colspan="4" class="rounded-foot">&nbsp;</td>
</tr>
</tfoot>
<tbody>
<tr wicket:id="listview">
<td wicket:id="statusNameLabel"></td>
<td wicket:id="statusCountLabel"></td>
<td wicket:id="bachelorCountLabel"></td>
<td wicket:id="masterCountLabel"></td>
</tr>
</tbody>

@ -5,6 +5,8 @@ import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.springdata.services.ProjectClassService;
import se.su.dsv.scipro.springdata.services.ProjectIdeaService;
import java.util.ArrayList;
@ -24,6 +26,8 @@ public class ProjectIdeaStatisticsPanel extends Panel {
@SpringBean
private ProjectIdeaService projectIdeaService;
@SpringBean
private ProjectClassService projectClassService;
public ProjectIdeaStatisticsPanel(String id) {
super(id);
@ -33,12 +37,17 @@ public class ProjectIdeaStatisticsPanel extends Panel {
for (Status s : Status.values()) {
valueArray.add(s);
}
final ProjectClass bachelor = projectClassService.findByName(ProjectClass.BACHELOR);
final ProjectClass master = projectClassService.findByName(ProjectClass.MASTER);
ListView listview = new ListView("listview", valueArray) {
protected void populateItem(ListItem item) {
Status s = (Status) item.getModelObject();
item.add(new Label("statusNameLabel", s.name()));
item.add(new Label("statusCountLabel", String.valueOf(projectIdeaService.countProjectIdeaByMatchStatus(s))));
item.add(new Label("bachelorCountLabel", String.valueOf(projectIdeaService.countProjectIdeaByMatchStatusAndProjectClass(s, bachelor))));
item.add(new Label("masterCountLabel", String.valueOf(projectIdeaService.countProjectIdeaByMatchStatusAndProjectClass(s, master))));
}
};

@ -0,0 +1,15 @@
package se.su.dsv.scipro.springdata.repos;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.querydsl.QueryDslPredicateExecutor;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
/**
* @author: fred-fri
* date: 2012 03 26
*/
@Transactional(readOnly = true)
public interface ProjectClassRepo extends JpaRepository<ProjectClass, Long>, QueryDslPredicateExecutor<ProjectClass> {
}

@ -11,7 +11,7 @@ import se.su.dsv.scipro.match.dataobject.ProjectIdea;
*/
@Transactional(readOnly = true)
public interface ProjectIdeaRepo extends JpaRepository<ProjectIdea, Long>, QueryDslPredicateExecutor {
public interface ProjectIdeaRepo extends JpaRepository<ProjectIdea, Long>, QueryDslPredicateExecutor<ProjectIdea> {
//nothing here yet

@ -0,0 +1,35 @@
package se.su.dsv.scipro.springdata.serviceimpls;
import com.mysema.query.types.expr.BooleanExpression;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.data.dataobjects.QProjectClass;
import se.su.dsv.scipro.springdata.repos.ProjectClassRepo;
import se.su.dsv.scipro.springdata.services.ProjectClassService;
/**
* @author: fred-fri
* date: 2012 03 26
*/
@Repository("projectClassService")
@Transactional(readOnly = true)
public class ProjectClassServiceImpl implements ProjectClassService {
@Qualifier("projectClassRepo")
@Autowired
private ProjectClassRepo projectClassRepo;
public ProjectClassServiceImpl(){
System.out.println("BLA BLA");
}
@Override
public ProjectClass findByName(String name) {
QProjectClass qProjectClass = QProjectClass.projectClass;
BooleanExpression hasName = qProjectClass.name.eq(name);
return projectClassRepo.findOne(hasName);
}
}

@ -5,6 +5,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.match.dataobject.Match;
import se.su.dsv.scipro.match.dataobject.ProjectIdea;
import se.su.dsv.scipro.match.dataobject.QProjectIdea;
@ -42,10 +43,10 @@ public class ProjectIdeaServiceImpl implements ProjectIdeaService {
public Iterable<ProjectIdea> findProjectIdeaByMatchStatus(Match.Status status) {
QProjectIdea qProjectIdea = QProjectIdea.projectIdea;
BooleanExpression isMatchStatus = qProjectIdea.match.status.eq(status);;
BooleanExpression isMatchStatus = qProjectIdea.match.status.eq(status);
projectIdeaRepo.count(isMatchStatus);
return projectIdeaRepo.findAll(isMatchStatus);
}
@ -54,10 +55,19 @@ public class ProjectIdeaServiceImpl implements ProjectIdeaService {
public Long countProjectIdeaByMatchStatus(Match.Status status) {
QProjectIdea qProjectIdea = QProjectIdea.projectIdea;
BooleanExpression isMatchStatus = qProjectIdea.match.status.eq(status);;
BooleanExpression isMatchStatus = qProjectIdea.match.status.eq(status);
return projectIdeaRepo.count(isMatchStatus);
}
@Override
public Long countProjectIdeaByMatchStatusAndProjectClass(Match.Status status, ProjectClass projectClass) {
QProjectIdea qProjectIdea = QProjectIdea.projectIdea;
BooleanExpression isMatchStatus = qProjectIdea.match.status.eq(status);
BooleanExpression isProjectClass = qProjectIdea.projectClass.eq(projectClass);
return projectIdeaRepo.count(isMatchStatus.and(isProjectClass));
}
}

@ -0,0 +1,13 @@
package se.su.dsv.scipro.springdata.services;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
/**
* @author: fred-fri
* date: 2012 03 26
*/
public interface ProjectClassService {
public ProjectClass findByName(String name);
}

@ -1,5 +1,6 @@
package se.su.dsv.scipro.springdata.services;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.match.dataobject.Match;
import se.su.dsv.scipro.match.dataobject.ProjectIdea;
@ -16,5 +17,7 @@ public interface ProjectIdeaService {
public Iterable<ProjectIdea> findProjectIdeaByMatchStatus(Match.Status status);
public Long countProjectIdeaByMatchStatus(Match.Status status);
public Long countProjectIdeaByMatchStatusAndProjectClass(Match.Status status, ProjectClass projectClass);
}