Refactored the code for saving an application period..

This commit is contained in:
Tom Vahlman 2012-02-16 10:44:11 +01:00
parent 4f4fb4b93b
commit 0d8b2905f1
13 changed files with 64 additions and 32 deletions

@ -123,16 +123,15 @@ public class ApplicationPeriodFacade {
return appPeriod;
}
public static ApplicationPeriod createApplicationPeriod(final Set<ProjectClass> projectClassSet, final Date startDate, final Date endDate) {
Calendar cal = Calendar.getInstance();cal.getTime();
final Date startDate__ = (startDate != null ? startDate : cal.getTime());
cal.add(Calendar.MONTH, 1);
final Date endDate__ = (endDate != null ? endDate : cal.getTime());
@Transactional
public ApplicationPeriod createApplicationPeriod(final Set<ProjectClass> projectClassSet, final Date startDate, final Date endDate) {
Calendar cal = Calendar.getInstance();
ApplicationPeriod appPeriod = new ApplicationPeriod();
appPeriod.setStartDate(startDate__);
appPeriod.setEndDate(endDate__);
appPeriod.setStartDate(startDate != null ? startDate : cal.getTime());
cal.add(Calendar.MONTH, 1);
appPeriod.setEndDate(endDate != null ? endDate : cal.getTime());
appPeriod.setProjectClass(projectClassSet);
return appPeriod;
return applicationPeriodDao.save(appPeriod);
}
// a helper method, to avoid NPEs when using faulty test data

@ -24,6 +24,9 @@
<bean id="projectScheduleDao" class="se.su.dsv.scipro.data.dao.jpa.ProjectScheduleDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="applicationPeriodFacade" class="se.su.dsv.scipro.match.facade.ApplicationPeriodFacade">
</bean>
<bean id="userDao" class="se.su.dsv.scipro.data.dao.jpa.UserDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />

@ -58,6 +58,9 @@ public class TestGreedyMatchingAlgorithm {
@Autowired
private ApplicationPeriodDao applicationPeriodDao;
@Autowired
private ApplicationPeriodFacade applicationPeriodFacade;
private List<ProjectIdea> unmatchedProjectIdeas;
private List<Availability> supervisorAvailability;
private Weights weights;
@ -130,7 +133,7 @@ public class TestGreedyMatchingAlgorithm {
Set<ProjectClass> projectClassSet = new HashSet<ProjectClass>();
projectClassSet.add(bachelorProjectClass);
projectClassSet.add(masterProjectClass);
ApplicationPeriod applicationPeriod = applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null));
ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null);
bachelorProjectIdea = createProjectIdea(bachelorProjectClass, applicationPeriod);
masterSupervisor = createSupervisor("Birger", "Andersson");
masterProjectClass = createProjectClass(ProjectClass.MASTER, "Master", "Master project class");

@ -63,6 +63,9 @@ public class TestMatcher {
@Autowired
private ApplicationPeriodDao applicationPeriodDao;
@Autowired
private ApplicationPeriodFacade applicationPeriodFacade;
@Autowired
private LanguageDao languageDao;
@ -254,7 +257,7 @@ public class TestMatcher {
projectClassSet.add(bachelor);
projectClassSet.add(master);
applicationPeriod = applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null));
applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null);
projectIdea1 = new ProjectIdea();
projectIdea1.setTitle("Project idea 1");
projectIdea1.setApplicationPeriod(applicationPeriod);

@ -113,8 +113,8 @@ public class TestApplicationPeriodDao {
Set<ProjectClass> projectClassSet = new HashSet<ProjectClass>();
projectClassSet.add(bachelor);
applicationPeriod = applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(projectClassSet, date("2011-06-14"), date("2011-07-01")));
applicationPeriod2 =applicationPeriodDao.save( ApplicationPeriodFacade.createApplicationPeriod(projectClassSet, date("2011-07-15"), date("2011-08-01")));
applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, date("2011-06-14"), date("2011-07-01"));
applicationPeriod2 =applicationPeriodFacade.createApplicationPeriod(projectClassSet, date("2011-07-15"), date("2011-08-01"));
projectIdea1 = createProjectIdea(applicationPeriod, bachelor);
projectIdea2 = createProjectIdea(applicationPeriod, bachelor);
projectIdea3 = createProjectIdea(applicationPeriod, bachelor);
@ -203,7 +203,7 @@ public class TestApplicationPeriodDao {
final Date startDate1 = cal.getTime();
cal.add(Calendar.MONDAY, 3);
final Date endDate1 = cal.getTime();
ApplicationPeriod applicationPeriod = applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1));
ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1);
boolean periodRemoved = applicationPeriodFacade.removeApplicationPeriod(applicationPeriod);
Assert.assertFalse(periodRemoved); // should be false
}
@ -223,7 +223,7 @@ public class TestApplicationPeriodDao {
final Date startDate1 = cal.getTime();
cal.add(Calendar.MONTH, 1);
final Date endDate1 = cal.getTime();
ApplicationPeriod applicationPeriod = applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1));
ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1);
boolean periodRemoved = applicationPeriodFacade.removeApplicationPeriod(applicationPeriod);
Assert.assertTrue(periodRemoved); // should be true
}
@ -242,7 +242,7 @@ there should exist an OPEN "bachelor"application period */
final Date startDate1 = cal.getTime();
cal.add(Calendar.MONTH, 1);
final Date endDate1 = cal.getTime();
applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1));
applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1);
boolean exists = applicationPeriodFacade.openApplicationPeriodsExists(bachelor);
Assert.assertTrue(exists); // should exist
}
@ -260,7 +260,7 @@ there should exist an OPEN "bachelor"application period */
final Date startDate1 = cal.getTime();
cal.add(Calendar.MONTH, 2);
final Date endDate1 = cal.getTime();
applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myMasterSet, startDate1, endDate1));
applicationPeriodFacade.createApplicationPeriod(myMasterSet, startDate1, endDate1);
boolean exists = applicationPeriodFacade.openApplicationPeriodsExists(bachelor);
Assert.assertFalse(exists); // should NOT exist
}
@ -293,12 +293,12 @@ should NOT overlap. */
cal.set(2012, Calendar.APRIL, 2);
cal.set(Calendar.HOUR_OF_DAY, 13); // HOUR_OF_DAY is used for the 24 hour clock
final Date endDate1 = cal.getTime();
applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1));
applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1);
cal.set(Calendar.HOUR_OF_DAY, 14);
final Date startDate2 = cal.getTime();
cal.set(2012, Calendar.MAY, 2);
final Date endDate2 = cal.getTime();
boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate2, endDate2)));
boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate2, endDate2));
Assert.assertFalse(periodOverlap); // should NOT overlap
}
@ -317,7 +317,7 @@ should NOT overlap. */
final Date startDate1 = cal.getTime();
cal.set(2012, Calendar.APRIL, 2);
final Date endDate1 = cal.getTime();
ApplicationPeriod applicationPeriod1 = applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1));
ApplicationPeriod applicationPeriod1 = applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1);
// edit the period
applicationPeriod1.getProjectClass().add(master);
cal.set(2012, Calendar.MAY, 2);
@ -343,10 +343,10 @@ should NOT overlap. */
final Date endDate = cal.getTime();
cal.set(Calendar.HOUR_OF_DAY, 14);
final Date endDate2 = cal.getTime();
applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate, endDate));
applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate, endDate);
Set<ProjectClass> myMasterSet = new HashSet<ProjectClass>();
myMasterSet.add(master);
boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(ApplicationPeriodFacade.createApplicationPeriod(myMasterSet, startDate, endDate2));
boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodFacade.createApplicationPeriod(myMasterSet, startDate, endDate2));
Assert.assertFalse(periodOverlap); // should NOT overlap
}
@ -364,12 +364,12 @@ should NOT overlap. */
final Date startDate1 = cal.getTime();
cal.set(2012, Calendar.DECEMBER, 2);
final Date endDate1 = cal.getTime();
applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1));
applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1);
cal.set(2012, Calendar.MAY, 2);
final Date startDate2 = cal.getTime();
cal.set(2012, Calendar.JUNE, 2);
final Date endDate2 = cal.getTime();
boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate2, endDate2)));
boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate2, endDate2));
Assert.assertTrue(periodOverlap); // should overlap
}
@ -387,13 +387,13 @@ should NOT overlap. */
final Date startDate = cal.getTime();
cal.set(2012, Calendar.APRIL, 2);
final Date endDate = cal.getTime();
applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate, endDate));
applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate, endDate);
cal.set(Calendar.HOUR_OF_DAY, 13);
final Date endDate2 = cal.getTime();
Set<ProjectClass> multipleProjectClasses = new HashSet<ProjectClass>();
multipleProjectClasses.add(bachelor);
multipleProjectClasses.add(master);
boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate, endDate2)));
boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate, endDate2));
Assert.assertTrue(periodOverlap); // should overlap
}

@ -20,6 +20,9 @@
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="applicationPeriodFacade" class="se.su.dsv.scipro.match.facade.ApplicationPeriodFacade">
</bean>
<bean id="projectScheduleDao" class="se.su.dsv.scipro.data.dao.jpa.ProjectScheduleDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />

@ -77,6 +77,9 @@ public class TestMatchDao {
@Autowired
private SupervisorDao supervisorDao;
@Autowired
private ApplicationPeriodFacade applicationPeriodFacade;
private User student1;
private Project project;
private ProjectClass projectClass;
@ -134,7 +137,7 @@ public class TestMatchDao {
projectIdea1.setProjectClass(projectClass);
Set<ProjectClass> projectClassSet = new HashSet<ProjectClass>();
projectClassSet.add(projectClass);
final ApplicationPeriod applicationPeriod = applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null));
final ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null);
projectIdea1.setApplicationPeriod(applicationPeriod);
projectIdea1 = projectIdeaDao.save(projectIdea1);

@ -20,6 +20,9 @@
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="applicationPeriodFacade" class="se.su.dsv.scipro.match.facade.ApplicationPeriodFacade">
</bean>
<bean id="projectScheduleDao" class="se.su.dsv.scipro.data.dao.jpa.ProjectScheduleDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />

@ -75,6 +75,9 @@ public class TestProjectIdeaDao {
@Autowired
private ApplicationPeriodDao applicationPeriodDao;
@Autowired
private ApplicationPeriodFacade applicationPeriodFacade;
@Autowired
private MatchDao matchDao;
@ -186,7 +189,7 @@ public class TestProjectIdeaDao {
Set<ProjectClass> projectClassSet = new HashSet<ProjectClass>();
projectClassSet.add(bachelor);
projectClassSet.add(master);
ApplicationPeriod applicationPeriod = applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null));
ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null);
projectIdea1 = new ProjectIdea();
projectIdea1.setTitle("Project idea 1");

@ -20,6 +20,9 @@
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="applicationPeriodFacade" class="se.su.dsv.scipro.match.facade.ApplicationPeriodFacade">
</bean>
<bean id="projectScheduleDao" class="se.su.dsv.scipro.data.dao.jpa.ProjectScheduleDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />

@ -79,6 +79,9 @@ public class TestSupervisorDao {
@Autowired
private ProjectIdeaDao projectIdeaDao;
@Autowired
private ApplicationPeriodFacade applicationPeriodFacade;
private User user1;
@ -217,7 +220,7 @@ public class TestSupervisorDao {
projectClassSet.add(bachelor);
projectClassSet.add(master);
final ApplicationPeriod applicationPeriod = applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null));
final ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null);
projectIdea1 = new ProjectIdea();
projectIdea1.setTitle("Project idea 1");

@ -24,8 +24,11 @@
<bean id="projectScheduleDao" class="se.su.dsv.scipro.data.dao.jpa.ProjectScheduleDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="userDao" class="se.su.dsv.scipro.data.dao.jpa.UserDaoJPAImp">
<bean id="applicationPeriodFacade" class="se.su.dsv.scipro.match.facade.ApplicationPeriodFacade">
</bean>
<bean id="userDao" class="se.su.dsv.scipro.data.dao.jpa.UserDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
@ -33,7 +36,7 @@
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="scheduleTemplateDao" class="se.su.dsv.scipro.data.dao.jpa.ScheduleTemplateDaoJPAImp">
<bean id="scheduleTemplateDao" class="se.su.dsv.scipro.data.dao.jpa.ScheduleTemplateDaoJPAImp">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

@ -64,6 +64,9 @@ public class TestProjectIdea {
@Autowired
private KeywordTypeDao keywordTypeDao;
@Autowired
private ApplicationPeriodFacade applicationPeriodFacade;
private ProjectIdea target;
private KeywordType other;
private Keyword key1;
@ -107,7 +110,7 @@ public class TestProjectIdea {
Set<ProjectClass> projectClassSet = new HashSet<ProjectClass>();
projectClassSet.add(projectClass);
final ApplicationPeriod applicationPeriod = applicationPeriodDao.save(ApplicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null));
final ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null);
target.setProjectClass(projectClass);
target.setApplicationPeriod(applicationPeriod);
key1 = new Keyword("key 1", standard);