some refactoring to first page of supervisor - project ideas

This commit is contained in:
Emil Siverhall 2012-07-19 15:16:18 +02:00
parent 8088450860
commit 5339de38d2
8 changed files with 240 additions and 82 deletions

@ -0,0 +1,22 @@
<!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="container">
<label for="checkGroup">Filter on level</label>
<div wicket:id="checkGroup">
<div wicket:id="levelView">
<input type="checkbox" wicket:id="levelCheckBox"></input>
<span wicket:id="levelName"></span>
</div>
</div>
</div>
</wicket:panel>
</body>
</html>

@ -0,0 +1,76 @@
package se.su.dsv.scipro.match.panel;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Check;
import org.apache.wicket.markup.html.form.CheckGroup;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.springdata.services.ProjectClassService;
public abstract class FilterFormProjectClass extends Panel {
private static final long serialVersionUID = 8862892008428526067L;
@SpringBean
private ProjectClassService projectClassService;
private List<ProjectClass> projectClassList;
private final CheckGroup<ProjectClass> checkGroup;
public FilterFormProjectClass(String id) {
super(id);
projectClassList = projectClassService.findAllActive();
CompoundPropertyModel<List<ProjectClass>> levelModel = new CompoundPropertyModel<List<ProjectClass>>(projectClassList);
checkGroup = new CheckGroup<ProjectClass>("checkGroup",new ArrayList<ProjectClass>(projectClassList));
final WebMarkupContainer container = new WebMarkupContainer("container");
container.setOutputMarkupId(true);
ListView<ProjectClass> levelView = new ListView<ProjectClass>("levelView", levelModel) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<ProjectClass> item) {
Check<ProjectClass> levelBox = new Check<ProjectClass>("levelCheckBox", item.getModel());
item.add(levelBox);
Label levelName = new Label("levelName", item.getModelObject().toString());
item.add(levelName);
}
};
checkGroup.add(levelView);
checkGroup.setOutputMarkupId(true);
checkGroup.add(new AjaxFormChoiceComponentUpdatingBehavior(){
private static final long serialVersionUID = 3198579482664645333L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
ajaxUpdate(target);
}
});
container.add(checkGroup);
add(container);
}
public List<ProjectClass> getProjectClasses(){
return (List<ProjectClass>) checkGroup.getModelObject();
}
public abstract void ajaxUpdate(AjaxRequestTarget target);
}

@ -53,9 +53,12 @@ public class SupervisorIdeaServiceImpl extends AbstractQueryService<SupervisorId
SupervisorIdea idea = model.getObject();
idea.setIdeaStatus(IdeaStatus.WAITING);
if(!students.isEmpty())
if(!students.isEmpty()) {
idea.setAuthors(students);
idea.setIdeaStatus(IdeaStatus.TAKEN); //Should not be visible for selection if supervisor manually added students
} else {
idea.setIdeaStatus(IdeaStatus.WAITING);
}
idea.setCreator(creator);
idea = em.merge(idea);

@ -3,9 +3,10 @@
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:extend>
<div class="info-box rounded-box last">This is a nice info box full of important information. Don't forget to read it. And then read it again.</div>
<div wicket:id="feedback"></div>
<button wicket:id="ideaLink">Create new</button>
<div class="prepend-top" wicket:id="dataPanel"></div>
<div class="prepend-top" wicket:id="ideaPanel"></div>
</wicket:extend>
</body>
</html>

@ -2,99 +2,27 @@ package se.su.dsv.scipro.supervisor.pages;
import org.apache.wicket.PageParameters;
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.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.datatables.ClickableIconColumn;
import se.su.dsv.scipro.datatables.project.GenericDataPanel;
import se.su.dsv.scipro.icons.ImageIcon;
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.springdata.services.GenericService;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
import se.su.dsv.scipro.supervisor.panels.SupervisorProjectIdeaOverviewPanel;
public class SupervisorProjectIdeaStartPage extends AbstractSupervisorProjectIdeaPage {
@SpringBean
private SupervisorIdeaService ideaService;
private GenericDataPanel<SupervisorIdea> genericDataPanel;
private FeedbackPanel feedbackPanel;
public SupervisorProjectIdeaStartPage(PageParameters pp) {
super(pp);
add(feedbackPanel = new FeedbackPanel("feedback"));
feedbackPanel.setOutputMarkupId(true);
add(new SupervisorProjectIdeaOverviewPanel("ideaPanel", getUser()));
addSubmissionPageLink();
addDataTable();
}
private void addSubmissionPageLink() {
BookmarkablePageLink<Void> ideaLink = new BookmarkablePageLink<Void>("ideaLink", SupervisorIdeaSubmissionPage.class);
add(ideaLink);
}
private void addDataTable() {
add(genericDataPanel = new GenericDataPanel<SupervisorIdea>("dataPanel") {
private static final long serialVersionUID = -4539188306454725307L;
@Override
public GenericService<SupervisorIdea, Long> getService() {
return ideaService;
}
@Override
public String getSortString() {
return "dateCreated";
}
@Override
public IColumn[] getColumns() {
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 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) {
private static final long serialVersionUID = 1498638150378921520L;
@Override
protected void onClick(IModel<SupervisorIdea> clicked,
AjaxRequestTarget target) {
PageParameters pp = new PageParameters();
pp.put("idea", clicked.getObject().getId());
setResponsePage(SupervisorIdeaSubmissionPage.class, pp);
}
@Override
public boolean shouldBeVisible(IModel<SupervisorIdea> ideaModel) {
return ideaService.isIdeaEditable(ideaModel, getUser());
}
};
columns[6] = new ClickableIconColumn<SupervisorIdea>(Model.of("Delete"), null, ImageIcon.ICON_DELETE) {
private static final long serialVersionUID = 1718924441848355574L;
@Override
protected void onClick(IModel<SupervisorIdea> ideaModel,
AjaxRequestTarget target) {
ideaService.deleteWaitingIdea(ideaModel);
target.addComponent(getWMC());
}
@Override
public boolean shouldBeVisible(IModel<SupervisorIdea> ideaModel) {
return ideaService.isIdeaEditable(ideaModel, getUser());
}
};
return columns;
}
});
}
}

@ -19,10 +19,11 @@
<div class="append-bottom"><textarea wicket:id="descriptionField"></textarea></div>
<div><b>Research area:</b> (set automatically using the research area value from your profile)</div>
<div class="append-bottom"><span wicket:id="researchAreas"><span wicket:id="areaName"></span><br /></span></div>
<div class="append-bottom" wicket:id="keywordPanel"></div>
<div><b>Manually assign to students:</b></div>
<div class="append-bottom span-22" wicket:id="keywordPanel"></div>
<div class="append-bototm span-22"><b>Manually assign to students:</b>
<div wicket:id="studentPanel" class="append-bottom"></div>
<div class="right">
</div>
<div class="span-4">
<button wicket:id="saveButton">Save</button>
</div>
</div>

@ -0,0 +1,14 @@
<!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>
<form wicket:id="form">
<div wicket:id="levelFilter"></div>
</form>
<div class="prepend-top" wicket:id="dataPanel"></div>
</wicket:panel>
</body>
</html>

@ -0,0 +1,113 @@
package se.su.dsv.scipro.supervisor.panels;
import org.apache.wicket.PageParameters;
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.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.spring.injection.annot.SpringBean;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.datatables.ClickableIconColumn;
import se.su.dsv.scipro.datatables.project.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.springdata.services.GenericService;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
import se.su.dsv.scipro.supervisor.pages.SupervisorIdeaSubmissionPage;
public class SupervisorProjectIdeaOverviewPanel extends Panel {
@SpringBean
private SupervisorIdeaService ideaService;
private GenericDataPanel<SupervisorIdea> genericDataPanel;
private static final long serialVersionUID = -9010467449322120267L;
public SupervisorProjectIdeaOverviewPanel(String id, final User supervisor) {
super(id);
addDataTable(supervisor);
add(new FilterForm("form"));
}
private void addDataTable(final User supervisor) {
add(genericDataPanel = new GenericDataPanel<SupervisorIdea>("dataPanel") {
private static final long serialVersionUID = -4539188306454725307L;
@Override
public GenericService<SupervisorIdea, Long> getService() {
return ideaService;
}
@Override
public String getSortString() {
return "dateCreated";
}
@Override
public IColumn[] getColumns() {
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 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) {
private static final long serialVersionUID = 1498638150378921520L;
@Override
protected void onClick(IModel<SupervisorIdea> clicked,
AjaxRequestTarget target) {
PageParameters pp = new PageParameters();
pp.put("idea", clicked.getObject().getId());
setResponsePage(SupervisorIdeaSubmissionPage.class, pp);
}
@Override
public boolean shouldBeVisible(IModel<SupervisorIdea> ideaModel) {
return ideaService.isIdeaEditable(ideaModel, supervisor);
}
};
columns[6] = new ClickableIconColumn<SupervisorIdea>(Model.of("Delete"), null, ImageIcon.ICON_DELETE) {
private static final long serialVersionUID = 1718924441848355574L;
@Override
protected void onClick(IModel<SupervisorIdea> ideaModel,
AjaxRequestTarget target) {
ideaService.deleteWaitingIdea(ideaModel);
target.addComponent(getWMC());
}
@Override
public boolean shouldBeVisible(IModel<SupervisorIdea> ideaModel) {
return ideaService.isIdeaEditable(ideaModel, supervisor);
}
};
return columns;
}
});
}
private class FilterForm extends Form<Void> {
private static final long serialVersionUID = 6581597176580961782L;
public FilterForm(String id) {
super(id);
final FilterFormProjectClass levelFilter = new FilterFormProjectClass("levelFilter") {
private static final long serialVersionUID = -7758850229259608443L;
@Override
public void ajaxUpdate(AjaxRequestTarget target) {
System.out.println(getProjectClasses());
}
};
add(levelFilter);
}
}
}