diff --git a/pom.xml b/pom.xml index 67ffb76c15..f312c39b22 100644 --- a/pom.xml +++ b/pom.xml @@ -234,6 +234,18 @@ <version>1.4.1</version> </dependency> + <dependency> + <groupId>org.hibernate</groupId> + <artifactId>hibernate-validator</artifactId> + <version>4.1.0.Final</version> + </dependency> + + <dependency> + <groupId>javax.validation</groupId> + <artifactId>validation-api</artifactId> + <version>1.0.0.GA</version> + </dependency> + <dependency> <groupId>biz.source_code</groupId> <artifactId>base64coder</artifactId> @@ -257,7 +269,7 @@ <scope>test</scope> </dependency> - <!--<dependency> + <!-- <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> diff --git a/resources/db_update_scripts/current.sql b/resources/db_update_scripts/current.sql index cf98b6d956..e76439b1c6 100644 --- a/resources/db_update_scripts/current.sql +++ b/resources/db_update_scripts/current.sql @@ -1,7 +1,7 @@ --- it is not possible to set a proper default DATETIME in mysql so we settle for "0", the sql works irrespective if the table are empty or not -/*ALTER TABLE `ApplicationPeriod` CHANGE `startDate` `startDate` DATETIME NOT NULL DEFAULT 0, -CHANGE `endDate` `endDate` DATETIME NOT NULL DEFAULT 0, -CHANGE `name` `name` varchar(255) NOT NULL*/ +-- we choose not to have any default DATETIME values +ALTER TABLE `ApplicationPeriod` CHANGE `startDate` `startDate` DATETIME NOT NULL, +CHANGE `endDate` `endDate` DATETIME NOT NULL, +CHANGE `name` `name` varchar(255) NOT NULL + --- => the new SQL should be tested, ie "run all tests", before delivering diff --git a/src/main/java/se/su/dsv/scipro/match/dataobject/ApplicationPeriod.java b/src/main/java/se/su/dsv/scipro/match/dataobject/ApplicationPeriod.java index b844501d9f..f3c20e8b2a 100644 --- a/src/main/java/se/su/dsv/scipro/match/dataobject/ApplicationPeriod.java +++ b/src/main/java/se/su/dsv/scipro/match/dataobject/ApplicationPeriod.java @@ -5,7 +5,7 @@ import java.util.HashSet; import java.util.Set; import javax.persistence.*; -//import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotNull; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; @@ -29,16 +29,16 @@ public class ApplicationPeriod extends DomainObject { @ManyToMany private Set<ProjectClass> projectClass = new HashSet<ProjectClass>(); - //@NotNull + @NotNull //@Basic (optional = false) private String name; - //@NotNull + @NotNull //@Basic (optional = false) @Temporal(TemporalType.DATE) private Date startDate; - //@NotNull + @NotNull //@Basic (optional = false) @Temporal(TemporalType.DATE) private Date endDate; diff --git a/src/main/java/se/su/dsv/scipro/match/facade/ApplicationPeriodFacade.java b/src/main/java/se/su/dsv/scipro/match/facade/ApplicationPeriodFacade.java index 402dc5d3b9..a5d196e8e3 100644 --- a/src/main/java/se/su/dsv/scipro/match/facade/ApplicationPeriodFacade.java +++ b/src/main/java/se/su/dsv/scipro/match/facade/ApplicationPeriodFacade.java @@ -114,24 +114,37 @@ public class ApplicationPeriodFacade { * Helper that is used to initialize constructors * @return ApplicationPeriod the object that is returned */ - public static ApplicationPeriod createDummyApplicationPeriod(){ + public static ApplicationPeriod createDummyApplicationPeriod(final String name){ ApplicationPeriod appPeriod = new ApplicationPeriod(); Calendar cal = Calendar.getInstance(); appPeriod.setStartDate(cal.getTime()); cal.add(Calendar.MONTH, 1); appPeriod.setEndDate(cal.getTime()); - appPeriod.setName("..."); + appPeriod.setName(name); return appPeriod; } - @Transactional - public ApplicationPeriod createApplicationPeriod(final Set<ProjectClass> projectClassSet, final Date startDate, final Date endDate) { + // @Transactional + public ApplicationPeriod createApplicationPeriod(final Set<ProjectClass> projectClassSet, final String name) { Calendar cal = Calendar.getInstance(); ApplicationPeriod appPeriod = new ApplicationPeriod(); - appPeriod.setStartDate(startDate != null ? startDate : cal.getTime()); + appPeriod.setStartDate(cal.getTime()); cal.add(Calendar.MONTH, 1); - appPeriod.setEndDate(endDate != null ? endDate : cal.getTime()); + appPeriod.setEndDate(cal.getTime()); appPeriod.setProjectClass(projectClassSet); + appPeriod.setName(name); + return applicationPeriodDao.save(appPeriod); + } + + // @Transactional + public ApplicationPeriod createApplicationPeriodDates(final Set<ProjectClass> projectClassSet, final Date startDate, final Date endDate, final String name) { + Calendar cal = Calendar.getInstance(); + ApplicationPeriod appPeriod = new ApplicationPeriod(); + appPeriod.setStartDate(startDate); + cal.add(Calendar.MONTH, 1); + appPeriod.setEndDate(endDate); + appPeriod.setProjectClass(projectClassSet); + appPeriod.setName(name); return applicationPeriodDao.save(appPeriod); } diff --git a/src/main/java/se/su/dsv/scipro/match/panel/MatchPeriodEditPanel.java b/src/main/java/se/su/dsv/scipro/match/panel/MatchPeriodEditPanel.java index dc20918d0d..e2f2b2bf42 100644 --- a/src/main/java/se/su/dsv/scipro/match/panel/MatchPeriodEditPanel.java +++ b/src/main/java/se/su/dsv/scipro/match/panel/MatchPeriodEditPanel.java @@ -43,7 +43,7 @@ public class MatchPeriodEditPanel extends Panel { private Component feedbackPanel; public MatchPeriodEditPanel(final String id, final WebMarkupContainer container) { - this(id, new Model<ApplicationPeriod>(ApplicationPeriodFacade.createDummyApplicationPeriod()), container); + this(id, new Model<ApplicationPeriod>(ApplicationPeriodFacade.createDummyApplicationPeriod("...")), container); } public MatchPeriodEditPanel(String id, IModel<ApplicationPeriod> model, final WebMarkupContainer container) { super(id); diff --git a/src/test/java/se/su/dsv/scipro/match/TestGreedyMatchingAlgorithm.java b/src/test/java/se/su/dsv/scipro/match/TestGreedyMatchingAlgorithm.java index 8465a338c5..1641ea0394 100644 --- a/src/test/java/se/su/dsv/scipro/match/TestGreedyMatchingAlgorithm.java +++ b/src/test/java/se/su/dsv/scipro/match/TestGreedyMatchingAlgorithm.java @@ -55,7 +55,9 @@ public class TestGreedyMatchingAlgorithm { @Autowired private MatchDao matchDao; - + @Autowired + private ApplicationPeriodDao applicationPeriodDao; + @Autowired private ApplicationPeriodFacade applicationPeriodFacade; @@ -123,7 +125,10 @@ public class TestGreedyMatchingAlgorithm { Set<ProjectClass> projectClassSet = new HashSet<ProjectClass>(); projectClassSet.add(bachelorProjectClass); projectClassSet.add(masterProjectClass); - ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null); + List<ApplicationPeriod> myList = new ArrayList<ApplicationPeriod>(); + myList.addAll(applicationPeriodDao.findAll()); + ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, "name1"); + bachelorProjectIdea = createProjectIdea(bachelorProjectClass, applicationPeriod); masterSupervisor = createSupervisor("Birger", "Andersson", languages); masterProjectClass = createProjectClass(ProjectClass.MASTER, "Master", "Master project class"); diff --git a/src/test/java/se/su/dsv/scipro/match/TestMatcher.java b/src/test/java/se/su/dsv/scipro/match/TestMatcher.java index 895eae5bf0..a4e63f2e2e 100644 --- a/src/test/java/se/su/dsv/scipro/match/TestMatcher.java +++ b/src/test/java/se/su/dsv/scipro/match/TestMatcher.java @@ -133,7 +133,7 @@ public class TestMatcher { projectClassSet.add(bachelor); projectClassSet.add(master); - ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null); + ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, "name1"); ProjectIdea projectIdea1 = new ProjectIdea(); projectIdea1.setTitle("Project idea 1"); projectIdea1.setApplicationPeriod(applicationPeriod); diff --git a/src/test/java/se/su/dsv/scipro/match/dao/TestApplicationPeriodDao.java b/src/test/java/se/su/dsv/scipro/match/dao/TestApplicationPeriodDao.java index cb0f0b061f..f832627697 100644 --- a/src/test/java/se/su/dsv/scipro/match/dao/TestApplicationPeriodDao.java +++ b/src/test/java/se/su/dsv/scipro/match/dao/TestApplicationPeriodDao.java @@ -113,8 +113,8 @@ public class TestApplicationPeriodDao { Set<ProjectClass> projectClassSet = new HashSet<ProjectClass>(); projectClassSet.add(bachelor); - applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, date("2011-06-14"), date("2011-07-01")); - applicationPeriod2 =applicationPeriodFacade.createApplicationPeriod(projectClassSet, date("2011-07-15"), date("2011-08-01")); + applicationPeriod = applicationPeriodFacade.createApplicationPeriodDates(projectClassSet, date("2011-06-14"), date("2011-07-01"), "name1"); + applicationPeriod2 =applicationPeriodFacade.createApplicationPeriodDates(projectClassSet, date("2011-07-15"), date("2011-08-01"), "name2"); 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 = applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1); + ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriodDates(myBachelorSet, startDate1, endDate1, "name1"); 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 = applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1); + ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriodDates(myBachelorSet, startDate1, endDate1, "name1"); 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(); - applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1); + applicationPeriodFacade.createApplicationPeriodDates(myBachelorSet, startDate1, endDate1, "name1"); 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(); - applicationPeriodFacade.createApplicationPeriod(myMasterSet, startDate1, endDate1); + applicationPeriodFacade.createApplicationPeriodDates(myMasterSet, startDate1, endDate1, "name1"); 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(); - applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1); + applicationPeriodFacade.createApplicationPeriodDates(myBachelorSet, startDate1, endDate1, "name1"); 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(applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate2, endDate2)); + boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodFacade.createApplicationPeriodDates(myBachelorSet, startDate2, endDate2, "name1")); 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 = applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1); + ApplicationPeriod applicationPeriod1 = applicationPeriodFacade.createApplicationPeriodDates(myBachelorSet, startDate1, endDate1, "name1"); // edit the period applicationPeriod1.getProjectClass().add(master); cal.set(2012, Calendar.MAY, 2); @@ -345,10 +345,10 @@ should NOT overlap. */ final Date endDate = cal.getTime(); cal.set(Calendar.HOUR_OF_DAY, 14); final Date endDate2 = cal.getTime(); - applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate, endDate); + applicationPeriodFacade.createApplicationPeriodDates(myBachelorSet, startDate, endDate, "name1"); Set<ProjectClass> myMasterSet = new HashSet<ProjectClass>(); myMasterSet.add(master); - boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodFacade.createApplicationPeriod(myMasterSet, startDate, endDate2)); + boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodFacade.createApplicationPeriodDates(myMasterSet, startDate, endDate2, "name1")); Assert.assertFalse(periodOverlap); // should NOT overlap } @@ -366,12 +366,12 @@ should NOT overlap. */ final Date startDate1 = cal.getTime(); cal.set(2012, Calendar.DECEMBER, 2); final Date endDate1 = cal.getTime(); - applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate1, endDate1); + applicationPeriodFacade.createApplicationPeriodDates(myBachelorSet, startDate1, endDate1, "name1"); 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(applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate2, endDate2)); + boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodFacade.createApplicationPeriodDates(myBachelorSet, startDate2, endDate2, "name1")); Assert.assertTrue(periodOverlap); // should overlap } @@ -389,13 +389,13 @@ should NOT overlap. */ final Date startDate = cal.getTime(); cal.set(2012, Calendar.APRIL, 2); final Date endDate = cal.getTime(); - applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate, endDate); + applicationPeriodFacade.createApplicationPeriodDates(myBachelorSet, startDate, endDate, "name1"); 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(applicationPeriodFacade.createApplicationPeriod(myBachelorSet, startDate, endDate2)); + boolean periodOverlap = applicationPeriodFacade.doesPeriodOverlap(applicationPeriodFacade.createApplicationPeriodDates(myBachelorSet, startDate, endDate2, "name1")); Assert.assertTrue(periodOverlap); // should overlap } diff --git a/src/test/java/se/su/dsv/scipro/match/dao/TestMatchDao.java b/src/test/java/se/su/dsv/scipro/match/dao/TestMatchDao.java index cc71ecac38..64845d4ad9 100644 --- a/src/test/java/se/su/dsv/scipro/match/dao/TestMatchDao.java +++ b/src/test/java/se/su/dsv/scipro/match/dao/TestMatchDao.java @@ -115,7 +115,7 @@ public class TestMatchDao { projectIdea1.setProjectClass(projectClass); Set<ProjectClass> projectClassSet = new HashSet<ProjectClass>(); projectClassSet.add(projectClass); - final ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null); + final ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, "name1"); projectIdea1.setApplicationPeriod(applicationPeriod); projectIdea1 = projectIdeaDao.save(projectIdea1); diff --git a/src/test/java/se/su/dsv/scipro/match/dao/TestProjectIdeaDao.java b/src/test/java/se/su/dsv/scipro/match/dao/TestProjectIdeaDao.java index 5b09e9c239..df1182a97f 100644 --- a/src/test/java/se/su/dsv/scipro/match/dao/TestProjectIdeaDao.java +++ b/src/test/java/se/su/dsv/scipro/match/dao/TestProjectIdeaDao.java @@ -166,7 +166,7 @@ public class TestProjectIdeaDao { Set<ProjectClass> projectClassSet = new HashSet<ProjectClass>(); projectClassSet.add(bachelor); projectClassSet.add(master); - ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null); + ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, "name1"); projectIdea1 = new ProjectIdea(); projectIdea1.setTitle("Project idea 1"); diff --git a/src/test/java/se/su/dsv/scipro/match/dao/TestSupervisorDao.java b/src/test/java/se/su/dsv/scipro/match/dao/TestSupervisorDao.java index f0af4afad9..eeff6486e9 100644 --- a/src/test/java/se/su/dsv/scipro/match/dao/TestSupervisorDao.java +++ b/src/test/java/se/su/dsv/scipro/match/dao/TestSupervisorDao.java @@ -214,7 +214,7 @@ public class TestSupervisorDao { projectClassSet.add(bachelor); projectClassSet.add(master); - final ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null); + final ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, "name1"); projectIdea1 = new ProjectIdea(); projectIdea1.setTitle("Project idea 1"); diff --git a/src/test/java/se/su/dsv/scipro/match/dataobject/TestProjectIdea.java b/src/test/java/se/su/dsv/scipro/match/dataobject/TestProjectIdea.java index 6f7b4b32f4..a5da2c3dbd 100644 --- a/src/test/java/se/su/dsv/scipro/match/dataobject/TestProjectIdea.java +++ b/src/test/java/se/su/dsv/scipro/match/dataobject/TestProjectIdea.java @@ -101,7 +101,7 @@ public class TestProjectIdea { Set<ProjectClass> projectClassSet = new HashSet<ProjectClass>(); projectClassSet.add(projectClass); - final ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, null, null); + final ApplicationPeriod applicationPeriod = applicationPeriodFacade.createApplicationPeriod(projectClassSet, "name1"); target.setProjectClass(projectClass); target.setApplicationPeriod(applicationPeriod); key1 = new Keyword("key 1", standard);