From 5c2c413ab3e52384bc5bcb417881863c441dcd4a Mon Sep 17 00:00:00 2001 From: Emil Siverhall <emil-siv@dsv.su.se> Date: Wed, 10 Aug 2011 09:38:12 +0200 Subject: [PATCH] Aborting peer review features. Dialog in My requests and reviews added. --- .../peer/data/dataobjects/PeerReview.java | 11 ++ .../scipro/peer/panels/AbortReviewPanel.html | 23 ++++ .../scipro/peer/panels/AbortReviewPanel.java | 65 +++++++++++ .../panels/StudentPeerInfoReviewsPanel.html | 7 ++ .../panels/StudentPeerInfoReviewsPanel.java | 103 ++++++++++++++---- 5 files changed, 189 insertions(+), 20 deletions(-) create mode 100644 src/main/java/se/su/dsv/scipro/peer/panels/AbortReviewPanel.html create mode 100644 src/main/java/se/su/dsv/scipro/peer/panels/AbortReviewPanel.java diff --git a/src/main/java/se/su/dsv/scipro/peer/data/dataobjects/PeerReview.java b/src/main/java/se/su/dsv/scipro/peer/data/dataobjects/PeerReview.java index 920c5358e9..f3f4d1946b 100644 --- a/src/main/java/se/su/dsv/scipro/peer/data/dataobjects/PeerReview.java +++ b/src/main/java/se/su/dsv/scipro/peer/data/dataobjects/PeerReview.java @@ -63,6 +63,9 @@ public class PeerReview extends LazyDeletableDomainObject implements Commentable @Lob private String comment; + @Lob + private String abortReason; + @OneToOne(optional=true, mappedBy="peerReview") private ReviewRating reviewRating; @@ -150,6 +153,14 @@ public class PeerReview extends LazyDeletableDomainObject implements Commentable return aborted; } + public void setAbortReason(String abortReason) { + this.abortReason = abortReason; + } + + public String getAbortReason() { + return abortReason; + } + @Override public String toString(){ return "PeerReview[Id="+id+"]"; diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/AbortReviewPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/AbortReviewPanel.html new file mode 100644 index 0000000000..904485fbbd --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/peer/panels/AbortReviewPanel.html @@ -0,0 +1,23 @@ +<!DOCTYPE html> +<html + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> +<body> + <wicket:panel> + <span>Test</span> + <form wicket:id="abortReasonForm"> + <table> + <tr> + <td>Why do you want to abort this peer review?:</td> + </tr> + <tr> + <td><input wicket:id="abortButton" type="submit" value="Abort review" /> + </td> + <td><input wicket:id="cancelButton" type="submit" + value="Cancel" /> + </td> + </tr> + </table> + </form> + </wicket:panel> +</body> +</html> \ No newline at end of file diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/AbortReviewPanel.java b/src/main/java/se/su/dsv/scipro/peer/panels/AbortReviewPanel.java new file mode 100644 index 0000000000..4a256f4141 --- /dev/null +++ b/src/main/java/se/su/dsv/scipro/peer/panels/AbortReviewPanel.java @@ -0,0 +1,65 @@ +package se.su.dsv.scipro.peer.panels; + +import org.apache.wicket.markup.html.form.Button; +import org.apache.wicket.markup.html.form.Form; + +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.spring.injection.annot.SpringBean; + +import se.su.dsv.scipro.peer.data.dao.interfaces.PeerRequestDao; +import se.su.dsv.scipro.peer.data.dao.interfaces.PeerReviewDao; +import se.su.dsv.scipro.peer.data.dataobjects.PeerRequest; +import se.su.dsv.scipro.peer.data.dataobjects.PeerReview; + +public class AbortReviewPanel extends Panel { + + @SpringBean + PeerReviewDao peerReviewDao; + @SpringBean + PeerRequestDao peerRequestDao; + + private static final long serialVersionUID = 1L; + + public AbortReviewPanel(String id, IModel<PeerReview> model) { + super(id); + + add(new AbortReasonForm("abortReasonForm", model)); + } + + private class AbortReasonForm extends Form<Void>{ + + private static final long serialVersionUID = 1L; + + + public AbortReasonForm(String id, final IModel<PeerReview> model) { + super(id); + final PeerReview pr = model.getObject(); + final PeerRequest request = pr.getPeerRequest(); + System.out.println(model.getObject().getPeerRequest().getProject().getTitle()); + Button abortButton = new Button("abortButton"){ + private static final long serialVersionUID = 1L; + @Override + public void onSubmit(){ + PeerReview review = peerReviewDao.reLoad(pr); + review.setAborted(true); + review.setSubmitted(false); + review = peerReviewDao.save(review); + } + }; + add(abortButton); + + Button cancelButton = new Button("cancelButton"){ + private static final long serialVersionUID = 1L; + @Override + public void onSubmit(){ + + } + }; + add(cancelButton); + + } + } + +} diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.html b/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.html index aaa71585ed..9a44d9e6b7 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.html +++ b/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.html @@ -5,6 +5,10 @@ > <body> <wicket:panel> +<!-- Edit/add dialog --> + <div wicket:id="dialog"> + <div wicket:id="dialogContent"></div> + </div> <div class="append-bottom"> <h6>Completed</h6> <i wicket:id="noAcceptedReviewsCompletedMessage"></i> @@ -27,6 +31,9 @@ <span wicket:id="reviewDate"></span> <span wicket:id="projectTitle"></span> </a> + <a href="#" wicket:id="abortLink"> + <img src="images/icons/delete_16x16.png" class="icon-8"/> Abort review + </a> </li> </ul> </div> diff --git a/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.java b/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.java index 66896866a3..e14ea70a46 100644 --- a/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.java +++ b/src/main/java/se/su/dsv/scipro/peer/panels/StudentPeerInfoReviewsPanel.java @@ -5,16 +5,23 @@ import java.util.List; import org.apache.wicket.Page; import org.apache.wicket.PageParameters; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.datetime.PatternDateConverter; import org.apache.wicket.datetime.markup.html.basic.DateLabel; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; +import org.apache.wicket.markup.html.panel.EmptyPanel; import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; +import org.odlabs.wiquery.ui.dialog.Dialog; +import se.su.dsv.scipro.SciProSession; +import se.su.dsv.scipro.admin.panels.AdminProjectClassPanel; import se.su.dsv.scipro.data.dataobjects.Project; import se.su.dsv.scipro.data.dataobjects.Student; import se.su.dsv.scipro.peer.data.dao.interfaces.PeerRequestDao; @@ -22,6 +29,7 @@ import se.su.dsv.scipro.peer.data.dao.interfaces.PeerReviewDao; import se.su.dsv.scipro.peer.data.dataobjects.PeerRequest; import se.su.dsv.scipro.peer.data.dataobjects.PeerReview; import se.su.dsv.scipro.peer.enums.RequestStatus; +import se.su.dsv.scipro.util.JavascriptEventConfirmation; public abstract class StudentPeerInfoReviewsPanel extends Panel { @@ -30,10 +38,25 @@ public abstract class StudentPeerInfoReviewsPanel extends Panel { @SpringBean private PeerReviewDao peerReviewDao; + @SpringBean + private PeerRequestDao peerRequestDao; + public StudentPeerInfoReviewsPanel(final String id, final Student student, final Project project) { super(id); - + setOutputMarkupId(true); final PatternDateConverter dpc = new PatternDateConverter("yyyy-MM-dd", false); + /* + * Dialog for aborting reviews + */ + + final Dialog dialog = new Dialog("dialog"); + dialog.setModal(true); + dialog.setAutoOpen(false); + dialog.add(new EmptyPanel("dialogContent")); + + dialog.setWidth(500); + dialog.setHeight(360); + add(dialog); /* * Reviews @@ -69,33 +92,73 @@ public abstract class StudentPeerInfoReviewsPanel extends Panel { }); - final List<PeerReview> acceptedInProgress = peerReviewDao.findAcceptedReviewsInProgress(student, project); + final LoadableDetachableModel<List<PeerReview>> acceptedInProgressModel = + new LoadableDetachableModel<List<PeerReview>>(){ + private static final long serialVersionUID = 1L; + + @Override + protected List<PeerReview> load() { + return peerReviewDao.findAcceptedReviewsInProgress(student, project); + } + + }; + //final List<PeerReview> acceptedInProgress = peerReviewDao.findAcceptedReviewsInProgress(student, project); + + + final ListView<PeerReview> acceptedInProgressList = new ListView<PeerReview>("acceptedInProgress", acceptedInProgressModel){ + private static final long serialVersionUID = 1L; + + @Override + protected void populateItem(final ListItem<PeerReview> item) { + final PeerReview pr = item.getModelObject(); + final PeerRequest request = pr.getPeerRequest(); + PageParameters pp = new PageParameters(); + pp.put(PeerReview.PP_PEER_REVIEW_ID, pr.getId()); + BookmarkablePageLink<Void> link = new BookmarkablePageLink<Void>("reviewLink", getPeerReviewPageClass(), pp); + link.add(new DateLabel("reviewDate", new Model<Date>(pr.getDateCreated()), dpc)); + link.add(new Label("projectTitle", request.getProject().getTitle(30))); + final AjaxLink<Void> abortLink = new AjaxLink<Void>("abortLink"){ + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + //PeerReview review = peerReviewDao.reLoad(pr); + dialog.replace(new AbortReviewPanel("dialogContent", item.getModel())); + target.addComponent(dialog); + dialog.open(target); + + /*PeerReview review = peerReviewDao.reLoad(pr); + PeerRequest prq = peerRequestDao.reLoad(request); + review.setAborted(true); + review.setSubmitted(false); + review = peerReviewDao.save(review); + prq.setStatus(RequestStatus.WAITING); + prq = peerRequestDao.save(prq);*/ + + } + + @Override + public boolean isVisible(){ + return pr.getReviewer().getUser().equals(SciProSession.get().getUser()); + //return request.getRequester().getUser().equals(SciProSession.get().getUser()); + } + }; + item.add(link); + item.add(abortLink); + add(item); + } + + }; + add(acceptedInProgressList); add(new Label("noAcceptedInProgressMessage", "No reviews in progress found"){ private static final long serialVersionUID = 1L; @Override public boolean isVisible(){ - return acceptedInProgress.size() == 0; + return acceptedInProgressList.size() == 0; } }); - add(new ListView<PeerReview>("acceptedInProgress", acceptedInProgress){ - private static final long serialVersionUID = 1L; - - @Override - protected void populateItem(ListItem<PeerReview> item) { - PeerReview pr = item.getModelObject(); - PeerRequest request = pr.getPeerRequest(); - PageParameters pp = new PageParameters(); - pp.put(PeerReview.PP_PEER_REVIEW_ID, pr.getId()); - BookmarkablePageLink<Void> link = new BookmarkablePageLink<Void>("reviewLink", getPeerReviewPageClass(), pp); - link.add(new DateLabel("reviewDate", new Model<Date>(pr.getDateCreated()), dpc)); - link.add(new Label("projectTitle", request.getProject().getTitle(30))); - item.add(link); - add(item); - } - - }); }