added form to make supervisors able to submit project ideas according to mockups. still needs a lot of work to be useful according to new match3 logic

This commit is contained in:
Emil Siverhall 2012-07-11 13:04:07 +02:00
parent ebb7a2ab9c
commit 17aaa1bd28
5 changed files with 253 additions and 0 deletions

@ -3,6 +3,12 @@
xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
<body>
<wicket:extend>
<div wicket:id="feedback"></div>
<div wicket:id="dialog">
<div wicket:id="editPanel"></div>
</div>
<a href="#" wicket:id="createIdeaLink">Create new</a>
<div class="prepend-top" wicket:id="dataPanel"></div>
</wicket:extend>
</body>
</html>

@ -1,11 +1,108 @@
package se.su.dsv.scipro.supervisor.pages;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
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.panel.EmptyPanel;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
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.datatables.project.GenericDataPanel;
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.SupervisorEditIdeaPanel;
public class SupervisorProjectIdeaStartPage extends AbstractSupervisorProjectIdeaPage {
@SpringBean
private SupervisorIdeaService ideaService;
private GenericDataPanel<SupervisorIdea> genericDataPanel;
private FeedbackPanel feedbackPanel;
private Dialog dialog;
public SupervisorProjectIdeaStartPage(PageParameters pp) {
super(pp);
add(feedbackPanel = new FeedbackPanel("feedback"));
feedbackPanel.setOutputMarkupId(true);
addFormDialog();
addDataTable();
}
private void addFormDialog() {
dialog = new Dialog("dialog");
dialog.setModal(true);
dialog.setAutoOpen(false);
dialog.setWidth(500);
dialog.setHeight(675);
dialog.add(new EmptyPanel("editPanel"));
add(dialog);
AjaxLink<Void> newLink = new AjaxLink<Void>("createIdeaLink"){
private static final long serialVersionUID = 8361361680142892340L;
@Override
public void onClick(AjaxRequestTarget target) {
dialog.replace(new SupervisorEditIdeaPanel("editPanel", getUser(), new Model<SupervisorIdea>(new SupervisorIdea())) {
private static final long serialVersionUID = -7322701624342450588L;
@Override
public void onUpdate(AjaxRequestTarget target) {
dialog.close(target);
info("Project idea successfully created");
target.addComponent(feedbackPanel);
target.addComponent(genericDataPanel.getWMC());
}
@Override
public boolean isEditable() {
return true;
}
});
dialog.setTitle("Create new supervisor project idea");
target.addComponent(dialog);
dialog.open(target);
}
};
add(newLink);
}
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 "title";
}
@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 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("Taken"), "taken");
return columns;
}
});
}
}

@ -0,0 +1,6 @@
descriptionField.Required=You need to describe the project idea
descriptionField.StringValidator.minimum=The description needs to be at least ${minimum} characters
requirementField.Required=You need to write some prerequisites
level.Required=The project idea needs a suitable project level
titleField.Required=The project idea needs a title
titleField.StringValidator.minimum=The title needs to be at least ${minimum} characters

@ -0,0 +1,29 @@
<!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="wmc">
<div wicket:id="feedbackPanel"></div>
<div><b>Level:</b></div>
<div class="append-bottom"><span wicket:id="level"></span></div>
<div><b>Required prerequisites:</b></div>
<div class="append-bottom"><textarea rows="3" wicket:id="requirementField"></textarea></div>
<div><b>Title:</b></div>
<div class="append-bottom"><input wicket:id="titleField"/></div>
<div><b>Description:</b></div>
<div class="append-bottom"><textarea wicket:id="descriptionField"></textarea></div>
<div><b>Manually assign to students:</b></div>
<div wicket:id="studentPanel" class="append-bottom"></div>
<div class="right">
<button wicket:id="saveButton">Save</button>
</div>
</div>
</form>
</wicket:panel>
</body>
</html>

@ -0,0 +1,115 @@
package se.su.dsv.scipro.supervisor.panels;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.form.AjaxButton;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
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.PropertyModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.apache.wicket.validation.validator.StringValidator;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.match.dao.interfaces.ApplicationPeriodDao;
import se.su.dsv.scipro.match.dataobject.SupervisorIdea;
import se.su.dsv.scipro.reusable.AddRemoveStudentsPanel;
import se.su.dsv.scipro.springdata.services.ProjectClassService;
import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
/**
* The dialog panel where supervisors may create new project ideas for the students to pick from.
*
* @author emil-siv
*
*/
public abstract class SupervisorEditIdeaPanel extends Panel {
private static final long serialVersionUID = -8553559034214432156L;
@SpringBean
private ProjectClassService levelService;
@SpringBean
private SupervisorIdeaService ideaService;
@SpringBean
private ApplicationPeriodDao periodDao;
public abstract void onUpdate(AjaxRequestTarget target);
public abstract boolean isEditable();
public SupervisorEditIdeaPanel(String id, User creator, IModel<SupervisorIdea> model) {
super(id, model);
add(new IdeaForm("form", model, creator));
}
private class IdeaForm extends Form {
private static final long serialVersionUID = 5784218491663983845L;
private WebMarkupContainer wmc;
private TextField<String> titleField;
private TextArea<String> requirementField, descriptionField;
private RadioChoice<ProjectClass> level;
private AddRemoveStudentsPanel studentsPanel;
private FeedbackPanel feedbackPanel;
public IdeaForm(String id, final IModel<SupervisorIdea> model, final User creator) {
super(id, model);
add(wmc = new WebMarkupContainer("wmc"));
wmc.add(feedbackPanel = new FeedbackPanel("feedbackPanel"));
feedbackPanel.setOutputMarkupId(true);
wmc.add(level = new RadioChoice<ProjectClass>("level", new PropertyModel<ProjectClass>(model.getObject(), "projectClass"), levelService.findAllActive()));
level.setRequired(true);
wmc.add(requirementField = new TextArea<String>("requirementField", new PropertyModel<String>(model, "requirements")));
requirementField.setRequired(true);
wmc.add(titleField = new TextField<String>("titleField", new PropertyModel<String>(model, "title")));
titleField.setRequired(true);
titleField.add(StringValidator.minimumLength(5)); // Title needs to be at least 5 characters
wmc.add(descriptionField = new TextArea<String>("descriptionField", new PropertyModel<String>(model, "description")));
descriptionField.setRequired(true);
descriptionField.add(StringValidator.minimumLength(10)); // Description needs to be at least 10 characters
wmc.add(studentsPanel = new AddRemoveStudentsPanel("studentPanel", model.getObject().getAuthors()) {
private static final long serialVersionUID = 8432765543881357453L;
@Override
public void onUpdate(AjaxRequestTarget target) {
//do nothing
}
});
wmc.add(new AjaxButton("saveButton") {
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
target.addComponent(feedbackPanel);
try {
ideaService.saveIdeaFromForm(model, creator, studentsPanel.getStudentSet());
onUpdate(target);
} catch (Exception e) {
System.out.println("Exception time!!!");
}
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
target.addComponent(feedbackPanel);
}
});
}
}
}