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 <div class="prepend-top">If you want to match and suggest this
idea to a supervisor or reviewer manually, you can do so.</div> idea to a supervisor or reviewer manually, you can do so.</div>
<div wicket:id="manualMatchPanel"></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 <div class="prepend-top">If this project idea is poorly
written, it should be refused, which means it will be sent back to the written, it should be refused, which means it will be sent back to the
authors for rewriting.</div> authors for rewriting.</div>