From 9b03f34c7a8bc1615b32eade8385baa937c2bf15 Mon Sep 17 00:00:00 2001 From: fred-fri <fred-fri@dsv.su.se> Date: Wed, 30 May 2012 15:16:25 +0900 Subject: [PATCH] refactored datespanel, removed old project management panel & added new datespanel to project (only added- hasnt been hooked to service yet) --- .../admin/pages/ProjectManagementPage.html | 2 + .../admin/pages/ProjectManagementPage.java | 13 +- .../panels/ProjectManagementPanel.html | 82 ----- .../panels/ProjectManagementPanel.java | 303 ------------------ .../se/su/dsv/scipro/reusable/DatesPanel.java | 134 ++++---- 5 files changed, 87 insertions(+), 447 deletions(-) delete mode 100644 src/main/java/se/su/dsv/scipro/project/panels/ProjectManagementPanel.html delete mode 100644 src/main/java/se/su/dsv/scipro/project/panels/ProjectManagementPanel.java diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/ProjectManagementPage.html b/src/main/java/se/su/dsv/scipro/admin/pages/ProjectManagementPage.html index 5d494354f5..445aec8f16 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/ProjectManagementPage.html +++ b/src/main/java/se/su/dsv/scipro/admin/pages/ProjectManagementPage.html @@ -8,6 +8,8 @@ </div> <div><b>Filter by project title:</b></div> <div wicket:id="fsp"></div> + <div><b>Filter by dates:</b></div> + <div wicket:id="dates"></div> <div> <button wicket:id="newLink">Create new project</button> </div> diff --git a/src/main/java/se/su/dsv/scipro/admin/pages/ProjectManagementPage.java b/src/main/java/se/su/dsv/scipro/admin/pages/ProjectManagementPage.java index 5b2c7d475d..d8db939ebe 100644 --- a/src/main/java/se/su/dsv/scipro/admin/pages/ProjectManagementPage.java +++ b/src/main/java/se/su/dsv/scipro/admin/pages/ProjectManagementPage.java @@ -20,12 +20,14 @@ import se.su.dsv.scipro.datatables.ClickableIconColumn; import se.su.dsv.scipro.datatables.ClickableTitleColumn; import se.su.dsv.scipro.datatables.project.GenericDataPanel; import se.su.dsv.scipro.icons.ImageIcon; +import se.su.dsv.scipro.reusable.DatesPanel; import se.su.dsv.scipro.reusable.FilterStringPanel; import se.su.dsv.scipro.security.auth.Authorization; import se.su.dsv.scipro.security.auth.roles.Roles; import se.su.dsv.scipro.springdata.services.GenericService; import se.su.dsv.scipro.springdata.services.ProjectService; +import java.util.Date; import java.util.Iterator; //@Authorization(authorizedRoles={Roles.SYSADMIN}) @@ -38,10 +40,10 @@ public class ProjectManagementPage extends AbstractAdminPage { private FilterStringPanel filterStringPanel; private GenericDataPanel<Project> genericDataPanel; private Dialog dialog; + private DatesPanel datesPanel; public ProjectManagementPage(PageParameters pp) { super(pp); -// add(new ProjectManagementPanel("pmp")); dialog = new Dialog("dialog"); dialog.setModal(true); @@ -85,6 +87,15 @@ public class ProjectManagementPage extends AbstractAdminPage { } }); + add(datesPanel = new DatesPanel("dates") { + @Override + public void onUpdateFilter(AjaxRequestTarget target, Date fromDate, Date toDate) { + System.out.println(fromDate); + System.out.println(toDate); + target.addComponent(genericDataPanel.getWMC()); + } + }); + add(genericDataPanel = new GenericDataPanel<Project>("pmp") { @Override public GenericService getService() { diff --git a/src/main/java/se/su/dsv/scipro/project/panels/ProjectManagementPanel.html b/src/main/java/se/su/dsv/scipro/project/panels/ProjectManagementPanel.html deleted file mode 100644 index 5ce4dfaa89..0000000000 --- a/src/main/java/se/su/dsv/scipro/project/panels/ProjectManagementPanel.html +++ /dev/null @@ -1,82 +0,0 @@ -<!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 class="span-24 last" wicket:id="settingsContainer"> - <label>Title: </label> - <div wicket:id="filterStringPanel"></div> - <label>Created between: </label> - <div wicket:id="filterDatesPanel"></div> - - <div class="span-20"> - <div class="span-4"> - <label>Level: </label> - <div wicket:id="filterProjectClassPanel"></div> - </div> - <div class="span-4 last"> - <label>Status: </label> - <div wicket:id="filterProjectStatusPanel"></div> - </div> - </div> - - - </div> - - <div class="right"> - <button wicket:id="newLink">Create new project</button> - </div> - <div wicket:id="dialog"> - <div wicket:id="panel"></div> - </div> - - <div class="span-24 last" wicket:id="dataviewContainer"> - <div>Number of projects: <span wicket:id="totalProjectsLabel"></span></div> - <table class="rounded-corner"> - <thead> - <tr> - <th class="rounded-left-top"><a href="#" - wicket:id="titleSort">Title</a></th> - <!-- <th>Title</th> --> - <th>Level</th> - <th>Author(s)</th> - <th>Supervisor</th> - <th>Reviewer</th> - <th>Status</th> - <th>Edit</th> - <th class="rounded-right-top">Delete</th> - </tr> - </thead> - <tfoot> - <tr> - <td colspan="8" class="rounded-foot"> </td> - </tr> - </tfoot> - <tbody wicket:id="dataview"> - <tr> - <td><a wicket:id="openLink"><span wicket:id="projectTitle">Other role</span></a></td> - <td wicket:id="projectLevel">Other role</td> - <td wicket:id="authorsLabel">Other role</td> - <td wicket:id="headsupervisorLabel">Other role</td> - <td wicket:id="reviewerLabel">Other role</td> - <td wicket:id="statusLabel">Other role</td> - <td><a href="#" wicket:id="testLink"><img wicket:id="editIcon" /></a></td> - <td><a href="#" wicket:id="deleteLink"><img wicket:id="deleteIcon" alt="Delete" title="Delete" /></a></td> - </tr> - </tbody> - <tbody> - <tr> - <td wicket:id="emptyLabel" colspan="8"></td> - </tr> - </tbody> - </table> - <div wicket:id="nav"></div> - </div> - - - </wicket:panel> -</body> -</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/project/panels/ProjectManagementPanel.java b/src/main/java/se/su/dsv/scipro/project/panels/ProjectManagementPanel.java deleted file mode 100644 index 5e6eb53f8f..0000000000 --- a/src/main/java/se/su/dsv/scipro/project/panels/ProjectManagementPanel.java +++ /dev/null @@ -1,303 +0,0 @@ -package se.su.dsv.scipro.project.panels; - -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.markup.html.AjaxLink; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.link.Link; -import org.apache.wicket.markup.html.navigation.paging.PagingNavigator; -import org.apache.wicket.markup.html.panel.EmptyPanel; -import org.apache.wicket.markup.html.panel.Panel; -import org.apache.wicket.markup.repeater.Item; -import org.apache.wicket.markup.repeater.data.DataView; -import org.apache.wicket.model.Model; -import org.apache.wicket.spring.injection.annot.SpringBean; -import org.odlabs.wiquery.ui.dialog.Dialog; -import se.su.dsv.scipro.SciProSession; -import se.su.dsv.scipro.admin.pages.ProjectManagementPage; -import se.su.dsv.scipro.admin.panels.AdminEditProject; -import se.su.dsv.scipro.data.dao.interfaces.Dao.SortableParams.Sort; -import se.su.dsv.scipro.data.dao.interfaces.ProjectDao; -import se.su.dsv.scipro.data.dataobjects.Project; -import se.su.dsv.scipro.data.facade.ProjectFacade; -import se.su.dsv.scipro.dataproviders.NewProjectDataProvider; - -import se.su.dsv.scipro.icons.ImageObject; - -import se.su.dsv.scipro.io.ExternalImporter; - -import se.su.dsv.scipro.reusable.DatesPanel; -import se.su.dsv.scipro.reusable.FilterProjectClassPanel; -import se.su.dsv.scipro.reusable.FilterProjectStatusPanel; -import se.su.dsv.scipro.reusable.FilterStringPanel; -import se.su.dsv.scipro.security.auth.roles.Roles; -import se.su.dsv.scipro.util.JavascriptEventConfirmation; - -import java.util.HashSet; -import java.util.Set; - -public class ProjectManagementPanel extends Panel { - - - @SpringBean - private ProjectFacade projectFacade; - - private static final long serialVersionUID = 1L; - - private WebMarkupContainer dataviewContainer; - - private ProjectDao.Params params; - private NewProjectDataProvider dataProvider; - - private Label totalProjectsLabel; - private Label emptyLabel; - private PagingNavigator nav; - - private Dialog dialog; - - public ProjectManagementPanel(String id) { - super(id); - this.setOutputMarkupId(true); - dataviewSetup(); - settingsSetup(); - sortSetup(); - createSetup(); - } - - private void ajaxRefresh(AjaxRequestTarget target) { - target.addComponent(dataviewContainer); //refresh the container containing the list - nav.setVisible(dataProvider.size() != 0); - target.addComponent(nav); - emptyLabel.setVisible(dataProvider.size() == 0); - target.addComponent(emptyLabel); - totalProjectsLabel.setDefaultModel(new Model(new String(Integer.toString(dataProvider.size())))); - target.addComponent(totalProjectsLabel); - } - - private void dataviewSetup() { - params = new ProjectDao.Params(); - params.setSortOn("title", Sort.ASCENDING); - // params.setCategories(filterSet); - dataProvider = new NewProjectDataProvider(params); - dataviewContainer = new WebMarkupContainer("dataviewContainer"); - dataviewContainer.setOutputMarkupId(true); - add(dataviewContainer); - DataView<Project> dataview = new DataView<Project>("dataview", dataProvider, 15) { - private static final long serialVersionUID = 1L; - - @Override - protected void populateItem(Item<Project> item) { - final Project p = item.getModelObject(); - - AjaxLink openLink = new AjaxLink<Void>("openLink") { - private static final long serialVersionUID = 1L; - @Override - public void onClick(AjaxRequestTarget target) { - dialog.replace(new AdminEditProject("panel", new Model<Project>(p)) { - private static final long serialVersionUID = -3929246545240675832L; - - @Override - public void onUpdate(AjaxRequestTarget target) { - setResponsePage(ProjectManagementPage.class); - } - - @Override - public boolean isEditable() { - return false; - } - }); - dialog.setTitle("Project details"); - target.addComponent(dialog); - dialog.open(target); - } - - }; - openLink.add(new Label("projectTitle", p.getTitle())); - item.add(openLink); - - item.add(new Label("projectLevel", p.getProjectClass().toString())); - item.add(new Label("authorsLabel", p.getProjectParticipantsAsString())); - - item.add(new EmptyPanel("headsupervisorLabel")); - if (p.getHeadSupervisor() != null) { - item.replace(new Label("headsupervisorLabel", p.getHeadSupervisor().getNameAsString())); - } - - item.add(new Label("reviewerLabel", p.getProjectReviewersAsString())); - item.add(new Label("statusLabel", p.getProjectStatus().toString())); - - //edit link. this is ugly and is taken straight out of the old panel. should be done using facades. - AjaxLink testLink = new AjaxLink<Void>("testLink") { - private static final long serialVersionUID = 1L; - - @Override - public void onClick(AjaxRequestTarget target) { - dialog.replace(new AdminEditProject("panel", new Model<Project>(p)) { - private static final long serialVersionUID = -633068454448962134L; - - @Override - public void onUpdate(AjaxRequestTarget target) { - dialog.close(target); - ajaxRefresh(target); - } - - @Override - public boolean isEditable() { - return SciProSession.get().authorizedForRole(Roles.SYSADMIN); - } - }); - dialog.setTitle("Edit project"); - target.addComponent(dialog); - dialog.open(target); - } - - }; - testLink.add(new ImageObject("editIcon", ImageObject.SIXTEEN + ImageObject.EDIT)); - testLink.setVisible(isEditable()); - item.add(testLink); - AjaxLink deleteLink = new AjaxLink<Void>("deleteLink") { - private static final long serialVersionUID = 1L; - - @Override - public void onClick(AjaxRequestTarget target) { - projectFacade.deleteProject(p); - ajaxRefresh(target); - } - - }; - deleteLink.add(new ImageObject("deleteIcon", ImageObject.SIXTEEN + ImageObject.DELETE)); - deleteLink.setVisible(isEditable()); - deleteLink.add(new JavascriptEventConfirmation("onclick", "Are you sure you want to delete this project? This action can NOT be undone!")); - item.add(deleteLink); - - } - }; - dataviewContainer.add(dataview); - - nav = new PagingNavigator("nav", dataview); //we need a navigator - nav.setOutputMarkupId(true); //make it ajax-targetable - nav.setVisible(dataProvider.size() != 0); - dataviewContainer.add(nav); //add it - - totalProjectsLabel = new Label("totalProjectsLabel", Integer.toString(dataProvider.size())); - totalProjectsLabel.setOutputMarkupId(true); - dataviewContainer.add(totalProjectsLabel); - - emptyLabel = new Label("emptyLabel", "No projects to show"); //informs the user that the list is emty - emptyLabel.setOutputMarkupId(true); //make it ajax-targetable - emptyLabel.setVisible(dataProvider.size() == 0); - dataviewContainer.add(emptyLabel); //add it - } - - private void settingsSetup() { - WebMarkupContainer settingsContainer = new WebMarkupContainer("settingsContainer"); - add(settingsContainer); - - //under here are the filtering components: beginning with the filter on string - settingsContainer.add(new FilterStringPanel("filterStringPanel") { - private static final long serialVersionUID = 1L; - - @Override - public void onUpdateFilter(AjaxRequestTarget target) { - params.setFilterString(getFilterString()); - ajaxRefresh(target); - } - }); - - settingsContainer.add(new DatesPanel("filterDatesPanel") { - private static final long serialVersionUID = 1L; - - @Override - public void onUpdateFilter(AjaxRequestTarget target) { - //based on dateCreated, not Daisy-startdate. - params.setCreatedAfter(getFromDate()); - params.setCreatedBefore(getToDate()); - ajaxRefresh(target); - } - - }); - - settingsContainer.add(new FilterProjectClassPanel("filterProjectClassPanel") { - private static final long serialVersionUID = 1L; - - @Override - public void onUpdateFilter(AjaxRequestTarget target) { - params.setProjectClasses(getSelectedProjectClasses()); - ajaxRefresh(target); - } - - }); - - settingsContainer.add(new FilterProjectStatusPanel("filterProjectStatusPanel") { - private static final long serialVersionUID = 1L; - - @Override - public void onUpdateFilter(AjaxRequestTarget target) { - params.setProjectStatuses(getSelectedProjectStatuses()); - ajaxRefresh(target); - } - - }); - } - - private void sortSetup() { - final Set<String> sortString = new HashSet<String>(); //make a set with columns you want to be sortable - sortString.add(new String("title")); - for (final String s : sortString) { //create links for sorting using the set - Link<Void> link = new Link<Void>(s + "Sort") { - private static final long serialVersionUID = 1L; - - @Override - public void onClick() { - if (params.getSortField().equals(s) && params.getDirection().equals(Sort.ASCENDING)) - params.setSortOn(s, Sort.DESCENDING); - else params.setSortOn(s, Sort.ASCENDING); - } - }; - dataviewContainer.add(link); //add the links - } - } - - private void createSetup() { - dialog = new Dialog("dialog"); - dialog.setModal(true); - dialog.setAutoOpen(false); - dialog.setWidth(450); - dialog.setHeight(525); - add(dialog); - dialog.add(new EmptyPanel("panel")); - - //create new link. - AjaxLink<Void> newLink = new AjaxLink<Void>("newLink") { - private static final long serialVersionUID = 1L; - - @Override - public void onClick(AjaxRequestTarget target) { - dialog.replace(new AdminEditProject("panel", new Model<Project>(new Project())) { - private static final long serialVersionUID = -9078483322668302904L; - - @Override - public void onUpdate(AjaxRequestTarget target) { - dialog.close(target); - ajaxRefresh(target); - } - @Override - public boolean isEditable() { - return SciProSession.get().authorizedForRole(Roles.SYSADMIN); - } - }); - - dialog.setTitle("Create new project"); - target.addComponent(dialog); - dialog.open(target); - } - }; - add(newLink); - newLink.setVisible(SciProSession.get().authorizedForRole(Roles.SYSADMIN)); - } - - private boolean isEditable(){ - return SciProSession.get().authorizedForRole(Roles.SYSADMIN); - } - -} diff --git a/src/main/java/se/su/dsv/scipro/reusable/DatesPanel.java b/src/main/java/se/su/dsv/scipro/reusable/DatesPanel.java index f3e20cc432..f7372c2ce3 100644 --- a/src/main/java/se/su/dsv/scipro/reusable/DatesPanel.java +++ b/src/main/java/se/su/dsv/scipro/reusable/DatesPanel.java @@ -5,74 +5,86 @@ import java.util.Date; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.datetime.markup.html.form.DateTextField; +import org.apache.wicket.extensions.yui.calendar.DateField; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; -import se.su.dsv.scipro.components.CustomDateTimeField; - public abstract class DatesPanel extends Panel { - private static final long serialVersionUID = 1L; - private FilterForm filterForm; - - public DatesPanel(String id) { - super(id); - filterForm = new FilterForm("filterForm"); - add(filterForm); - } - - public Date getFromDate(){ - return filterForm.fromDate; - } - public Date getToDate(){ - return filterForm.toDate; - } - - /** - * Override this class to do something. - */ - public abstract void onUpdateFilter(AjaxRequestTarget target); - - private class FilterForm extends Form<Void> { + private static final long serialVersionUID = 1L; + private FilterForm filterForm; - private static final long serialVersionUID = 1L; - - private transient Date fromDate; - private transient Date toDate; + public DatesPanel(String id) { + super(id); + filterForm = new FilterForm("filterForm"); + add(filterForm); + } - public FilterForm(String id) { - super(id); - - Calendar cal = Calendar.getInstance(); - toDate = cal.getTime(); - cal.add(Calendar.MONTH, -6); - fromDate = cal.getTime(); - - final CustomDateTimeField dateFrom = new CustomDateTimeField("dateFrom",new PropertyModel<Date>(this, "fromDate")); - final CustomDateTimeField dateTo = new CustomDateTimeField("dateTo",new PropertyModel<Date>(this, "toDate")); - - add(dateFrom); - add(dateTo); - - add(new AjaxButton("filterButton") { //button to click for performing overriden method - private static final long serialVersionUID = 1L; - @Override - protected void onSubmit(AjaxRequestTarget target, Form<?> form) { - onUpdateFilter(target); - System.out.println(fromDate); - System.out.println(toDate); - } - }); - - } - - public Date getFromDate(){ - return fromDate; - } - public Date getToDate(){ - return toDate; - } - } + public Date getFromDate(){ + return filterForm.fromDate; + } + public Date getToDate(){ + return filterForm.toDate; + } + + /** + * Override this to do something. + */ + public abstract void onUpdateFilter(AjaxRequestTarget target, Date fromDate, Date toDate); + + private class FilterForm extends Form<Void> { + + private static final long serialVersionUID = 1L; + + private transient Date fromDate; + private transient Date toDate; + + private DateField dateFrom; + private DateField dateTo; + + public FilterForm(String id) { + super(id); + + Calendar cal = Calendar.getInstance(); + toDate = cal.getTime(); + cal.add(Calendar.MONTH, -6); + fromDate = cal.getTime(); + + dateFrom = new DateField("dateFrom", new Model<Date>(fromDate)){ + @Override + protected DateTextField newDateTextField(String id, PropertyModel dateFieldModel) { + return DateTextField.forDatePattern(id, dateFieldModel, "yyyy-MM-dd"); + } + }; + + dateTo = new DateField("dateTo", new Model<Date>(toDate)){ + @Override + protected DateTextField newDateTextField(String id, PropertyModel dateFieldModel) { + return DateTextField.forDatePattern(id, dateFieldModel, "yyyy-MM-dd"); + } + }; + + add(dateFrom); + add(dateTo); + + add(new AjaxButton("filterButton") { //button to click for performing overridden method + private static final long serialVersionUID = 1L; + @Override + protected void onSubmit(AjaxRequestTarget target, Form<?> form) { + onUpdateFilter(target, dateFrom.getModelObject(), dateTo.getModelObject()); + } + }); + + } + + public Date getFromDate(){ + return dateFrom.getModelObject(); + } + public Date getToDate(){ + return dateTo.getModelObject(); + } + } } \ No newline at end of file