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