From f6732d5a097353fde879b3298639aa8e25571d59 Mon Sep 17 00:00:00 2001
From: Emil Siverhall <emil-siv@dsv.su.se>
Date: Thu, 2 Aug 2012 15:58:11 +0200
Subject: [PATCH] added new page to supervisor - project ideas where only the
 current supervisors ideas that have authors is displayed. from here, the
 supervisor may add a first meeting date to the idea

---
 .../SupervisorMySupervisorIdeasPage.html      |  11 ++
 .../SupervisorMySupervisorIdeasPage.java      |  25 +++
 ...SupervisorMatchedSupervisorIdeasPanel.html |  18 ++
 ...SupervisorMatchedSupervisorIdeasPanel.java | 164 ++++++++++++++++++
 .../SupervisorProjectIdeaOverviewPanel.html   |   3 -
 .../SupervisorProjectIdeaOverviewPanel.java   |  45 +----
 .../SupervisorProjectIdeaTabMenuPanel.java    |   2 +
 7 files changed, 227 insertions(+), 41 deletions(-)
 create mode 100644 src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMySupervisorIdeasPage.html
 create mode 100644 src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMySupervisorIdeasPage.java
 create mode 100644 src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMatchedSupervisorIdeasPanel.html
 create mode 100644 src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMatchedSupervisorIdeasPanel.java

diff --git a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMySupervisorIdeasPage.html b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMySupervisorIdeasPage.html
new file mode 100644
index 0000000000..77666369e8
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMySupervisorIdeasPage.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html
+	xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<body>
+	<wicket:extend>
+	<div wicket:id="feedback"></div>
+	<div wicket:id="availabilityPanel" class="append-bottom"></div>
+	<div class="prepend-top" wicket:id="ideaPanel"></div>
+	</wicket:extend>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMySupervisorIdeasPage.java b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMySupervisorIdeasPage.java
new file mode 100644
index 0000000000..5531be3036
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/supervisor/pages/SupervisorMySupervisorIdeasPage.java
@@ -0,0 +1,25 @@
+package se.su.dsv.scipro.supervisor.pages;
+
+
+import org.apache.wicket.PageParameters;
+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;
+import se.su.dsv.scipro.supervisor.panels.SupervisorAvailabilityPanel;
+import se.su.dsv.scipro.supervisor.panels.SupervisorMatchedSupervisorIdeasPanel;
+
+@Authorization(authorizedRoles={Roles.SYSADMIN})
+public class SupervisorMySupervisorIdeasPage extends AbstractSupervisorProjectIdeaPage {
+
+	private FeedbackPanel feedbackPanel;
+	
+	public SupervisorMySupervisorIdeasPage(PageParameters pp) {
+		super(pp);
+		add(feedbackPanel = new FeedbackPanel("feedback"));
+		feedbackPanel.setOutputMarkupId(true);
+		add(new SupervisorAvailabilityPanel("availabilityPanel", getUser()));
+		add(new SupervisorMatchedSupervisorIdeasPanel("ideaPanel", getUser()));
+		
+	}	
+}
diff --git a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMatchedSupervisorIdeasPanel.html b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMatchedSupervisorIdeasPanel.html
new file mode 100644
index 0000000000..b26fe1a011
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMatchedSupervisorIdeasPanel.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<head>
+<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+</head>
+<body>
+	<wicket:panel>
+		<div wicket:id="dialog">
+        <div wicket:id="dialogPanel"></div>
+   		</div>
+   		<div wicket:id="feedback"></div>
+		<form wicket:id="form">
+			<div class="span-5" wicket:id="levelFilter"></div>
+		</form>
+		<div class="span-24 prepend-top" wicket:id="dataPanel"></div>
+	</wicket:panel>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMatchedSupervisorIdeasPanel.java b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMatchedSupervisorIdeasPanel.java
new file mode 100644
index 0000000000..1adbe29e08
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMatchedSupervisorIdeasPanel.java
@@ -0,0 +1,164 @@
+package se.su.dsv.scipro.supervisor.panels;
+
+import java.util.Iterator;
+
+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.form.Form;
+import org.apache.wicket.markup.html.panel.EmptyPanel;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+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.odlabs.wiquery.ui.dialog.Dialog;
+import org.springframework.data.domain.PageRequest;
+
+import se.su.dsv.scipro.data.dataobjects.Employee;
+import se.su.dsv.scipro.data.dataobjects.User;
+import se.su.dsv.scipro.datatables.BooleanIconColumn;
+import se.su.dsv.scipro.datatables.ClickableTitleColumn;
+import se.su.dsv.scipro.datatables.GenericDataPanel;
+import se.su.dsv.scipro.icons.ImageObject;
+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.reusable.SafeLongToIntService;
+import se.su.dsv.scipro.springdata.services.GenericService;
+import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
+import se.su.dsv.scipro.springdata.services.SupervisorService;
+
+public class SupervisorMatchedSupervisorIdeasPanel extends Panel {
+
+	@SpringBean
+	private SupervisorIdeaService ideaService;
+	@SpringBean
+	private SupervisorService supervisorService;
+	private GenericDataPanel<SupervisorIdea> genericDataPanel;
+	private SupervisorIdeaService.FilterParams params;
+	private Dialog dialog;
+	
+	private static final long serialVersionUID = -9010467449322120267L;
+
+	public SupervisorMatchedSupervisorIdeasPanel(String id, final User supervisor) {
+		super(id);
+		FeedbackPanel feedback = new FeedbackPanel("feedback");
+		feedback.setOutputMarkupId(true);
+		add(feedback);
+		addDialog();
+		addDataTable(supervisor, feedback);
+		add(new FilterForm("form", supervisor));
+	}
+
+	private void addDialog() {
+		dialog = new Dialog("dialog");
+        dialog.setModal(true);
+        dialog.setAutoOpen(false);
+        dialog.setWidth(450);
+        dialog.setHeight(600);
+        dialog.add(new EmptyPanel("dialogPanel"));
+        add(dialog);			
+	}
+	
+	private void addDataTable(final User supervisor, final FeedbackPanel feedback) {
+		add(genericDataPanel = new GenericDataPanel<SupervisorIdea>("dataPanel") {
+		    
+			@Override
+			public int getSize() {
+				return SafeLongToIntService.safeLongToInt(ideaService.countByStatusAndParams(IdeaStatus.TAKEN, params));
+			}
+
+			private static final long serialVersionUID = -4539188306454725307L;
+
+			@Override
+	        public Iterator<SupervisorIdea> getIterator() {
+				 return ideaService.findByStatusAndParams(IdeaStatus.TAKEN, params, new PageRequest(getTable().getCurrentPage(), getTable().getRowsPerPage(), getSort())).iterator();
+			}
+			 
+			@Override
+            public GenericService<SupervisorIdea, Long> getService() {
+                return ideaService;
+            }
+
+            @Override
+            public String getSortString() {
+                return "dateCreated";
+            }
+
+            @Override
+            public IColumn[] getColumns() {
+                IColumn[] columns = new IColumn[5];
+                columns[0] = new PropertyColumn<SupervisorIdea>(Model.of("Date"), "dateCreated", "dateCreated");
+                columns[1] = new PropertyColumn<SupervisorIdea>(Model.of("Level"), "projectClass", "projectClass");
+                columns[2] = new ClickableTitleColumn<SupervisorIdea>(Model.of("Title"), "title", "title") {
+					private static final long serialVersionUID = 4667741924987868274L;
+
+					@Override
+					protected void onClick(final IModel<SupervisorIdea> ideaModel,
+							AjaxRequestTarget target) {
+						dialog.replace(new SupervisorIdeaDetailsPanel("dialogPanel", ideaModel){
+							private static final long serialVersionUID = -1970068053928444580L;
+
+							@Override
+							public void updateTarget(AjaxRequestTarget target, SupervisorIdea idea) {
+								dialog.close(target);
+								info("Meeting details saved");
+								ideaModel.setObject(idea);
+								target.addComponent(feedback);
+								target.addComponent(getWMC());
+							}
+							
+						});
+						dialog.setTitle("Selected supervisor project idea");
+						target.addComponent(dialog);
+						dialog.open(target);
+					}
+				};
+				columns[3] = new PropertyColumn<SupervisorIdea>(Model.of("Author(s)"), "ideaParticipations");
+				columns[4] = new BooleanIconColumn<SupervisorIdea>(Model.of("First meeting added?"), ImageObject.CHECK, ImageObject.DELETE){
+
+					private static final long serialVersionUID = -6759283830735306302L;
+
+					@Override
+					protected boolean booleanValue(IModel<SupervisorIdea> ideaModel) {
+						return ideaModel.getObject().getFirstMeeting()!=null;
+					}
+					
+				};
+                return columns;
+            }
+        });
+		
+	}
+	private class FilterForm extends Form<Void> {
+
+		private static final long serialVersionUID = 6581597176580961782L;
+
+		public FilterForm(String id, User user) {
+			super(id);
+			params = new SupervisorIdeaService.FilterParams();
+			
+			//FILTERING ON PROJECT CLASS:
+			final FilterFormProjectClass levelFilter = new FilterFormProjectClass("levelFilter", null) {
+				private static final long serialVersionUID = -7758850229259608443L;
+
+				@Override
+				public void ajaxUpdate(AjaxRequestTarget target) {
+					if(!getProjectClasses().isEmpty()){
+						params.setLevels(getProjectClasses());
+					}
+					target.addComponent(genericDataPanel.getWMC());					
+				}
+
+				
+			};
+			params.setLevels(levelFilter.getProjectClasses());
+			Employee supervisor = supervisorService.findByUser(user);
+			params.setSupervisor(supervisor);
+			add(levelFilter);
+		}
+
+		
+	}
+}
diff --git a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaOverviewPanel.html b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaOverviewPanel.html
index 89a52c5584..9eb5b58c6d 100644
--- a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaOverviewPanel.html
+++ b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaOverviewPanel.html
@@ -5,9 +5,6 @@
 </head>
 <body>
 	<wicket:panel>
-		<div wicket:id="dialog">
-        <div wicket:id="dialogPanel"></div>
-   		</div>
    		<div wicket:id="feedback"></div>
 		<form wicket:id="form">
 			<div class="span-5" wicket:id="levelFilter"></div>
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 5114c97c8b..e8a037445c 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
@@ -8,23 +8,21 @@ import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
 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.form.Form;
-import org.apache.wicket.markup.html.panel.EmptyPanel;
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 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.odlabs.wiquery.ui.dialog.Dialog;
 import org.springframework.data.domain.PageRequest;
 
 import se.su.dsv.scipro.data.dataobjects.Employee;
 import se.su.dsv.scipro.data.dataobjects.User;
 import se.su.dsv.scipro.datatables.ClickableIconColumn;
-import se.su.dsv.scipro.datatables.ClickableTitleColumn;
 import se.su.dsv.scipro.datatables.GenericDataPanel;
 import se.su.dsv.scipro.icons.ImageIcon;
 import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
 import se.su.dsv.scipro.match.panel.FilterFormProjectClass;
+import se.su.dsv.scipro.reusable.SafeLongToIntService;
 import se.su.dsv.scipro.springdata.services.GenericService;
 import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
 import se.su.dsv.scipro.springdata.services.SupervisorService;
@@ -38,7 +36,6 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
 	private SupervisorService supervisorService;
 	private GenericDataPanel<SupervisorIdea> genericDataPanel;
 	private SupervisorIdeaService.FilterParams params;
-	private Dialog dialog;
 	
 	private static final long serialVersionUID = -9010467449322120267L;
 
@@ -47,20 +44,9 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
 		FeedbackPanel feedback = new FeedbackPanel("feedback");
 		feedback.setOutputMarkupId(true);
 		add(feedback);
-		addDialog();
 		addDataTable(supervisor, feedback);
 		add(new FilterForm("form", supervisor));
 	}
-
-	private void addDialog() {
-		dialog = new Dialog("dialog");
-        dialog.setModal(true);
-        dialog.setAutoOpen(false);
-        dialog.setWidth(450);
-        dialog.setHeight(600);
-        dialog.add(new EmptyPanel("dialogPanel"));
-        add(dialog);			
-	}
 	
 	private void addDataTable(final User supervisor, final FeedbackPanel feedback) {
 		add(genericDataPanel = new GenericDataPanel<SupervisorIdea>("dataPanel") {
@@ -72,6 +58,11 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
 				 return ideaService.findAll(params, new PageRequest(getTable().getCurrentPage(), getTable().getRowsPerPage(), getSort())).iterator();
 			}
 			 
+			@Override
+			public int getSize(){
+		        return SafeLongToIntService.safeLongToInt(ideaService.count(params));
+		    }
+			
 			@Override
             public GenericService<SupervisorIdea, Long> getService() {
                 return ideaService;
@@ -87,29 +78,7 @@ public class SupervisorProjectIdeaOverviewPanel extends Panel {
                 IColumn[] columns = new IColumn[7];
                 columns[0] = new PropertyColumn<SupervisorIdea>(Model.of("Date"), "dateCreated", "dateCreated");
                 columns[1] = new PropertyColumn<SupervisorIdea>(Model.of("Level"), "projectClass", "projectClass");
-                columns[2] = new ClickableTitleColumn<SupervisorIdea>(Model.of("Title"), "title", "title") {
-					private static final long serialVersionUID = 4667741924987868274L;
-
-					@Override
-					protected void onClick(final IModel<SupervisorIdea> ideaModel,
-							AjaxRequestTarget target) {
-						dialog.replace(new SupervisorIdeaDetailsPanel("dialogPanel", ideaModel){
-							private static final long serialVersionUID = -1970068053928444580L;
-
-							@Override
-							public void updateTarget(AjaxRequestTarget target, SupervisorIdea idea) {
-								dialog.close(target);
-								info("Meeting details saved");
-								ideaModel.setObject(idea);
-								target.addComponent(feedback);								
-							}
-							
-						});
-						dialog.setTitle("Selected supervisor project idea");
-						target.addComponent(dialog);
-						dialog.open(target);
-					}
-				};
+                columns[2] = new PropertyColumn<SupervisorIdea>(Model.of("Title"), "title", "title");
                 columns[3] = new PropertyColumn<SupervisorIdea>(Model.of("Creator"), "creator.user.lastName", "creator");
                 columns[4] = new PropertyColumn<SupervisorIdea>(Model.of("Status"), "ideaStatus", "ideaStatus");
                 columns[5] = new ClickableIconColumn<SupervisorIdea>(Model.of("Edit"), null, ImageIcon.ICON_EDIT) {
diff --git a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaTabMenuPanel.java b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaTabMenuPanel.java
index 24ef41439e..c505e6fedc 100644
--- a/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaTabMenuPanel.java
+++ b/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorProjectIdeaTabMenuPanel.java
@@ -10,6 +10,7 @@ import se.su.dsv.scipro.components.menuhighlighting.MenuHighlightSupervisorProje
 import se.su.dsv.scipro.supervisor.pages.AbstractSupervisorProjectIdeaPage;
 import se.su.dsv.scipro.supervisor.pages.SupervisorInterestPage;
 import se.su.dsv.scipro.supervisor.pages.SupervisorMyProjectIdeasPage;
+import se.su.dsv.scipro.supervisor.pages.SupervisorMySupervisorIdeasPage;
 import se.su.dsv.scipro.supervisor.pages.SupervisorProjectIdeaStartPage;
 
 public class SupervisorProjectIdeaTabMenuPanel extends AbstractMenuPanel{
@@ -24,6 +25,7 @@ public class SupervisorProjectIdeaTabMenuPanel extends AbstractMenuPanel{
 	protected List<MenuItem> getItemList() {
 		List<MenuItem> items = new ArrayList<MenuItem>();
 		items.add(new MenuItem("Supervisor project ideas", SupervisorProjectIdeaStartPage.class, MenuHighlightSupervisorProjectIdea.class));
+		items.add(new MenuItem("My matched supervisor project ideas", SupervisorMySupervisorIdeasPage.class));
 		items.add(new MenuItem("Unmatched student project ideas", SupervisorInterestPage.class));
 		items.add(new MenuItem("My matched student project ideas", SupervisorMyProjectIdeasPage.class));
 		return items;