refactored datespanel, removed old project management panel & added new datespanel to project (only added- hasnt been hooked to service yet)

This commit is contained in:
fred-fri 2012-05-30 15:16:25 +09:00
parent 2f4a972803
commit 9b03f34c7a
5 changed files with 87 additions and 447 deletions

@ -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>

@ -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() {

@ -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>

@ -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);
}
}

@ -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();
}
}
}