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