WIP: Allow supervisors to request improvements from final seminar opponents #78

Draft
ansv7779 wants to merge 23 commits from opponent-completion into develop
2 changed files with 80 additions and 1 deletions
Showing only changes of commit 9d88c373f2 - Show all commits

View File

@ -34,6 +34,20 @@
<button wicket:id="submit" type="submit" class="btn btn-sm btn-success">
<wicket:message key="submit"/>
</button>
<a class="btn btn-outline-secondary btn-sm" wicket:id="request_improvements">
Request improvements
</a>
</form>
<form wicket:id="request_improvements">
<div class="mb-3">
<label class="form-label" wicket:for="feedback_to_opponent">
Provide feedback to the opponent on how to improve the opposition
</label>
<textarea class="form-control" wicket:id="feedback_to_opponent" rows="8"></textarea>
</div>
<button class="btn btn-sm btn-success">Request improvements</button>
<a class="btn btn-outline-secondary btn-sm" wicket:id="cancel">Cancel</a>
</form>
<div wicket:id="gradeContainer">

View File

@ -6,6 +6,7 @@ import java.util.Date;
import java.util.List;
import java.util.Objects;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.feedback.FencedFeedbackPanel;
import org.apache.wicket.markup.html.WebMarkupContainer;
@ -22,6 +23,7 @@ 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.LambdaModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.validation.validator.RangeValidator;
import org.apache.wicket.validation.validator.StringValidator;
@ -75,6 +77,9 @@ public class SeminarOppositionPanel extends Panel {
private final WebMarkupContainer oppositionContainer;
private final ListView<FinalSeminarOpposition> opponents;
private FinalSeminarOppositionForm gradeForm;
private RequestImprovementsForm requestImprovementsForm;
public SeminarOppositionPanel(String id, final IModel<FinalSeminar> seminar) {
super(id, seminar);
this.seminar = seminar;
@ -107,6 +112,12 @@ public class SeminarOppositionPanel extends Panel {
private ListView<FinalSeminarOpposition> getOpponentsList(final IModel<List<FinalSeminarOpposition>> oppositions) {
return new ListView<>(OPPONENTS, oppositions) {
{
// Need to reuse child list items since they contain form components
// and if they're recreated all the state and error messages are lost
setReuseItems(true);
}
@Override
protected void populateItem(final ListItem<FinalSeminarOpposition> item) {
final FinalSeminarOpposition opposition = item.getModelObject();
@ -121,7 +132,14 @@ public class SeminarOppositionPanel extends Panel {
item.add(getRemoveLink(item.getModel()));
item.add(getFinalSeminarOppositionForm(item));
gradeForm = getFinalSeminarOppositionForm(item);
gradeForm.setOutputMarkupPlaceholderTag(true);
item.add(gradeForm);
requestImprovementsForm = new RequestImprovementsForm("request_improvements", item.getModel());
requestImprovementsForm.setVisible(false);
requestImprovementsForm.setOutputMarkupPlaceholderTag(true);
item.add(requestImprovementsForm);
if (gradingModuleIsOnForProjectType()) {
item.add(new SeminarOppositionReportPanel("report", item.getModel()));
@ -277,6 +295,23 @@ public class SeminarOppositionPanel extends Panel {
}
}
);
add(
new AjaxLink<Void>("request_improvements") {
@Override
public void onClick(AjaxRequestTarget target) {
requestImprovementsForm.setVisible(true);
target.add(requestImprovementsForm);
gradeForm.setVisible(false);
target.add(gradeForm);
target.appendJavaScript(
"document.getElementById('" +
requestImprovementsForm.get("feedback_to_opponent").getMarkupId() +
"').focus();"
);
}
}
);
}
@Override
@ -298,4 +333,34 @@ public class SeminarOppositionPanel extends Panel {
private boolean hasSubmittedOppositionReport(FinalSeminarOpposition opposition) {
return oppositionReportService.findOrCreateReport(opposition).isSubmitted();
}
private class RequestImprovementsForm extends Form<FinalSeminarOpposition> {
private final Model<String> feedbackToOpponentModel = new Model<>();
public RequestImprovementsForm(String id, IModel<FinalSeminarOpposition> model) {
super(id, model);
TextArea<String> feedbackToOpponentField = new TextArea<>("feedback_to_opponent", feedbackToOpponentModel);
feedbackToOpponentField.setRequired(true);
add(feedbackToOpponentField);
add(
new AjaxLink<Void>("cancel") {
@Override
public void onClick(AjaxRequestTarget target) {
requestImprovementsForm.setVisible(false);
target.add(requestImprovementsForm);
gradeForm.setVisible(true);
target.add(gradeForm);
}
}
);
}
@Override
protected void onSubmit() {
System.out.println("Request improvements submitted");
System.out.println("Feedback to opponent: " + feedbackToOpponentModel.getObject());
}
}
}