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] 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;