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"> </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"> </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"> </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);