From ccbcdb9d2faf96c987a5ed377c1198151f24022b Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Mon, 30 Jul 2012 09:04:46 +0200 Subject: [PATCH 1/5] added new service and repo classes for application periods --- .../repos/ApplicationPeriodRepo.java | 12 ++++++++ .../ApplicationPeriodServiceImpl.java | 29 +++++++++++++++++++ .../services/ApplicationPeriodService.java | 7 +++++ 3 files changed, 48 insertions(+) create mode 100644 src/main/java/se/su/dsv/scipro/springdata/repos/ApplicationPeriodRepo.java create mode 100644 src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java create mode 100644 src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java diff --git a/src/main/java/se/su/dsv/scipro/springdata/repos/ApplicationPeriodRepo.java b/src/main/java/se/su/dsv/scipro/springdata/repos/ApplicationPeriodRepo.java new file mode 100644 index 0000000000..a90fa2cf82 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/springdata/repos/ApplicationPeriodRepo.java @@ -0,0 +1,12 @@ +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.match.dataobject.ApplicationPeriod; + +@Transactional(readOnly = true) +public interface ApplicationPeriodRepo extends JpaRepository<ApplicationPeriod, Long>, QueryDslPredicateExecutor<ApplicationPeriod> { + +} diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java new file mode 100644 index 0000000000..6e2279e65f --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java @@ -0,0 +1,29 @@ +package se.su.dsv.scipro.springdata.serviceimpls; + +import javax.annotation.Resource; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import se.su.dsv.scipro.match.dataobject.ApplicationPeriod; +import se.su.dsv.scipro.springdata.repos.ApplicationPeriodRepo; +import se.su.dsv.scipro.springdata.services.ApplicationPeriodService; + +@Service ( "applicationPeriodService" ) +@Transactional ( readOnly = true ) +public class ApplicationPeriodServiceImpl extends AbstractQueryService<ApplicationPeriod, Long> implements ApplicationPeriodService { + + @Resource + private ApplicationPeriodRepo applicationPeriodRepo; + + @Autowired + public ApplicationPeriodServiceImpl( + @Qualifier("applicationPeriodRepo") + ApplicationPeriodRepo applicationPeriodRepo) { + super(applicationPeriodRepo, applicationPeriodRepo); + System.out.println("ApplicationPeriodServiceImpl instantiating..."); + } + +} diff --git a/src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java b/src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java new file mode 100644 index 0000000000..0277d87557 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java @@ -0,0 +1,7 @@ +package se.su.dsv.scipro.springdata.services; + +import se.su.dsv.scipro.match.dataobject.ApplicationPeriod; + +public interface ApplicationPeriodService extends GenericService<ApplicationPeriod, Long>, QueryService<ApplicationPeriod, Long> { + +} From 6902f96bc6a1000d857604e79af91f3aca0d1165 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Mon, 30 Jul 2012 10:34:32 +0200 Subject: [PATCH 2/5] added service method to retrieve currently open application periods and unit test to confirm results --- .../ApplicationPeriodServiceImpl.java | 30 +++++++ .../services/ApplicationPeriodService.java | 5 ++ .../springdata/TestApplicationPeriod.java | 89 +++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 src/test/java/se/su/dsv/scipro/springdata/TestApplicationPeriod.java diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java index 6e2279e65f..ba9cd5d8be 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java @@ -1,13 +1,22 @@ package se.su.dsv.scipro.springdata.serviceimpls; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.mysema.query.types.expr.BooleanExpression; + import se.su.dsv.scipro.match.dataobject.ApplicationPeriod; +import se.su.dsv.scipro.match.dataobject.QApplicationPeriod; +import se.su.dsv.scipro.peer.data.dataobjects.PeerRequest; import se.su.dsv.scipro.springdata.repos.ApplicationPeriodRepo; import se.su.dsv.scipro.springdata.services.ApplicationPeriodService; @@ -25,5 +34,26 @@ public class ApplicationPeriodServiceImpl extends AbstractQueryService<Applicati super(applicationPeriodRepo, applicationPeriodRepo); System.out.println("ApplicationPeriodServiceImpl instantiating..."); } + + @Override + public List<ApplicationPeriod> getCurrentPeriods(Date currentDate) { + Iterable<ApplicationPeriod> periods = applicationPeriodRepo.findAll(startedBefore(currentDate).and(endedAfter(currentDate))); + return constructList(periods); + } + + private BooleanExpression startedBefore(Date currentDate){ + return QApplicationPeriod.applicationPeriod.startDate.before(currentDate); + } + private BooleanExpression endedAfter(Date currentDate){ + return QApplicationPeriod.applicationPeriod.endDate.after(currentDate); + } + + private List<ApplicationPeriod> constructList(Iterable<ApplicationPeriod> periods) { + List<ApplicationPeriod> list = new ArrayList<ApplicationPeriod>(); + for(ApplicationPeriod ap : periods) { + list.add(ap); + } + return list; + } } diff --git a/src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java b/src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java index 0277d87557..2f742d44b3 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java +++ b/src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java @@ -1,7 +1,12 @@ package se.su.dsv.scipro.springdata.services; +import java.util.Date; +import java.util.List; + import se.su.dsv.scipro.match.dataobject.ApplicationPeriod; public interface ApplicationPeriodService extends GenericService<ApplicationPeriod, Long>, QueryService<ApplicationPeriod, Long> { + List<ApplicationPeriod> getCurrentPeriods(final Date currentDate); + } diff --git a/src/test/java/se/su/dsv/scipro/springdata/TestApplicationPeriod.java b/src/test/java/se/su/dsv/scipro/springdata/TestApplicationPeriod.java new file mode 100644 index 0000000000..7ab005e5f1 --- /dev/null +++ b/src/test/java/se/su/dsv/scipro/springdata/TestApplicationPeriod.java @@ -0,0 +1,89 @@ +package se.su.dsv.scipro.springdata; + + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +import org.jsoup.select.Evaluator.AllElements; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Rollback; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import se.su.dsv.scipro.data.dataobjects.ProjectClass; +import se.su.dsv.scipro.match.dataobject.ApplicationPeriod; +import se.su.dsv.scipro.springdata.services.ApplicationPeriodService; +import se.su.dsv.scipro.springdata.services.ProjectClassService; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(inheritLocations = false, locations = { + "classpath:test-applicationContext.xml" +}) +public class TestApplicationPeriod { + + @Autowired + private ApplicationPeriodService periodService; + @Autowired + private ProjectClassService projectClassService; + + private SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); + private ApplicationPeriod currentBachelor, currentMaster, futureBachelor, pastMaster; + private ProjectClass bachelor, master; + + @Before + public void startTransaction() throws Exception { + bachelor = new ProjectClass(ProjectClass.BACHELOR, "Bachelor", "Bachelor degree thesis project"); + bachelor = projectClassService.save(bachelor); + master = new ProjectClass(ProjectClass.MASTER, "Master", "Master degree thesis project"); + master = projectClassService.save(master); + + Set<ProjectClass> bachelorSet = new HashSet<ProjectClass>(); + bachelorSet.add(bachelor); + Set<ProjectClass> masterSet = new HashSet<ProjectClass>(); + masterSet.add(master); + + currentBachelor = createPeriod(bachelorSet, date("2012-07-15"), date("2012-08-15"), date("2012-09-01"), "Current bachelor period"); + currentMaster = createPeriod(masterSet, date("2012-07-10"), date("2012-08-10"), date("2012-08-25"), "Current master period"); + futureBachelor = createPeriod(bachelorSet, date("2012-08-16"), date("2012-09-16"), date("2012-09-25"), "Future bachelor period"); + pastMaster = createPeriod(masterSet, date("2012-05-25"), date("2012-07-01"), date("2012-07-15"), "Past master period"); + } + + @Test + @Transactional + @Rollback + public void testGetCurrentPeriods() { + Date currentDate = date("2012-07-30"); + List<ApplicationPeriod> currentPeriods = periodService.getCurrentPeriods(currentDate); + Assert.assertEquals(Arrays.asList(new ApplicationPeriod[]{currentBachelor, currentMaster}), currentPeriods); + + } + + private Date date(String dateString) { + try { + return date.parse(dateString); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + + private ApplicationPeriod createPeriod(final Set<ProjectClass> projectClassSet, final Date startDate, final Date endDate, final Date courseStartDate, final String name) { + ApplicationPeriod appPeriod = new ApplicationPeriod(); + appPeriod.setStartDate(startDate); + appPeriod.setEndDate(endDate); + appPeriod.setCourseStartDate(courseStartDate); + appPeriod.setProjectClass(projectClassSet); + appPeriod.setName(name); + return periodService.save(appPeriod); + } +} From ae2edb6f9c973dd91b3691bbf2a6a7f936658d23 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Mon, 30 Jul 2012 14:13:51 +0200 Subject: [PATCH 3/5] authors now only sees ideas on currently open application periods when selecting supervisor provided ideas --- .../match/panel/FilterFormProjectClass.java | 8 ++- .../project/pages/ProjectIdeaStartPage.html | 4 -- .../panels/ProjectIdeaOverviewPanel.html | 11 +++ .../panels/ProjectIdeaOverviewPanel.java | 67 ++++++++++++++++--- .../SupervisorProjectIdeaOverviewPanel.java | 2 +- .../springdata/TestApplicationPeriod.java | 1 - 6 files changed, 75 insertions(+), 18 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/match/panel/FilterFormProjectClass.java b/src/main/java/se/su/dsv/scipro/match/panel/FilterFormProjectClass.java index e5f903276a..d8a13e9d4d 100644 --- a/src/main/java/se/su/dsv/scipro/match/panel/FilterFormProjectClass.java +++ b/src/main/java/se/su/dsv/scipro/match/panel/FilterFormProjectClass.java @@ -29,10 +29,14 @@ public abstract class FilterFormProjectClass extends Panel { private final CheckGroup<ProjectClass> checkGroup; - public FilterFormProjectClass(String id) { + public FilterFormProjectClass(String id, List<ProjectClass> classes) { super(id); - projectClassList = projectClassService.findAllActive(); + if(classes==null) + projectClassList = projectClassService.findAllActive(); + else + projectClassList = classes; + CompoundPropertyModel<List<ProjectClass>> levelModel = new CompoundPropertyModel<List<ProjectClass>>(projectClassList); checkGroup = new CheckGroup<ProjectClass>("checkGroup",new ArrayList<ProjectClass>(projectClassList)); diff --git a/src/main/java/se/su/dsv/scipro/project/pages/ProjectIdeaStartPage.html b/src/main/java/se/su/dsv/scipro/project/pages/ProjectIdeaStartPage.html index a27175a391..4d332ff419 100644 --- a/src/main/java/se/su/dsv/scipro/project/pages/ProjectIdeaStartPage.html +++ b/src/main/java/se/su/dsv/scipro/project/pages/ProjectIdeaStartPage.html @@ -4,10 +4,6 @@ <wicket:extend> <div class="prepend-top span-24 last"> <div wicket:id="feedback"></div> - <div class="info-box rounded-box last"> - Application period is open from 2012-01-01 to 2013-01-01 and the - course start for the application period is 2014-05-01. (dummy data) - </div> <div wicket:id="ideaOverview"></div> </div> </wicket:extend> diff --git a/src/main/java/se/su/dsv/scipro/project/panels/ProjectIdeaOverviewPanel.html b/src/main/java/se/su/dsv/scipro/project/panels/ProjectIdeaOverviewPanel.html index 3b7588569c..d170414bc1 100644 --- a/src/main/java/se/su/dsv/scipro/project/panels/ProjectIdeaOverviewPanel.html +++ b/src/main/java/se/su/dsv/scipro/project/panels/ProjectIdeaOverviewPanel.html @@ -9,10 +9,21 @@ <div wicket:id="dialog"> <div wicket:id="dialogPanel"></div> </div> + <div class="info-box rounded-box last"> + <b>Project idea submission is now open for the following project levels:</b><br /><br /> + <div wicket:id="noLabel"></div> + <div wicket:id="periodList"> + <div> + <span wicket:id="levelName"></span><span wicket:id="dates"></span> + </div> + </div> + </div> + <div wicket:id="tableMarkup"> <form wicket:id="form"> <div class="span-5" wicket:id="levelFilter"></div> </form> <div class="span-24 prepend-top" wicket:id="dataPanel"></div> + </div> </wicket:panel> </body> </html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/project/panels/ProjectIdeaOverviewPanel.java b/src/main/java/se/su/dsv/scipro/project/panels/ProjectIdeaOverviewPanel.java index 67c72b186c..b063bc0b1e 100644 --- a/src/main/java/se/su/dsv/scipro/project/panels/ProjectIdeaOverviewPanel.java +++ b/src/main/java/se/su/dsv/scipro/project/panels/ProjectIdeaOverviewPanel.java @@ -1,32 +1,40 @@ package se.su.dsv.scipro.project.panels; +import java.util.ArrayList; +import java.util.Date; import java.util.Iterator; import java.util.List; -import org.apache.wicket.ajax.AbstractAjaxTimerBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.EmptyPanel; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; -import org.apache.wicket.util.time.Duration; import org.odlabs.wiquery.ui.dialog.Dialog; import org.springframework.data.domain.PageRequest; -import se.su.dsv.scipro.data.dataobjects.Student; +import se.su.dsv.scipro.data.dataobjects.ProjectClass; import se.su.dsv.scipro.data.dataobjects.User; import se.su.dsv.scipro.datatables.ClickableTitleColumn; import se.su.dsv.scipro.datatables.GenericDataPanel; +import se.su.dsv.scipro.match.dataobject.ApplicationPeriod; import se.su.dsv.scipro.match.dataobject.Idea.IdeaStatus; import se.su.dsv.scipro.match.dataobject.SupervisorIdea; import se.su.dsv.scipro.match.panel.FilterFormProjectClass; +import se.su.dsv.scipro.springdata.services.ApplicationPeriodService; import se.su.dsv.scipro.springdata.services.GenericService; -import se.su.dsv.scipro.springdata.services.StudentService; import se.su.dsv.scipro.springdata.services.SupervisorIdeaService; +import se.su.dsv.scipro.util.DateFormatter; + +import com.google.common.base.Joiner; public class ProjectIdeaOverviewPanel extends Panel { @@ -35,16 +43,24 @@ public class ProjectIdeaOverviewPanel extends Panel { @SpringBean private SupervisorIdeaService ideaService; @SpringBean - private StudentService studentService; + private ApplicationPeriodService periodService; + private SupervisorIdeaService.FilterParams params; private GenericDataPanel<SupervisorIdea> genericDataPanel; private Dialog dialog; + private List<ProjectClass> currentLevels; public ProjectIdeaOverviewPanel(String id, User currentUser) { super(id); + WebMarkupContainer wmc = new WebMarkupContainer("tableMarkup"); + addDialog(); - addDataTable(currentUser); - add(new FilterForm("form")); + addPeriodInfo(); + addDataTable(currentUser, wmc); + wmc.add(new FilterForm("form")); + + wmc.setVisible(!currentLevels.isEmpty()); + add(wmc); } private void addDialog() { @@ -57,8 +73,39 @@ public class ProjectIdeaOverviewPanel extends Panel { add(dialog); } - private void addDataTable(final User currentUser) { - add(genericDataPanel = new GenericDataPanel<SupervisorIdea>("dataPanel") { + private void addPeriodInfo() { + List<ApplicationPeriod> currentPeriods = periodService.getCurrentPeriods(new Date()); + ListView<ApplicationPeriod> periodListView = new ListView<ApplicationPeriod>("periodList", currentPeriods){ + private static final long serialVersionUID = -5508891454629790181L; + + @Override + protected void populateItem(ListItem<ApplicationPeriod> item) { + ApplicationPeriod ap = (ApplicationPeriod)item.getModelObject(); + List<String> levelStrings = new ArrayList<String>(); + for(ProjectClass pc : ap.getProjectClass()) { + levelStrings.add(pc.getName()); + } + item.add(new Label("levelName", Joiner.on(", ").join(levelStrings))); + item.add(new Label("dates", " period is open from " + + new DateFormatter(DateFormatter.FORMAT.DEFAULT).createFormattedString(ap.getStartDate()) + " to " + + new DateFormatter(DateFormatter.FORMAT.DEFAULT).createFormattedString(ap.getEndDate()) + " and the course start date is " + + new DateFormatter(DateFormatter.FORMAT.DEFAULT).createFormattedString(ap.getCourseStartDate())).setVisible(!levelStrings.isEmpty())); + } + + }; + add(periodListView); + currentLevels = new ArrayList<ProjectClass>(); + for(ApplicationPeriod ap : currentPeriods) + for(ProjectClass pc : ap.getProjectClass()) + currentLevels.add(pc); + + Label noActivePeriodLabel = new Label("noLabel", "There are no active application period available right now."); + noActivePeriodLabel.setVisible(currentLevels.isEmpty()); + add(noActivePeriodLabel); + } + + private void addDataTable(final User currentUser, WebMarkupContainer wmc) { + wmc.add(genericDataPanel = new GenericDataPanel<SupervisorIdea>("dataPanel") { private static final long serialVersionUID = -4539188306454725307L; @@ -109,7 +156,7 @@ public class ProjectIdeaOverviewPanel extends Panel { params = new SupervisorIdeaService.FilterParams(); //FILTERING ON PROJECT CLASS: - final FilterFormProjectClass levelFilter = new FilterFormProjectClass("levelFilter") { + final FilterFormProjectClass levelFilter = new FilterFormProjectClass("levelFilter", currentLevels) { private static final long serialVersionUID = -7758850229259608443L; @Override diff --git a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaOverviewPanel.java b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaOverviewPanel.java index e386f39646..ab0e088667 100644 --- a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaOverviewPanel.java +++ b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaOverviewPanel.java @@ -142,7 +142,7 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel { params = new SupervisorIdeaService.FilterParams(); //FILTERING ON PROJECT CLASS: - final FilterFormProjectClass levelFilter = new FilterFormProjectClass("levelFilter") { + final FilterFormProjectClass levelFilter = new FilterFormProjectClass("levelFilter", null) { private static final long serialVersionUID = -7758850229259608443L; @Override diff --git a/src/test/java/se/su/dsv/scipro/springdata/TestApplicationPeriod.java b/src/test/java/se/su/dsv/scipro/springdata/TestApplicationPeriod.java index 7ab005e5f1..e1a26fd66d 100644 --- a/src/test/java/se/su/dsv/scipro/springdata/TestApplicationPeriod.java +++ b/src/test/java/se/su/dsv/scipro/springdata/TestApplicationPeriod.java @@ -10,7 +10,6 @@ import java.util.List; import java.util.Locale; import java.util.Set; -import org.jsoup.select.Evaluator.AllElements; import org.junit.Assert; import org.junit.Before; import org.junit.Test; From c98549a0f760132057705e91f01a83b5c0c971ac Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Mon, 30 Jul 2012 14:50:48 +0200 Subject: [PATCH 4/5] connecting ideas to currently open application period when being selected by an author --- .../ApplicationPeriodServiceImpl.java | 18 ++++++++++++++---- .../SupervisorIdeaServiceImpl.java | 7 +++++++ .../services/ApplicationPeriodService.java | 3 ++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java index ba9cd5d8be..85aefb781b 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/ApplicationPeriodServiceImpl.java @@ -8,18 +8,17 @@ import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.mysema.query.types.expr.BooleanExpression; - +import se.su.dsv.scipro.data.dataobjects.ProjectClass; import se.su.dsv.scipro.match.dataobject.ApplicationPeriod; import se.su.dsv.scipro.match.dataobject.QApplicationPeriod; -import se.su.dsv.scipro.peer.data.dataobjects.PeerRequest; import se.su.dsv.scipro.springdata.repos.ApplicationPeriodRepo; import se.su.dsv.scipro.springdata.services.ApplicationPeriodService; +import com.mysema.query.types.expr.BooleanExpression; + @Service ( "applicationPeriodService" ) @Transactional ( readOnly = true ) public class ApplicationPeriodServiceImpl extends AbstractQueryService<ApplicationPeriod, Long> implements ApplicationPeriodService { @@ -41,6 +40,16 @@ public class ApplicationPeriodServiceImpl extends AbstractQueryService<Applicati return constructList(periods); } + @Override + public ApplicationPeriod getCurrentPeriod(Date currentDate, ProjectClass pc) { + ApplicationPeriod ap = applicationPeriodRepo.findOne(startedBefore(currentDate).and(endedAfter(currentDate)).and(haveProjectClass(pc))); + return ap; + } + + private BooleanExpression haveProjectClass(ProjectClass pc) { + return QApplicationPeriod.applicationPeriod.projectClass.contains(pc); + } + private BooleanExpression startedBefore(Date currentDate){ return QApplicationPeriod.applicationPeriod.startDate.before(currentDate); } @@ -56,4 +65,5 @@ public class ApplicationPeriodServiceImpl extends AbstractQueryService<Applicati } return list; } + } diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java index fa5df6908b..270b47c5a8 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java @@ -1,6 +1,7 @@ package se.su.dsv.scipro.springdata.serviceimpls; import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.SortedSet; @@ -24,6 +25,7 @@ import se.su.dsv.scipro.match.dataobject.QSupervisorIdea; import se.su.dsv.scipro.match.dataobject.SupervisorIdea; import se.su.dsv.scipro.match.dataobject.Watson; import se.su.dsv.scipro.springdata.repos.SupervisorIdeaRepo; +import se.su.dsv.scipro.springdata.services.ApplicationPeriodService; import se.su.dsv.scipro.springdata.services.StudentService; import se.su.dsv.scipro.springdata.services.SupervisorIdeaService; import se.su.dsv.scipro.springdata.services.SupervisorService; @@ -42,6 +44,8 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId private StudentService studentService; @Resource private SupervisorService supervisorService; + @Resource + private ApplicationPeriodService applicationPeriodService; private int MAX_PARTNERS = 1; @@ -117,6 +121,7 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId s.addIdeaParticipation(ip); } idea.setIdeaStatus(IdeaStatus.TAKEN); + idea.setApplicationPeriod(applicationPeriodService.getCurrentPeriod(new Date(), idea.getProjectClass())); return true; } } @@ -142,6 +147,8 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId } //Erase watson boxes idea.setWatson(new Watson()); + //Remove application period association + idea.setApplicationPeriod(null); //Change status back to waiting idea.setIdeaStatus(IdeaStatus.WAITING); diff --git a/src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java b/src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java index 2f742d44b3..0c45a0cb8c 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java +++ b/src/main/java/se/su/dsv/scipro/springdata/services/ApplicationPeriodService.java @@ -3,10 +3,11 @@ package se.su.dsv.scipro.springdata.services; import java.util.Date; import java.util.List; +import se.su.dsv.scipro.data.dataobjects.ProjectClass; import se.su.dsv.scipro.match.dataobject.ApplicationPeriod; public interface ApplicationPeriodService extends GenericService<ApplicationPeriod, Long>, QueryService<ApplicationPeriod, Long> { List<ApplicationPeriod> getCurrentPeriods(final Date currentDate); - + ApplicationPeriod getCurrentPeriod(final Date currentDate, final ProjectClass pc); } From 21c75abeb79d0570c0664e9b0c7a07d89a7c7566 Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Mon, 30 Jul 2012 14:59:19 +0200 Subject: [PATCH 5/5] now connecting ideas to application periods when supervisors pre-added authors and one of the authors accept it --- .../springdata/serviceimpls/SupervisorIdeaServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java index 270b47c5a8..ff29cfbf6d 100644 --- a/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java +++ b/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorIdeaServiceImpl.java @@ -134,6 +134,9 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId for (IdeaParticipation ip : idea.getIdeaParticipations()) if(ip.getStudent().equals(author)) ip.setConfirmed(true); + if(idea.getApplicationPeriod()==null) { + idea.setApplicationPeriod(applicationPeriodService.getCurrentPeriod(new Date(), idea.getProjectClass())); + } } @Override