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">&nbsp;</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