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;