added keywords and research areas to idea submission

This commit is contained in:
Emil Siverhall 2012-07-18 14:11:55 +02:00
parent 2d6e1416e8
commit 324a3fb46b
2 changed files with 59 additions and 10 deletions
src/main/java/se/su/dsv/scipro/supervisor/panels

@ -17,6 +17,9 @@
<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>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 wicket:id="studentPanel" class="append-bottom"></div>
<div class="right">

@ -1,26 +1,41 @@
package se.su.dsv.scipro.supervisor.panels;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
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.basic.Label;
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.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
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.Model;
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.Employee;
import se.su.dsv.scipro.data.dataobjects.ProjectClass;
import se.su.dsv.scipro.data.dataobjects.ResearchArea;
import se.su.dsv.scipro.data.dataobjects.User;
import se.su.dsv.scipro.match.dao.interfaces.ApplicationPeriodDao;
import se.su.dsv.scipro.keywords.KeywordContainer;
import se.su.dsv.scipro.keywords.SelectKeywordsPanel;
import se.su.dsv.scipro.match.dao.interfaces.KeywordTypeDao.TYPE;
import se.su.dsv.scipro.match.dataobject.Keyword;
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;
import se.su.dsv.scipro.springdata.services.SupervisorService;
import se.su.dsv.scipro.supervisor.pages.SupervisorProjectIdeaStartPage;
/**
* The dialog panel where supervisors may create new project ideas for the students to pick from.
@ -28,7 +43,7 @@ import se.su.dsv.scipro.springdata.services.SupervisorIdeaService;
* @author emil-siv
*
*/
public abstract class SupervisorEditIdeaPanel extends Panel {
public class SupervisorEditIdeaPanel extends Panel {
private static final long serialVersionUID = -8553559034214432156L;
@ -37,17 +52,14 @@ public abstract class SupervisorEditIdeaPanel extends Panel {
@SpringBean
private SupervisorIdeaService ideaService;
@SpringBean
private ApplicationPeriodDao periodDao;
public abstract void onUpdate(AjaxRequestTarget target);
public abstract boolean isEditable();
private SupervisorService supervisorService;
public SupervisorEditIdeaPanel(String id, User creator, IModel<SupervisorIdea> model) {
super(id, model);
add(new IdeaForm("form", model, creator));
}
private class IdeaForm extends Form {
private class IdeaForm extends Form<SupervisorIdea> {
private static final long serialVersionUID = 5784218491663983845L;
@ -57,11 +69,14 @@ public abstract class SupervisorEditIdeaPanel extends Panel {
private TextArea<String> requirementField, descriptionField;
private RadioChoice<ProjectClass> level;
private AddRemoveStudentsPanel studentsPanel;
private KeywordContainer regularKwc;
private FeedbackPanel feedbackPanel;
public IdeaForm(String id, final IModel<SupervisorIdea> model, final User creator) {
super(id, model);
final Employee supervisor = supervisorService.findByUser(creator);
add(wmc = new WebMarkupContainer("wmc"));
wmc.add(feedbackPanel = new FeedbackPanel("feedbackPanel"));
@ -78,7 +93,36 @@ public abstract class SupervisorEditIdeaPanel extends Panel {
descriptionField.setRequired(true);
descriptionField.add(StringValidator.minimumLength(10)); // Description needs to be at least 10 characters
final Set<ResearchArea> areas = supervisor.getResearchAreas();
ListView<ResearchArea> areaList = new ListView<ResearchArea>("researchAreas", new ArrayList<ResearchArea>(areas)) {
private static final long serialVersionUID = 1745649109195334927L;
@Override
protected void populateItem(ListItem<ResearchArea> item) {
item.add(new Label("areaName", item.getModelObject().getTitle()));
}
};
wmc.add(areaList);
regularKwc = new KeywordContainer(new HashSet<Keyword>(model.getObject().getKeywords()));
wmc.add(new SelectKeywordsPanel("keywordPanel", new Model<KeywordContainer>(regularKwc), TYPE.REGULAR, "Keywords:") {
private static final long serialVersionUID = -3244572955497357288L;
@Override
public void onUpdateRemove(AjaxRequestTarget target, Keyword removedKeyword) {
Set<Keyword> oldKeywords = new HashSet<Keyword>(regularKwc.getKeywordSet());
oldKeywords.remove(removedKeyword);
model.getObject().setKeywords(oldKeywords);
}
@Override
public void onUpdateAdd(AjaxRequestTarget target, Keyword addedKeyword) {
Set<Keyword> oldKeywords = new HashSet<Keyword>(regularKwc.getKeywordSet());
oldKeywords.add(addedKeyword);
model.getObject().setKeywords(oldKeywords);
}
});
wmc.add(studentsPanel = new AddRemoveStudentsPanel("studentPanel", model.getObject().getAuthors()) {
private static final long serialVersionUID = 8432765543881357453L;
@ -96,9 +140,11 @@ public abstract class SupervisorEditIdeaPanel extends Panel {
target.addComponent(feedbackPanel);
try {
ideaService.saveIdeaFromForm(model, creator, studentsPanel.getStudentSet());
onUpdate(target);
ideaService.saveSupervisorCreatedIdea(model, supervisor, studentsPanel.getStudentSet());
setResponsePage(SupervisorProjectIdeaStartPage.class);
getSession().info("Idea successfully submitted");
} catch (Exception e) {
e.printStackTrace();
System.out.println("Exception time!!!");
}