From a74c27f1ebad18b7c72ed0860544782ad345e6b0 Mon Sep 17 00:00:00 2001
From: Emil Siverhall <emil-siv@dsv.su.se>
Date: Fri, 3 Aug 2012 10:09:33 +0200
Subject: [PATCH 1/3] added column with course start date to datatable on
 supervisor - my matched student ideas page

---
 .../scipro/supervisor/pages/SupervisorMyProjectIdeasPage.java  | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMyProjectIdeasPage.java b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMyProjectIdeasPage.java
index da242dd632..9f2216cb45 100644
--- a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMyProjectIdeasPage.java
+++ b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMyProjectIdeasPage.java
@@ -69,7 +69,7 @@ public class SupervisorMyProjectIdeasPage extends AbstractSupervisorProjectIdeaP
 
                 @Override
                 public IColumn[] getColumns() {
-                    IColumn[] columns = new IColumn[3];
+                    IColumn[] columns = new IColumn[4];
                     columns[0] = new PropertyColumn<ProjectIdea>(Model.of("Level"), "projectClass", "projectClass");
 
 //                columns[1] = new PropertyColumn<ProjectIdea>(Model.of("Title"), "title", "title");
@@ -86,6 +86,7 @@ public class SupervisorMyProjectIdeasPage extends AbstractSupervisorProjectIdeaP
                     };
 
                     columns[2] = new DateColumn<ProjectIdea>(Model.of("Received"), "match.dateCreated", "match.dateCreated");
+                    columns[3] = new DateColumn<ProjectIdea>(Model.of("Start date"),"applicationPeriod.courseStartDate", "applicationPeriod.courseStartDate");
                     return columns;
                 }
 

From 461120728d13dfd0e6e0a3992481ab542d30dc45 Mon Sep 17 00:00:00 2001
From: Emil Siverhall <emil-siv@dsv.su.se>
Date: Fri, 3 Aug 2012 10:30:40 +0200
Subject: [PATCH 2/3] removed duplicated feedback panels and some code cleanup

---
 .../pages/SupervisorIdeaSubmissionPage.java         |  4 +---
 .../pages/SupervisorProjectIdeaStartPage.html       |  1 -
 .../pages/SupervisorProjectIdeaStartPage.java       |  8 +-------
 .../supervisor/panels/SupervisorEditIdeaPanel.java  | 13 ++++---------
 4 files changed, 6 insertions(+), 20 deletions(-)

diff --git a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorIdeaSubmissionPage.java b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorIdeaSubmissionPage.java
index 64d9b30dbf..734fd656ea 100644
--- a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorIdeaSubmissionPage.java
+++ b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorIdeaSubmissionPage.java
@@ -19,15 +19,13 @@ public class SupervisorIdeaSubmissionPage extends
 		super(pp);
 		Long ideaId = pp.getAsLong("idea");
 		SupervisorIdea idea;
-		
-		boolean readOnly = pp.getAsBoolean("readOnly");
 	
 		if(ideaId!=null) 
 			idea = ideaService.findOne(ideaId);
 		else {
 			idea = new SupervisorIdea();
 		}
-		add(new SupervisorEditIdeaPanel("editPanel", getUser(), readOnly, new Model<SupervisorIdea>(idea)));
+		add(new SupervisorEditIdeaPanel("editPanel", getUser(), new Model<SupervisorIdea>(idea)));
 				
 	}
 
diff --git a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.html b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.html
index fe380ba740..b15a094829 100644
--- a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.html
+++ b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.html
@@ -4,7 +4,6 @@
 <body>
 <wicket:extend>
     <div class="span-24 last">
-    <div wicket:id="feedback"></div>
     <div wicket:id="availabilityPanel" class="append-bottom"></div>
     <button wicket:id="ideaLink">Create new project idea</button>
     <div class="prepend-top" wicket:id="ideaPanel"></div>
diff --git a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.java b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.java
index 5a6514f487..25ce76a4db 100644
--- a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.java
+++ b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorProjectIdeaStartPage.java
@@ -3,7 +3,6 @@ package se.su.dsv.scipro.supervisor.pages;
 
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.link.BookmarkablePageLink;
-import org.apache.wicket.markup.html.panel.FeedbackPanel;
 
 import se.su.dsv.scipro.security.auth.Authorization;
 import se.su.dsv.scipro.security.auth.roles.Roles;
@@ -13,12 +12,9 @@ import se.su.dsv.scipro.supervisor.panels.SupervisorProjectIdeaOverviewPanel;
 @Authorization(authorizedRoles={Roles.SYSADMIN})
 public class SupervisorProjectIdeaStartPage extends AbstractSupervisorProjectIdeaPage {
 
-	private FeedbackPanel feedbackPanel;
 	
 	public SupervisorProjectIdeaStartPage(PageParameters pp) {
 		super(pp);
-		add(feedbackPanel = new FeedbackPanel("feedback"));
-		feedbackPanel.setOutputMarkupId(true);
 		add(new SupervisorAvailabilityPanel("availabilityPanel", getUser()));
 		add(new SupervisorProjectIdeaOverviewPanel("ideaPanel", getUser()));
 		addSubmissionPageLink();
@@ -26,9 +22,7 @@ public class SupervisorProjectIdeaStartPage extends AbstractSupervisorProjectIde
 	}
 
 	private void addSubmissionPageLink() {
-		PageParameters pp = new PageParameters();
-		pp.put("readOnly", false);
-		BookmarkablePageLink<Void> ideaLink = new BookmarkablePageLink<Void>("ideaLink", SupervisorIdeaSubmissionPage.class, pp);
+		BookmarkablePageLink<Void> ideaLink = new BookmarkablePageLink<Void>("ideaLink", SupervisorIdeaSubmissionPage.class);
 		add(ideaLink);
 	}
 	
diff --git a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java
index 0f1924f815..82a42898c8 100644
--- a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java
+++ b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java
@@ -58,9 +58,9 @@ public class SupervisorEditIdeaPanel extends Panel {
     @SpringBean
     private SupervisorService supervisorService;
 
-    public SupervisorEditIdeaPanel(String id, User currentUser, boolean readOnly,IModel<SupervisorIdea> model) {
+    public SupervisorEditIdeaPanel(String id, User currentUser, IModel<SupervisorIdea> model) {
         super(id, model);
-        add(new IdeaForm("form", model, currentUser, readOnly).setEnabled(!readOnly));
+        add(new IdeaForm("form", model, currentUser));
     }
 
     private class IdeaForm extends Form<SupervisorIdea> {
@@ -76,7 +76,7 @@ public class SupervisorEditIdeaPanel extends Panel {
         private KeywordContainer regularKwc;
         private FeedbackPanel feedbackPanel;
 
-        public IdeaForm(String id, final IModel<SupervisorIdea> model, final User currentUser, final boolean readOnly) {
+        public IdeaForm(String id, final IModel<SupervisorIdea> model, final User currentUser) {
             super(id, model);
 
 
@@ -97,13 +97,8 @@ public class SupervisorEditIdeaPanel extends Panel {
             descriptionField.add(StringValidator.minimumLength(10)); // Description needs to be at least 10 characters
             
             final Employee ideaCreator = supervisorService.findByUser(currentUser);
-            Employee ideaSupervisor = model.getObject().getCreator();
             
-            Set<ResearchArea> areas;
-            if(readOnly)
-            	areas = ideaSupervisor.getActiveResearchAreas();
-            else
-            	areas = ideaCreator.getActiveResearchAreas();
+            Set<ResearchArea> areas = ideaCreator.getActiveResearchAreas();
             
             ListView<ResearchArea> areaList = new ListView<ResearchArea>("researchAreas", new ArrayList<ResearchArea>(areas)) {
 				private static final long serialVersionUID = 1745649109195334927L;

From cf8c7f61e54b7351dba96c1a897b23eb8bacb5f1 Mon Sep 17 00:00:00 2001
From: Emil Siverhall <emil-siv@dsv.su.se>
Date: Fri, 3 Aug 2012 12:13:54 +0200
Subject: [PATCH 3/3] added some custom validation logic to supervisor idea
 submission to display appropriate feedback messages if number of students
 doesnt match specified project level

---
 .../SupervisorIdeaServiceImpl.java            | 18 +++++++++++++++-
 .../services/SupervisorIdeaService.java       |  1 +
 .../panels/SupervisorEditIdeaPanel.java       | 21 +++++++++++--------
 3 files changed, 30 insertions(+), 10 deletions(-)

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 9d2a2b8eff..16623c5abc 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
@@ -54,6 +54,9 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
 	
 	private transient Logger logger = Logger.getLogger(SupervisorIdeaService.class);
 	private int MAX_PARTNERS = 1;
+	private int BACHELOR_STUDENTS = 2;
+	private int MAX_MASTER_STUDENTS = 1;
+
 	
 	@Autowired
 	public SupervisorIdeaServiceImpl(
@@ -67,7 +70,7 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
 	@Transactional ( readOnly = false )
 	public void saveSupervisorCreatedIdea(SupervisorIdea idea, Employee creator, SortedSet<Student> students) {
 		
-		if(!students.isEmpty()) {
+		if(!students.isEmpty()) {			
 			for(Student s : students) {
 				s = studentService.findOne(s.getId()); //Needed for lazy loading to work.
 				IdeaParticipation ip = new IdeaParticipation();
@@ -172,6 +175,19 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
 		return new Pair<Boolean, String>(true,"Validation passed");
 	}
 	
+	@Override
+	public Pair<Boolean, String> validateSupervisorIdeaSubmission(SupervisorIdea idea, SortedSet<Student> students) {
+		if(!students.isEmpty()) {
+		if(idea.getProjectClass().getCode().equals(ProjectClass.BACHELOR)&&students.size()!=BACHELOR_STUDENTS){
+			return new Pair<Boolean, String>(false, "Selected number of bachelor students is not allowed");
+		}
+		if(idea.getProjectClass().getCode().equals(ProjectClass.MASTER)&&students.size()>MAX_MASTER_STUDENTS){
+			return new Pair<Boolean, String>(false, "Selected number of master students is not allowed");
+		}
+		}
+		return new Pair<Boolean, String>(true, "Validation passed");
+	}
+	
 	@Override
 	@Transactional (readOnly = false)
 	public void partnerAcceptIdea(SupervisorIdea idea, User loggedInUser) {
diff --git a/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorIdeaService.java b/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorIdeaService.java
index f91dfb3d74..0782eb2fc2 100644
--- a/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorIdeaService.java
+++ b/src/main/java/se/su/dsv/scipro/springdata/services/SupervisorIdeaService.java
@@ -46,6 +46,7 @@ public interface SupervisorIdeaService extends GenericService<SupervisorIdea, Lo
 
 	Pair<Boolean, String> validateIdeaAcceptance(SupervisorIdea idea, User loggedInUser, SortedSet<Student> students);
 	Pair<Boolean, String> validatePartnerAcceptance(User loggedInUser);
+	Pair<Boolean, String> validateSupervisorIdeaSubmission(SupervisorIdea idea, SortedSet<Student> students);
 	
 	public static class FilterParams implements Serializable {
 		private static final long serialVersionUID = 4981420721152104292L;
diff --git a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java
index 82a42898c8..f98b9a7fbd 100644
--- a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java
+++ b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorEditIdeaPanel.java
@@ -35,6 +35,7 @@ import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao.TYPE;
 import se.su.dsv.scipro.match.dataobject.IdeaParticipation;
 import se.su.dsv.scipro.match.dataobject.Keyword;
 import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
+import se.su.dsv.scipro.peer.data.dao.controllers.Pair;
 import se.su.dsv.scipro.reusable.AddRemoveStudentsPanel;
 import se.su.dsv.scipro.springdata.services.ProjectClassService;
 import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
@@ -147,15 +148,17 @@ public class SupervisorEditIdeaPanel extends Panel {
 
                 @Override
                 protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
-                    target.addComponent(feedbackPanel);                    	
-              
-                        try {
-                        ideaService.saveSupervisorCreatedIdea(model.getObject(), ideaCreator, studentsPanel.getStudentSet());
-                        setResponsePage(SupervisorProjectIdeaStartPage.class);
-                        getSession().info("Idea successfully submitted");
-                        } catch (Exception e) {
-                        	e.printStackTrace();
-                        }                
+                	Pair<Boolean, String> acceptance = ideaService.validateSupervisorIdeaSubmission(model.getObject(), studentsPanel.getStudentSet());
+                	if(acceptance.head){
+                		ideaService.saveSupervisorCreatedIdea(model.getObject(), ideaCreator, studentsPanel.getStudentSet());
+                		setResponsePage(SupervisorProjectIdeaStartPage.class);
+                		getSession().info("Idea successfully submitted");
+                	} else {
+                		getSession().error(acceptance.tail);
+                		target.appendJavascript("window.scrollTo(0,0);");
+                	}
+                	target.addComponent(feedbackPanel);
+                	
                    
                 }