From 0da928464740e2fc8a4027137eed38b176f52463 Mon Sep 17 00:00:00 2001
From: mpeters <mpeters@dsv.su.se>
Date: Fri, 29 Jul 2011 13:25:15 +0200
Subject: [PATCH] Fix of several serious bugs in final seminar file handling
 and addition of possibility of deletion of all documents related to a final
 seminar by an admin

Change-Id: If75bee176893c36e14c12deee3d17098a83fa260
---
 .../FinalSeminarUploadController.java         |  12 +-
 .../FinalSeminarUploadControllerImpl.java     |  33 +++--
 .../panels/FinalSeminarDetailsPanel.html      | 131 +++++++++---------
 .../panels/FinalSeminarDetailsPanel.java      | 103 +++++++++++---
 .../panels/OpponentListViewPanel.html         |   1 +
 .../panels/OpponentListViewPanel.java         |  63 +++++----
 6 files changed, 214 insertions(+), 129 deletions(-)

diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java b/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java
index 0c03a098ff..0d2252d6d8 100644
--- a/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java
+++ b/src/main/java/se/su/dsv/scipro/data/controllers/FinalSeminarUploadController.java
@@ -6,11 +6,10 @@ import org.apache.wicket.markup.html.form.upload.FileUpload;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition;
 import se.su.dsv.scipro.data.dataobjects.User;
+import se.su.dsv.scipro.repository.util.FileStorageException;
 
 public interface FinalSeminarUploadController extends IClusterable {
 
-	void deleteSeminarFilesRecursive(FinalSeminar seminar);
-
 	void deleteOpponentFiles(FinalSeminarOpposition opp);
 	
 	/**
@@ -20,6 +19,15 @@ public interface FinalSeminarUploadController extends IClusterable {
 	 * @throws Exception
 	 */
 	FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception;
+	
+	/**
+	 * Delete the upload report for the seminar, adminOverrideMode = true means no intentional exceptions will be thrown
+	 * @param seminar
+	 * @param adminOverrideMode
+	 * @return
+	 * @throws Exception
+	 */
+	FinalSeminar deleteSeminarReport(FinalSeminar seminar, boolean adminOverrideMode) throws Exception;
 
 	void storeSeminarDocument(FileUpload upload, User uploader, FinalSeminar seminar) throws Exception;
 
diff --git a/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java b/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java
index c010bb8378..866dbc8ce7 100644
--- a/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java
+++ b/src/main/java/se/su/dsv/scipro/data/controllers/impl/FinalSeminarUploadControllerImpl.java
@@ -78,17 +78,9 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
 	}
 
 	private void delete(String path) {
-
 		fileRepository.delete(path);
 	}
 
-	public void deleteSeminarFilesRecursive(final FinalSeminar seminar) throws FileStorageException {
-		if (seminar.getDocument() != null) {
-			//delete(getRepositorySeminarPath(seminar)); Use of deprecated path/method
-			delete(seminar.getDocument().getPath());
-		}
-	}
-
 	public void deleteOpponentFiles(final FinalSeminarOpposition opp) throws FileStorageException {
 		if (opp.getOpponentReport() != null) {
 			//delete(getRepositoryOppositionPath(opp)); Use of deprecated path/method
@@ -103,18 +95,31 @@ public class FinalSeminarUploadControllerImpl implements FinalSeminarUploadContr
 	 * @return
 	 * @throws Exception
 	 */
-	public FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception {
+	public FinalSeminar deleteSeminarReport(FinalSeminar seminar) throws Exception{
+		return deleteSeminarReport(seminar, false);
+	}
+	/**
+	 * Delete the upload report for the seminar, adminOverrideMode = true means no intentional exceptions will be thrown
+	 * @param seminar
+	 * @param adminOverrideMode
+	 * @return
+	 * @throws Exception
+	 */
+	public FinalSeminar deleteSeminarReport(FinalSeminar seminar, boolean adminOverrideMode) throws Exception {
 		seminar = finalSeminarDao.reLoad(seminar);
-		if (!seminar.getOppositions().isEmpty() || !seminar.getActiveParticipations().isEmpty()) {
-			throw new Exception(
-					"Cannot delete seminar report, seminar has opponents or active participants");
+		if( !adminOverrideMode ){
+			if (!seminar.getOppositions().isEmpty() || !seminar.getActiveParticipations().isEmpty()) {
+				throw new Exception(
+				"Cannot delete seminar report, seminar has opponents or active participants");
+			}
 		}
 		for (CheckPlagiarismEvent cpe : checkPlagiarismEventDao.getWithFileDescription(seminar
 				.getDocument())) {
 			checkPlagiarismEventDao.delete(cpe);
 		}
-
-		fileRepository.delete(seminar.getDocument().getPath());
+		if(seminar.getDocument() != null)
+			if(seminar.getDocument().getPath() != null)
+				fileRepository.delete(seminar.getDocument().getPath());
 		seminar.setDocument(null);
 		return finalSeminarDao.save(seminar);
 	}
diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html
index 4dd16f9bd7..9df136e249 100644
--- a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html
+++ b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.html
@@ -2,78 +2,73 @@
 <html
 	xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd">
 <body>
-	<wicket:panel>
-		<div wicket:id="titleContainer">
-			<strong>Project Title: </strong> <span wicket:id="projectTitle"></span>
-			<div>
-				<strong>Room: </strong> <span wicket:id="room"></span>
-			</div>
-		</div>
-		<div class="append-bottom">
-			<div>
-				<strong>Head supervisor:</strong>
-			</div>
-			<span wicket:id="headSupervisor"></span>
-		</div>
-		<div>
-			<strong>Author(s): </strong>
-			<ul class="no-list-style">
-				<li wicket:id="authorsList"><span wicket:id="author"></span></li>
-			</ul>
-		</div>
+<wicket:panel>
+	<div wicket:id="feedback"></div>
+	<div wicket:id="titleContainer"><strong>Project Title: </strong>
+	<span wicket:id="projectTitle"></span>
+	<div><strong>Room: </strong> <span wicket:id="room"></span></div>
+	</div>
+	<div class="append-bottom">
+	<div><strong>Head supervisor:</strong></div>
+	<span wicket:id="headSupervisor"></span></div>
+	<div><strong>Author(s): </strong>
+	<ul class="no-list-style">
+		<li wicket:id="authorsList"><span wicket:id="author"></span></li>
+	</ul>
+	</div>
 
-		<div>
-			<strong>Co-supervisor(s): </strong>
-			<ul class="no-list-style">
-				<li wicket:id="coSupervisorsList"><span
-					wicket:id="coSupervisor"></span></li>
-			</ul>
-		</div>
+	<div><strong>Co-supervisor(s): </strong>
+	<ul class="no-list-style">
+		<li wicket:id="coSupervisorsList"><span wicket:id="coSupervisor"></span></li>
+	</ul>
+	</div>
 
-		<div>
-			<strong>Reviewer(s): </strong>
-			<ul class="no-list-style">
-				<li wicket:id="reviewersList"><span wicket:id="reviewer"></span>
-				</li>
-			</ul>
-		</div>
+	<div><strong>Reviewer(s): </strong>
+	<ul class="no-list-style">
+		<li wicket:id="reviewersList"><span wicket:id="reviewer"></span>
+		</li>
+	</ul>
+	</div>
 
 
-		<div wicket:id="detailsContainer">
-			<div>
-				<strong>Opponent(s): </strong>
-				<ul class="no-list-style">
-					<li wicket:id="opponentsList"><span wicket:id="opponent"></span>
-					</li>
-				</ul>
-			</div>
-
-			<div>
-				<strong>Active participant(s): </strong>
-				<ul class="no-list-style">
-					<li wicket:id="activeParticipantsList"><span
-						wicket:id="activeParticipant"></span></li>
-				</ul>
-			</div>
-			<div>
-				<strong>Presentation Language: </strong>
-				<div wicket:id="seminarLanguage"></div>
-			</div>
-			<div>
-				<strong>Thesis/Report Language: </strong>
-				<div wicket:id="thesisLanguage"></div>
-			</div>
-
-			<strong>Thesis/Report: </strong>
-			<div>
-				<span wicket:id="seminarReportTitle"></span> <span
-					wicket:id="uploadInfoContainer"> <a href="#"
-					wicket:id="open"><img
-						src="images/icons/document-preview_16x16.png" alt="Open/Preview" />
-				</a> <a href="#" wicket:id="download"><img
-						src="images/icons/download_16x16.png" alt="Download" /> </a> </span>
-			</div>
+	<div wicket:id="detailsContainer">
+	<div><strong>Opponent(s): </strong>
+	<ul class="no-list-style">
+		<li wicket:id="opponentsList"><span wicket:id="opponent"></span>
+		<div wicket:id="oppositionContainer"><strong>Report:</strong> <span wicket:id="oppositionReportTitle"></span> <a href="#"
+			wicket:id="open"><img
+			src="images/icons/document-preview_16x16.png" alt="Open/Preview" />
+		</a> <a href="#" wicket:id="download"><img
+			src="images/icons/download_16x16.png" alt="Download" /> </a> <a href="#"
+			wicket:id="deleteOppositionReport"><img
+			src="images/icons/delete_16x16.png" alt="delete" /> </a>
 		</div>
-	</wicket:panel>
+		</li>
+	</ul>
+	</div>
+
+	<div><strong>Active participant(s): </strong>
+	<ul class="no-list-style">
+		<li wicket:id="activeParticipantsList"><span
+			wicket:id="activeParticipant"></span></li>
+	</ul>
+	</div>
+	<div><strong>Presentation Language: </strong>
+	<div wicket:id="seminarLanguage"></div>
+	</div>
+	<div><strong>Thesis/Report Language: </strong>
+	<div wicket:id="thesisLanguage"></div>
+	</div>
+
+	<strong>Thesis/Report: </strong>
+	<div><span wicket:id="seminarReportTitle"></span> <span
+		wicket:id="uploadInfoContainer"> <a href="#" wicket:id="open"><img
+		src="images/icons/document-preview_16x16.png" alt="Open/Preview" /> </a>
+	<a href="#" wicket:id="download"><img
+		src="images/icons/download_16x16.png" alt="Download" /> </a> <a href="#"
+		wicket:id="deleteSeminarReport"><img
+		src="images/icons/delete_16x16.png" alt="delete" /> </a> </span></div>
+	</div>
+</wicket:panel>
 </body>
 </html>
\ No newline at end of file
diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java
index 172fa064a5..1e307a63dc 100644
--- a/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java
+++ b/src/main/java/se/su/dsv/scipro/opponent/panels/FinalSeminarDetailsPanel.java
@@ -3,16 +3,21 @@ package se.su.dsv.scipro.opponent.panels;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 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.FeedbackPanel;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
+import se.su.dsv.scipro.data.controllers.FinalSeminarUploadController;
 import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarDao;
+import se.su.dsv.scipro.data.dao.interfaces.FinalSeminarOppositionDao;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminar;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminarActiveParticipation;
 import se.su.dsv.scipro.data.dataobjects.FinalSeminarOpposition;
@@ -23,6 +28,9 @@ import se.su.dsv.scipro.data.dataobjects.User;
 import se.su.dsv.scipro.data.enums.ProjectTeamMemberRoles;
 import se.su.dsv.scipro.repository.components.FileDownloadLink;
 import se.su.dsv.scipro.repository.components.FileOpenLink;
+import se.su.dsv.scipro.security.auth.MetaDataActionStrategy;
+import se.su.dsv.scipro.security.auth.roles.Roles;
+import se.su.dsv.scipro.util.JavascriptEventConfirmation;
 
 public class FinalSeminarDetailsPanel extends Panel {
 
@@ -30,11 +38,15 @@ public class FinalSeminarDetailsPanel extends Panel {
 
 	@SpringBean
 	private FinalSeminarDao finalSeminarDao;
+	@SpringBean
+	private FinalSeminarOppositionDao finalSeminarOppositionDao;
+	@SpringBean
+	private FinalSeminarUploadController finalSeminarUploadController;
 
-	public FinalSeminarDetailsPanel(final String id, final FinalSeminar seminar2,
-			final boolean details) {
+	public FinalSeminarDetailsPanel(final String id, final FinalSeminar seminar2, final boolean details) {
 		super(id);
-
+		this.setOutputMarkupId(true);
+		add(new FeedbackPanel("feedback"));
 		final FinalSeminar seminar = finalSeminarDao.reLoad(seminar2);
 		final Project project = seminar.getProject();
 		WebMarkupContainer titleContainer = new WebMarkupContainer("titleContainer") {
@@ -53,8 +65,7 @@ public class FinalSeminarDetailsPanel extends Panel {
 		});
 		titleContainer.add(new Label("room", seminar.getRoom()));
 		add(titleContainer);
-		add(new ListView<Student>("authorsList", new ArrayList<Student>(
-				project.getProjectParticipants())) {
+		add(new ListView<Student>("authorsList", new ArrayList<Student>(project.getProjectParticipants())) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
@@ -111,41 +122,76 @@ public class FinalSeminarDetailsPanel extends Panel {
 
 		};
 
-		detailsContainer.add(new ListView<FinalSeminarOpposition>("opponentsList", seminar
-				.getOppositions()) {
+		detailsContainer.add(new ListView<FinalSeminarOpposition>("opponentsList", seminar.getOppositions()) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void populateItem(ListItem<FinalSeminarOpposition> item) {
-				item.add(item.getModelObject().getOpponent().getUser()
-						.getDisplayComponent("opponent", true));
+			protected void populateItem(final ListItem<FinalSeminarOpposition> item) {
+				item.add(item.getModelObject().getOpponent().getUser().getDisplayComponent("opponent", true));
+				WebMarkupContainer oppCon = new WebMarkupContainer("oppositionContainer"){
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					public boolean isVisible(){
+						return item.getModelObject().getOpponentReport() != null;
+					}
+				};
+				MetaDataActionStrategy.authorize(oppCon, Roles.ADMIN);
+				item.add(oppCon);
+				
+				String reportTitle = "";
+				if(item.getModelObject().getOpponentReport() != null)
+					reportTitle = item.getModelObject().getOpponentReport().getName();						
+				oppCon.add(new Label("oppositionReportTitle", reportTitle));
+				
+				oppCon.add(new FileDownloadLink("download", item.getModelObject().getOpponentReport()));
+				oppCon.add(new FileOpenLink("open", item.getModelObject().getOpponentReport()));
+				oppCon.add(new AjaxLink<Void>("deleteOppositionReport"){
+					private static final long serialVersionUID = 1L;
+					{	//Extra safeguard should someone later decide that the surrounding container should be visible to all
+						MetaDataActionStrategy.authorize(this, Roles.ADMIN);
+						this.add(new JavascriptEventConfirmation("onclick", "Do you really want to delete this user-uploaded report?"));
+					}
+
+					@Override
+					public void onClick(AjaxRequestTarget target) {
+						try{
+							finalSeminarUploadController.deleteOpponentFiles(item.getModelObject());
+							FinalSeminarOpposition opp = item.getModelObject();
+							opp.setOpponentReport(null);
+							opp = finalSeminarOppositionDao.save(opp);
+							item.setModelObject(opp);
+							info("Opposition report deleted");
+						} catch(Exception e){
+							e.printStackTrace();
+							error("Something went wrong, see log files for stacktrace");
+						}						
+						target.addComponent(FinalSeminarDetailsPanel.this);
+					}
+				});
 				add(item);
 			}
 		});
 
-		detailsContainer.add(new ListView<FinalSeminarActiveParticipation>(
-				"activeParticipantsList", seminar.getActiveParticipations()) {
+		detailsContainer.add(new ListView<FinalSeminarActiveParticipation>("activeParticipantsList", seminar.getActiveParticipations()) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			protected void populateItem(ListItem<FinalSeminarActiveParticipation> item) {
-				item.add(item.getModelObject().getUser()
-						.getDisplayComponent("activeParticipant", true));
+				item.add(item.getModelObject().getUser().getDisplayComponent("activeParticipant", true));
 				add(item);
 			}
 
 		});
 
-		detailsContainer.add(new Label("seminarLanguage", seminar.getPresentationLanguage()
-				.toString()));
+		detailsContainer.add(new Label("seminarLanguage", seminar.getPresentationLanguage().toString()));
 		detailsContainer.add(new Label("thesisLanguage", seminar.getReportLanguage().toString()));
 		detailsContainer.add(new Label("seminarReportTitle", new Model<String>() {
 			private static final long serialVersionUID = 1L;
 
 			@Override
 			public String getObject() {
-				return seminar.getDocument() == null ? "No thesis/report uploaded" : seminar
-						.getDocument().getName();
+				return seminar.getDocument() == null ? "No thesis/report uploaded" : seminar.getDocument().getName();
 			}
 		}));
 
@@ -161,6 +207,27 @@ public class FinalSeminarDetailsPanel extends Panel {
 		uploadInfoContainer.add(new FileDownloadLink("download", seminar.getDocument()));
 		uploadInfoContainer.add(new FileOpenLink("open", seminar.getDocument()));
 
+		uploadInfoContainer.add(new AjaxLink<Void>("deleteSeminarReport") {
+			private static final long serialVersionUID = 1L;
+			{
+				MetaDataActionStrategy.authorize(this, Roles.ADMIN);
+				this.add(new JavascriptEventConfirmation("onclick", "Do you really want to delete this user-uploaded report?"));
+			}
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				try {
+					finalSeminarUploadController.deleteSeminarReport(seminar, true);
+					seminar.setDocument(null); //Only to repaint the ajax call without the document icons
+					info("Report deleted");
+				} catch (Exception e) {
+					e.printStackTrace();
+					error("Deletion failed");
+				}
+				target.addComponent(FinalSeminarDetailsPanel.this);
+			}
+		});
+
 		detailsContainer.add(uploadInfoContainer);
 		add(detailsContainer);
 
diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html
index e1b8c0eed1..acc47fd40b 100644
--- a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html
+++ b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.html
@@ -5,6 +5,7 @@
 	<wicket:panel>
 
 		<div class="span-22 prepend-top last">
+			<div wicket:id="feedback"></div>
 			<table class="rounded-table seminar-table even-rows">
 				<tr>
 					<th>Date</th>
diff --git a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java
index 2132c6d34b..b8bca3392b 100644
--- a/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java
+++ b/src/main/java/se/su/dsv/scipro/opponent/panels/OpponentListViewPanel.java
@@ -47,8 +47,8 @@ import se.su.dsv.scipro.opponent.models.OpponentModel;
 public class OpponentListViewPanel extends Panel {
 
 	/**
-     * 
-     */
+	 * 
+	 */
 	private static final long serialVersionUID = 4988253889884804250L;
 
 	@SpringBean
@@ -76,6 +76,10 @@ public class OpponentListViewPanel extends Panel {
 		super(id);
 		this.adminView = adminView;
 		loadListView(seminarList);
+		feedbackPanel = new FeedbackPanel("feedback");
+		add(feedbackPanel);
+		this.setOutputMarkupId(true);
+		
 		editSeminarDialogContainer = new WebMarkupContainer("dialogContainer");
 		editSeminarDialog = new Dialog("dialog");
 		editSeminarDialog.setModal(true);
@@ -96,7 +100,7 @@ public class OpponentListViewPanel extends Panel {
 		add(contactsSeminarDialog);
 		contactsDialogContainer.setOutputMarkupId(true);
 		contactsDialogContainer.add(contactsSeminarForm = new ContactsSeminarForm(
-				"contactsSeminarForm"));
+		"contactsSeminarForm"));
 		contactsSeminarForm.setOutputMarkupId(true);
 
 		add(linkListView);
@@ -125,7 +129,7 @@ public class OpponentListViewPanel extends Panel {
 				User headSupervisor = seminar.getProject().getHeadSupervisor().getUser();
 
 				headSupervisorString += headSupervisor.getFirstName() + " "
-						+ headSupervisor.getLastName();
+				+ headSupervisor.getLastName();
 				item.add(new Label("headSupervisor", headSupervisorString));
 
 				item.add(new Label("projectClass", seminar.getProject().getProjectClass().getName()));
@@ -191,20 +195,25 @@ public class OpponentListViewPanel extends Panel {
 					@Override
 					public void onClick(AjaxRequestTarget target) {
 						FinalSeminar seminar2 = finalSeminarDao.reLoad(seminar);
-						seminarUploadController.deleteSeminarFilesRecursive(seminar2);
-						for (FinalSeminarActiveParticipation al : seminar2
-								.getActiveParticipations()) {
-							finalSeminarActiveParticipationDao.delete(al);
-						}
+						try{
+							seminarUploadController.deleteSeminarReport(seminar2, true);
+							for (FinalSeminarActiveParticipation al : seminar2
+									.getActiveParticipations()) {
+								finalSeminarActiveParticipationDao.delete(al);
+							}
 
-						for (FinalSeminarOpposition fso : seminar2
-								.getOppositions()) {
-							seminarUploadController.deleteOpponentFiles(fso);
-							finalSeminarOppositionDao.delete(fso);
+							for (FinalSeminarOpposition fso : seminar2
+									.getOppositions()) {
+								seminarUploadController.deleteOpponentFiles(fso);
+								finalSeminarOppositionDao.delete(fso);
+							}
+							finalSeminarDao.delete(seminar2);
+							info("Final seminar deleted");
+						} catch (Exception e){
+							error("Something went wrong, see logs for stacktrace");
+							e.printStackTrace();
 						}
-						finalSeminarDao.delete(seminar2);
-						setResponsePage(AdminFinalSeminarPage.class);
-
+						target.addComponent(OpponentListViewPanel.this);
 					}
 
 					@Override
@@ -227,7 +236,7 @@ public class OpponentListViewPanel extends Panel {
 							@Override
 							public CharSequence decorateScript(CharSequence script) {
 								String ret = "if(!confirm('The attendees of this seminar will NOT be notified that the seminar has been deleted, are you sure you wish to delete it?')) return false; "
-										+ script;
+									+ script;
 								return ret;
 							}
 						};
@@ -243,8 +252,8 @@ public class OpponentListViewPanel extends Panel {
 	private class EditSeminarForm extends Form<OpponentModel> {
 
 		/**
-         * 
-         */
+		 * 
+		 */
 		private static final long serialVersionUID = -5004827722926732419L;
 
 		public EditSeminarForm(String name) {
@@ -257,8 +266,8 @@ public class OpponentListViewPanel extends Panel {
 	private class EditForm extends Form<Void> {
 
 		/**
-         * 
-         */
+		 * 
+		 */
 		private static final long serialVersionUID = 5882957818616996808L;
 
 		public EditForm(String name, final FinalSeminar seminar) {
@@ -290,8 +299,8 @@ public class OpponentListViewPanel extends Panel {
 	private class ContactsSeminarForm extends Form<OpponentModel> {
 
 		/**
-         * 
-         */
+		 * 
+		 */
 		private static final long serialVersionUID = -5004827722926732419L;
 
 		public ContactsSeminarForm(String name) {
@@ -306,8 +315,8 @@ public class OpponentListViewPanel extends Panel {
 	private class ContactsForm extends Form<Void> {
 
 		/**
-         * 
-         */
+		 * 
+		 */
 		private static final long serialVersionUID = -8271761600388217566L;
 
 		public ContactsForm(String name, final FinalSeminar seminar) {
@@ -316,8 +325,8 @@ public class OpponentListViewPanel extends Panel {
 			add(new AjaxButton("contacts", new Model<String>("Details")) {
 
 				/**
-                 * 
-                 */
+				 * 
+				 */
 				private static final long serialVersionUID = 1211337464815824507L;
 
 				@Override