Created a panel for manually suggesting a reviewer for a project idea.

This commit is contained in:
anto-gom 2012-03-02 09:15:23 +01:00
parent e1b136ea42
commit 1e9efa0359
3 changed files with 207 additions and 0 deletions

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

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

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