From 7933a3d6aa32245e93733c430e73ed3ce7352cb8 Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 13 Feb 2017 11:41:33 +0100
Subject: [PATCH] OO-2517: add a tab with the solution in the assessment item
 editor

---
 .../AssessmentItemEditorController.java       | 15 ++++
 ...sessmentItemPreviewSolutionController.java | 78 +++++++++++++++++++
 .../editor/_i18n/LocalStrings_de.properties   |  1 +
 .../editor/_i18n/LocalStrings_en.properties   |  1 +
 4 files changed, 95 insertions(+)
 create mode 100644 src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemPreviewSolutionController.java

diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemEditorController.java
index 766f907070b..d0467150570 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemEditorController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemEditorController.java
@@ -83,9 +83,11 @@ public class AssessmentItemEditorController extends BasicController {
 	private final VelocityContainer mainVC;
 	
 	private final int displayTabPosition;
+	private final int solutionTabPosition;
 	private MetadataEditorController metadataEditor;
 	private AssessmentItemPreviewController displayCtrl;
 	private Controller itemEditor, scoreEditor, feedbackEditor;
+	private AssessmentItemPreviewSolutionController solutionCtrl;
 	
 	private final File itemFile;
 	private final File rootDirectory;
@@ -125,6 +127,10 @@ public class AssessmentItemEditorController extends BasicController {
 		listenTo(displayCtrl);
 		displayTabPosition = tabbedPane.addTab(translate("preview"), displayCtrl);
 		
+		solutionCtrl = new AssessmentItemPreviewSolutionController(ureq, getWindowControl(), resolvedAssessmentItem, rootDirectory, itemFile);
+		listenTo(displayCtrl);
+		solutionTabPosition = tabbedPane.addTab(translate("preview.solution"), solutionCtrl);
+		
 		putInitialPanel(mainVC);
 	}
 	
@@ -154,6 +160,10 @@ public class AssessmentItemEditorController extends BasicController {
 				resolvedAssessmentItem, itemRef, testEntry, assessmentEntry, rootDirectory, itemFile);
 		listenTo(displayCtrl);
 		displayTabPosition = tabbedPane.addTab(translate("preview"), displayCtrl);
+
+		solutionCtrl = new AssessmentItemPreviewSolutionController(ureq, getWindowControl(), resolvedAssessmentItem, rootDirectory, itemFile);
+		listenTo(displayCtrl);
+		solutionTabPosition = tabbedPane.addTab(translate("preview.solution"), solutionCtrl);
 		
 		putInitialPanel(mainVC);
 	}
@@ -366,6 +376,11 @@ public class AssessmentItemEditorController extends BasicController {
 				
 				listenTo(displayCtrl);
 				tabbedPane.replaceTab(displayTabPosition, displayCtrl);
+			} else if(selectedCtrl == solutionCtrl) {
+				solutionCtrl = new AssessmentItemPreviewSolutionController(ureq, getWindowControl(), resolvedAssessmentItem, rootDirectory, itemFile);
+
+				listenTo(displayCtrl);
+				tabbedPane.replaceTab(solutionTabPosition, solutionCtrl);
 			}
 		}
 	}
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemPreviewSolutionController.java b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemPreviewSolutionController.java
new file mode 100644
index 00000000000..3dfcafe01ed
--- /dev/null
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/AssessmentItemPreviewSolutionController.java
@@ -0,0 +1,78 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.ims.qti21.ui.editor;
+
+import java.io.File;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.velocity.VelocityContainer;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.controller.BasicController;
+import org.olat.ims.qti21.AssessmentSessionAuditLogger;
+import org.olat.ims.qti21.manager.audit.DefaultAssessmentSessionAuditLogger;
+import org.olat.ims.qti21.ui.AssessmentItemDisplayController;
+
+import uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentItem;
+
+/**
+ * 
+ * The controller show the assessment item in solution mode.
+ * 
+ * Initial date: 13 févr. 2017<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class AssessmentItemPreviewSolutionController extends BasicController {
+	
+	private final VelocityContainer mainVC;
+	
+	private AssessmentItemDisplayController displayCtrl;
+	
+	private final AssessmentSessionAuditLogger candidateAuditLogger = new PreviewAuditLogger();
+	
+	public AssessmentItemPreviewSolutionController(UserRequest ureq, WindowControl wControl,
+			ResolvedAssessmentItem resolvedAssessmentItem, File rootDirectory, File itemFile) {
+		super(ureq, wControl);
+		
+		displayCtrl = new AssessmentItemDisplayController(ureq, getWindowControl(),
+				resolvedAssessmentItem, rootDirectory, itemFile, candidateAuditLogger);
+		displayCtrl.requestSolution(ureq);
+		listenTo(displayCtrl);
+		mainVC = createVelocityContainer("assessment_item_preview");
+		mainVC.put("display", displayCtrl.getInitialComponent());
+		putInitialPanel(mainVC);
+	}
+
+	@Override
+	protected void doDispose() {
+		mainVC.removeListener(this);
+	}
+	
+	@Override
+	protected void event(UserRequest ureq, Component source, Event event) {
+		//
+	}
+	
+	public class PreviewAuditLogger extends DefaultAssessmentSessionAuditLogger {
+		
+	}
+}
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
index e9b16e3003c..483c5980f27 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
@@ -133,6 +133,7 @@ new.spots=Spots hinzuf\u00FCgen
 new.testpart=Test Part
 new.upload=Datei hochladen
 preview=Vorschau
+preview.solution=Vorschau L\u00F6sung
 time.limit.max=Zeitbeschr\u00E4nkung (Minute)
 title.add=$org.olat.ims.qti.editor\:title.add
 tools.change.copy=$org.olat.ims.qti.editor\:tools.change.copy
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
index 3074817879c..ceba19cc31b 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
@@ -133,6 +133,7 @@ new.spots=Add spots
 new.testpart=Test part
 new.upload=Upload file
 preview=Preview
+preview.solution=Preview solution
 time.limit.max=Time limit (minute)
 title.add=$org.olat.ims.qti.editor\:title.add
 tools.change.copy=$org.olat.ims.qti.editor\:tools.change.copy
-- 
GitLab