From 1e9efa0359e0f4da220bc0c82a89333267140742 Mon Sep 17 00:00:00 2001 From: anto-gom <anto-gom@dsv.su.se> Date: Fri, 2 Mar 2012 09:15:23 +0100 Subject: [PATCH] Created a panel for manually suggesting a reviewer for a project idea. --- .../admin/panels/ManualSetReviewerPanel.html | 19 ++ .../admin/panels/ManualSetReviewerPanel.java | 185 ++++++++++++++++++ .../panels/match/ProjectIdeaActionPanel.html | 3 + 3 files changed, 207 insertions(+) create mode 100644 src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.html create mode 100644 src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.java diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.html b/src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.html new file mode 100644 index 0000000000..bd79b72bab --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<body> + <wicket:panel> + <div wicket:id="main"></div> + <wicket:fragment wicket:id="buttonFragment"> + <button wicket:id="manualMatchButton">Match manually</button> + </wicket:fragment> + <wicket:fragment wicket:id="matchFragment"> + <form wicket:id="matchForm"> + Supervisor: <div wicket:id="supervisorTextField"></div> + <button type="submit" style="float: right;">Save</button> + <button wicket:id="cancelButton" style="float: right;">Cancel</button> + </form> + </wicket:fragment> + </wicket:panel> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.java b/src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.java new file mode 100644 index 0000000000..50058b143c --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/admin/panels/ManualSetReviewerPanel.java @@ -0,0 +1,185 @@ +package se.su.dsv.scipro.admin.panels; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxFallbackLink; +import org.apache.wicket.markup.html.form.ChoiceRenderer; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.panel.Fragment; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; +import org.apache.wicket.spring.injection.annot.SpringBean; +import org.apache.wicket.util.string.Strings; +import org.odlabs.wiquery.ui.autocomplete.AutocompleteComponent; +import se.su.dsv.scipro.data.dataobjects.Employee; +import se.su.dsv.scipro.data.dataobjects.User; +import se.su.dsv.scipro.match.dao.interfaces.ProjectIdeaDao; +import se.su.dsv.scipro.match.dao.interfaces.SupervisorDao; +import se.su.dsv.scipro.match.dataobject.ProjectIdea; + +import java.util.List; + +public class ManualSetReviewerPanel extends Panel { + + private static final long serialVersionUID = 1L; + +// @SpringBean +// private MatchDao matchDao; + + @SpringBean + private ProjectIdeaDao projectIdeaDao; + + @SpringBean + SupervisorDao supervisorDao; + +// @SpringBean +// UserDao userDao; + + private Fragment currentFragment; + private Fragment alternateFragment; + private Form<Employee> reviewerForm; + private AutocompleteComponent<Employee> autocompleteReviewerField; + private Long reviewerId; + public ManualSetReviewerPanel(String id, IModel<ProjectIdea> projectIdeaModel) { + super(id); + reviewerId = projectIdeaModel.getObject().getSuggestedReviewer() != null ? projectIdeaModel.getObject().getSuggestedReviewer().getId() : 0L; + setOutputMarkupPlaceholderTag(true); + currentFragment = createButtonFragment(); + alternateFragment = createReviewerFragment(projectIdeaModel); + add(currentFragment); + } + + private Fragment createButtonFragment() { + Fragment buttonFragment = new Fragment("main", "buttonFragment", this) { + private static final long serialVersionUID = 1L; + + @Override + protected void onBeforeRender() { + reviewerForm.setEnabled(false); + super.onBeforeRender(); + } + }; + buttonFragment.add(new AjaxFallbackLink<Object>("manualSetReviewerButton") { + + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + swapFragment(); + if (target != null) { + target.addComponent(currentFragment); + } + } + }); + buttonFragment.setOutputMarkupPlaceholderTag(true); + return buttonFragment; + } + + private Fragment createReviewerFragment(final IModel<ProjectIdea> projectIdeaModel) { + Fragment reviewerFragment = new Fragment("main", "reviewerFragment", this) { + + private static final long serialVersionUID = 1L; + + @Override + protected void onBeforeRender() { + reviewerForm.setEnabled(true); + super.onBeforeRender(); + } + }; + autocompleteReviewerField = createAutocompleteComponent(); + autocompleteReviewerField.setModelObject(null); + reviewerForm = new Form<Employee>("reviewerForm") { + private static final long serialVersionUID = 1L; + + @Override + public void onSubmit() { + ProjectIdea projectIdea = projectIdeaModel.getObject(); + projectIdea.setSuggestedReviewer(autocompleteReviewerField.getModelObject()); + projectIdeaDao.save(projectIdea); + } + }; + + reviewerForm.add(autocompleteReviewerField); + reviewerForm.add(new AjaxFallbackLink<Object>("cancelButton") { + + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + swapFragment(); + if (target != null) { + target.addComponent(currentFragment); + } + } + }); + reviewerFragment.add(reviewerForm); + reviewerFragment.setOutputMarkupPlaceholderTag(true); + return reviewerFragment; + } + + private AutocompleteComponent<Employee> createAutocompleteComponent() { + LoadableDetachableModel<List<Employee>> reviewerListModel = new LoadableDetachableModel<List<Employee>>() { + + private static final long serialVersionUID = 1L; + + @Override + protected List<Employee> load() { + return supervisorDao.findAll(); + } + }; + + LoadableDetachableModel<Employee> reviewerModel = new LoadableDetachableModel<Employee>() { + + private static final long serialVersionUID = 1L; + + @Override + protected Employee load() { + if(reviewerId != 0L) + return supervisorDao.load(reviewerId); + else + return null; + } + }; + + ChoiceRenderer<Employee> choiceRenderer = new ChoiceRenderer<Employee>() { + + private static final long serialVersionUID = 1L; + + @Override + public String getDisplayValue(Employee reviewer) { + return reviewer.getUser().getFullName(); + } + + @Override + public String getIdValue(Employee reviewer, int index) { + return reviewer.getId().toString(); + } + }; + + return new AutocompleteComponent<Employee>("reviewerTextField", + reviewerModel, reviewerListModel, choiceRenderer) { + + private static final long serialVersionUID = 1L; + + @Override + public Employee getValueOnSearchFail(String input) { + if (Strings.isEmpty(input)) { + return null; + } else { + User tempUser = new User(); + tempUser.setFirstName(input); + Employee reviewer = new Employee(); + reviewer.setUser(tempUser); + return reviewer; + } + } + }; + } + + private void swapFragment() { + Fragment tempFragment = currentFragment; + currentFragment.replaceWith(alternateFragment); + currentFragment = alternateFragment; + alternateFragment = tempFragment; + } +} \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/admin/panels/match/ProjectIdeaActionPanel.html b/src/main/java/se/su/dsv/scipro/admin/panels/match/ProjectIdeaActionPanel.html index 1faa36a38b..524bbc1e9c 100644 --- a/src/main/java/se/su/dsv/scipro/admin/panels/match/ProjectIdeaActionPanel.html +++ b/src/main/java/se/su/dsv/scipro/admin/panels/match/ProjectIdeaActionPanel.html @@ -9,6 +9,9 @@ <div class="prepend-top">If you want to match and suggest this idea to a supervisor or reviewer manually, you can do so.</div> <div wicket:id="manualMatchPanel"></div> + <div class="prepend-top">If you want to manually suggest a + reviewer for this idea, you may do so as well.</div> + <div wicket:id="manualSetReviewerPanel"></div> <div class="prepend-top">If this project idea is poorly written, it should be refused, which means it will be sent back to the authors for rewriting.</div>