From 1b38a5e172862436712abc4536da199f54158282 Mon Sep 17 00:00:00 2001
From: Emil Siverhall <emil-siv@dsv.su.se>
Date: Mon, 27 Feb 2012 16:00:41 +0100
Subject: [PATCH 1/4] added new panel for keyword detail dialog with supervisor
 info

---
 .../panels/match/KeywordDetailsPanel.html     | 31 +++++++++
 .../panels/match/KeywordDetailsPanel.java     | 66 +++++++++++++++++++
 2 files changed, 97 insertions(+)
 create mode 100644 src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.html
 create mode 100644 src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.java

diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.html b/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.html
new file mode 100644
index 0000000000..de2184fc2b
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html
+	xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
+<body>
+	<wicket:panel>
+		<form wicket:id="keywordDetails">
+		<table wicket:id="table" class="rounded-corner">
+		<thead>
+			<tr>
+			<th class="rounded-left-top">Supervisors with selected keyword </th>
+			<th class="rounded-right-top">&nbsp;</th>
+			</tr>
+		</thead>
+		<tbody>
+			<tr wicket:id="listView">
+				<td colspan="2" wicket:id="name"></td>
+			</tr>
+			<tr><td colspan="2" wicket:id="emptyLabel"></td></tr>
+		</tbody>
+		<tfoot>
+			<tr>
+				<td colspan="2" class="rounded-foot">&nbsp;</td>
+			</tr>
+		</tfoot>
+		</table>
+		<div wicket:id="navigator"></div>		
+			<div class="prepend-top"><input wicket:id="closeButton" type="submit" value="Close" /></div>
+		</form>
+	</wicket:panel>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.java
new file mode 100644
index 0000000000..c351d9a14d
--- /dev/null
+++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.java
@@ -0,0 +1,66 @@
+package se.su.dsv.scipro.admin.panels.match;
+
+import java.util.List;
+
+import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.PageableListView;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.spring.injection.annot.SpringBean;
+
+import se.su.dsv.scipro.data.dataobjects.Employee;
+import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao;
+import se.su.dsv.scipro.match.dataobject.Keyword;
+
+public class KeywordDetailsPanel extends Panel {
+	private static final long serialVersionUID = 1L;
+	
+	@SpringBean
+	private SupervisorDao supervisorDao;
+
+	public KeywordDetailsPanel(String str, Keyword keyword) {
+		super(str);
+		add(new KeywordDetailsForm("keywordDetails", keyword));
+	}
+	
+	private class KeywordDetailsForm extends Form<Keyword>{
+		
+		private static final long serialVersionUID = 1L;
+
+		public KeywordDetailsForm(String id, final Keyword keyword) {
+			super(id);
+			this.setOutputMarkupId(true);
+			List<Employee> listOfSupervisors = supervisorDao.getSupervisorsByKeyword(keyword);
+
+			Label emptyLabel = new Label("emptyLabel","No supervisors attached to the selected keyword");
+			emptyLabel.setVisible(listOfSupervisors.isEmpty());
+			WebMarkupContainer container = new WebMarkupContainer("table");
+			container.setOutputMarkupId(true);
+			
+			PageableListView<Employee> listView = new PageableListView<Employee>("listView", listOfSupervisors, 12) {
+
+				private static final long serialVersionUID = 2191181676642843499L;
+
+				@Override
+				protected void populateItem(ListItem<Employee> item) {
+					Employee e = item.getModelObject();
+					item.add(new Label("name", e.getNameAsString()));
+				}
+			};
+			container.add(listView);
+			container.add(emptyLabel);
+			AjaxPagingNavigator navigator = new AjaxPagingNavigator("navigator", listView);
+			navigator.setVisible(!listOfSupervisors.isEmpty());
+			add(navigator);
+			add(container);
+			Button closeButton = new Button("closeButton");
+            
+			add(closeButton);
+		}
+				
+	}
+}
\ No newline at end of file

From 882b7849d2880393b8abb0fc2bf34690325eaa95 Mon Sep 17 00:00:00 2001
From: Emil Siverhall <emil-siv@dsv.su.se>
Date: Mon, 27 Feb 2012 16:01:28 +0100
Subject: [PATCH 2/4] added dao method for retrieving supervisors based on
 specific keyword

---
 .../scipro/match/dao/interfaces/SupervisorDao.java  |  3 +++
 .../scipro/match/dao/jpa/SupervisorDaoJPAImp.java   | 13 +++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/src/main/java/se/su/dsv/scipro/match/dao/interfaces/SupervisorDao.java b/src/main/java/se/su/dsv/scipro/match/dao/interfaces/SupervisorDao.java
index 3b39960532..4b8b6c08b4 100644
--- a/src/main/java/se/su/dsv/scipro/match/dao/interfaces/SupervisorDao.java
+++ b/src/main/java/se/su/dsv/scipro/match/dao/interfaces/SupervisorDao.java
@@ -9,6 +9,7 @@ import se.su.dsv.scipro.data.dataobjects.Language;
 import se.su.dsv.scipro.data.dataobjects.ProjectClass;
 import se.su.dsv.scipro.data.dataobjects.User;
 import se.su.dsv.scipro.match.dataobject.Availability;
+import se.su.dsv.scipro.match.dataobject.Keyword;
 
 public interface SupervisorDao extends QueryableDao<Employee, SupervisorDaoParams>{
 
@@ -19,6 +20,8 @@ public interface SupervisorDao extends QueryableDao<Employee, SupervisorDaoParam
     List<Employee> getCapableSupervisors(ProjectClass projectClass,
         Set<Language> languages);
     
+    List<Employee> getSupervisorsByKeyword(Keyword keyword);
+    
     List<Employee> getAutoCompleteCapableSupervisors(
         /*final ProjectClass projectClass, final Set<Language> languages,*/ final String searchString, int limit);
 
diff --git a/src/main/java/se/su/dsv/scipro/match/dao/jpa/SupervisorDaoJPAImp.java b/src/main/java/se/su/dsv/scipro/match/dao/jpa/SupervisorDaoJPAImp.java
index cf2c9e53b8..d37b2c3b35 100644
--- a/src/main/java/se/su/dsv/scipro/match/dao/jpa/SupervisorDaoJPAImp.java
+++ b/src/main/java/se/su/dsv/scipro/match/dao/jpa/SupervisorDaoJPAImp.java
@@ -95,6 +95,10 @@ SupervisorDao {
 				new QuerySet().projectClass(projectClass).languages(languages)
 				.fetchCallback());
 	}
+	
+	public List<Employee> getSupervisorsByKeyword(final Keyword keyword) {
+		return getJpaTemplate().execute(new QuerySet().keyword(keyword).fetchCallback());
+	}
 
 	public List<Employee> getAutoCompleteCapableSupervisors(
 			/*final ProjectClass projectClass, final Set<Language> languages,*/
@@ -126,6 +130,15 @@ SupervisorDao {
 			}
 			return this;
 		}
+		
+		public QuerySet keyword(Keyword keyword) {
+			if (keyword != null) {
+				getQuery().combine(
+						new Query().join("_.keywords.keywords k").where("k = :keyword").parameter(
+								"keyword", keyword)).distinct();
+			}
+			return this;
+		}
 
 		public QuerySet orderByUser() {
 			getQuery().combine(RoleDaoJPAImp.orderByUserQuery());

From b79ac663ec0fc0955ba41ea8861d4b83f4bbfed4 Mon Sep 17 00:00:00 2001
From: Emil Siverhall <emil-siv@dsv.su.se>
Date: Mon, 27 Feb 2012 16:02:02 +0100
Subject: [PATCH 3/4] added link to details dialog for manage keyword panels

---
 .../panels/match/ManageKeywordPanel.html      |  2 +-
 .../panels/match/ManageKeywordPanel.java      | 27 +++++++++++++++++--
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.html b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.html
index 94c99fde31..6f4bc34cf8 100644
--- a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.html
+++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.html
@@ -17,7 +17,7 @@
 		</thead>
 		<tbody>
 			<tr wicket:id="keywordsDataView">
-				<td wicket:id="name"></td>
+				<td><a href="#" wicket:id="detailsLink"><span wicket:id="name"></span></a></td>
 				<td wicket:id="type"></td>
 				<td><a href="#" wicket:id="activeLink">
 					<img wicket:id="activeIcon" /></a></td>
diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java
index 631bae94a0..4c40ac6ea1 100644
--- a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java
+++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java
@@ -1,5 +1,7 @@
 package se.su.dsv.scipro.admin.panels.match;
 
+import java.util.List;
+
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -15,8 +17,10 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.odlabs.wiquery.ui.dialog.Dialog;
 
 import se.su.dsv.scipro.components.LazyDeleteAjaxLink;
+import se.su.dsv.scipro.data.dataobjects.Employee;
 import se.su.dsv.scipro.icons.ImageObject;
 import se.su.dsv.scipro.match.dao.interfaces.KeywordDao;
+import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao;
 import se.su.dsv.scipro.match.dataobject.Keyword;
 import se.su.dsv.scipro.match.dataobject.KeywordType;
 import se.su.dsv.scipro.match.dataprovider.KeywordsDataProvider;
@@ -27,6 +31,8 @@ public class ManageKeywordPanel extends Panel {
 	
 	@SpringBean
 	private KeywordDao keywordDao;
+	@SpringBean
+	private SupervisorDao supervisorDao;
 	
 	private KeywordsDataProvider keywordsDataProvider;
 	
@@ -70,7 +76,7 @@ public class ManageKeywordPanel extends Panel {
 			@Override
 			protected void populateItem(final Item<Keyword> item) {
 				item.setOutputMarkupId(true);
-				Keyword keyword = item.getModelObject();
+				final Keyword keyword = item.getModelObject();
 				
 				final ImageObject editIcon = new ImageObject("editIcon", ImageObject.SIXTEEN + ImageObject.EDIT);
 				
@@ -110,7 +116,24 @@ public class ManageKeywordPanel extends Panel {
 					}
 				};
 				
-				item.add(new Label("name", new Model<String>(keyword.getKeyword())));
+				final AjaxLink<Void> keywordDetailsLink = new AjaxLink<Void>("detailsLink") {
+
+					private static final long serialVersionUID = 1340379052190115333L;
+
+					@Override
+					public void onClick(AjaxRequestTarget target) {
+						target.addComponent(dialog);
+						dialog.setWidth(400);
+						dialog.setHeight(580);
+						dialog.setTitle(keyword.getKeyword());
+						dialog.replace(new KeywordDetailsPanel("dialogContent", keyword));
+						dialog.open(target);
+					}
+					
+				};
+				keywordDetailsLink.add(new Label("name", new Model<String>(keyword.getKeyword())));
+				item.add(keywordDetailsLink);
+				//item.add(new Label("name", new Model<String>(keyword.getKeyword())));
 				item.add(new Label("type", new Model<String>(keyword.getType().getName())));
 				item.add(editLink);
 				item.add(activeLink);

From 388b77beaf92f860b0a0f27a712a80a4d61281c8 Mon Sep 17 00:00:00 2001
From: Emil Siverhall <emil-siv@dsv.su.se>
Date: Tue, 28 Feb 2012 09:22:19 +0100
Subject: [PATCH 4/4] added label with number of supervisors for each keyword
 and made some changes to dialog sizes

---
 .../admin/panels/match/KeywordDetailsPanel.html       |  2 +-
 .../admin/panels/match/KeywordDetailsPanel.java       |  2 ++
 .../scipro/admin/panels/match/ManageKeywordPanel.java | 11 +++--------
 3 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.html b/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.html
index de2184fc2b..16f8162004 100644
--- a/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.html
+++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.html
@@ -8,7 +8,7 @@
 		<thead>
 			<tr>
 			<th class="rounded-left-top">Supervisors with selected keyword </th>
-			<th class="rounded-right-top">&nbsp;</th>
+			<th class="rounded-right-top"><span class="right" wicket:id="totalLabel"></span></th>
 			</tr>
 		</thead>
 		<tbody>
diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.java
index c351d9a14d..6e67de6423 100644
--- a/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.java
+++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/KeywordDetailsPanel.java
@@ -37,6 +37,7 @@ public class KeywordDetailsPanel extends Panel {
 			List<Employee> listOfSupervisors = supervisorDao.getSupervisorsByKeyword(keyword);
 
 			Label emptyLabel = new Label("emptyLabel","No supervisors attached to the selected keyword");
+			Label totalNumberLabel = new Label("totalLabel", "Total: " + listOfSupervisors.size());
 			emptyLabel.setVisible(listOfSupervisors.isEmpty());
 			WebMarkupContainer container = new WebMarkupContainer("table");
 			container.setOutputMarkupId(true);
@@ -52,6 +53,7 @@ public class KeywordDetailsPanel extends Panel {
 				}
 			};
 			container.add(listView);
+			container.add(totalNumberLabel);
 			container.add(emptyLabel);
 			AjaxPagingNavigator navigator = new AjaxPagingNavigator("navigator", listView);
 			navigator.setVisible(!listOfSupervisors.isEmpty());
diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java
index 4c40ac6ea1..91f7fee9da 100644
--- a/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java
+++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/ManageKeywordPanel.java
@@ -1,7 +1,5 @@
 package se.su.dsv.scipro.admin.panels.match;
 
-import java.util.List;
-
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -17,10 +15,8 @@ import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.odlabs.wiquery.ui.dialog.Dialog;
 
 import se.su.dsv.scipro.components.LazyDeleteAjaxLink;
-import se.su.dsv.scipro.data.dataobjects.Employee;
 import se.su.dsv.scipro.icons.ImageObject;
 import se.su.dsv.scipro.match.dao.interfaces.KeywordDao;
-import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao;
 import se.su.dsv.scipro.match.dataobject.Keyword;
 import se.su.dsv.scipro.match.dataobject.KeywordType;
 import se.su.dsv.scipro.match.dataprovider.KeywordsDataProvider;
@@ -31,8 +27,6 @@ public class ManageKeywordPanel extends Panel {
 	
 	@SpringBean
 	private KeywordDao keywordDao;
-	@SpringBean
-	private SupervisorDao supervisorDao;
 	
 	private KeywordsDataProvider keywordsDataProvider;
 	
@@ -91,6 +85,8 @@ public class ManageKeywordPanel extends Panel {
 					@Override
 					public void onClick(AjaxRequestTarget target) {
 						target.addComponent(dialog);
+						dialog.setWidth(400);
+						dialog.setHeight(225);
 						dialog.setTitle("Edit keyword...");
 						dialog.replace(new EditKeywordPanel("dialogContent", new Model<Keyword>(item.getModelObject())));
 						dialog.open(target);
@@ -123,7 +119,7 @@ public class ManageKeywordPanel extends Panel {
 					@Override
 					public void onClick(AjaxRequestTarget target) {
 						target.addComponent(dialog);
-						dialog.setWidth(400);
+						dialog.setWidth(500);
 						dialog.setHeight(580);
 						dialog.setTitle(keyword.getKeyword());
 						dialog.replace(new KeywordDetailsPanel("dialogContent", keyword));
@@ -133,7 +129,6 @@ public class ManageKeywordPanel extends Panel {
 				};
 				keywordDetailsLink.add(new Label("name", new Model<String>(keyword.getKeyword())));
 				item.add(keywordDetailsLink);
-				//item.add(new Label("name", new Model<String>(keyword.getKeyword())));
 				item.add(new Label("type", new Model<String>(keyword.getType().getName())));
 				item.add(editLink);
 				item.add(activeLink);