From 5f837a83c72f33d8283b3dcb815313aa83dcca7f Mon Sep 17 00:00:00 2001
From: uhensler <urs.hensler@frentix.com>
Date: Mon, 8 Oct 2018 14:20:43 +0200
Subject: [PATCH] OO-3304: Show the saved analysis presentation name in
 breadcrumb

---
 .../analysis/AnalysisPresentation.java        |  5 +-
 .../quality/analysis/EvaluationFormView.java  |  5 +-
 .../model/AnalysisPresentationImpl.java       | 10 ----
 .../model/EvaluationFormViewImpl.java         | 10 ----
 .../analysis/ui/AnalysisListController.java   | 53 +++++++++++++------
 .../quality/analysis/ui/AnalysisRow.java      | 10 ----
 .../quality/ui/QualityHomeController.java     |  3 +-
 7 files changed, 40 insertions(+), 56 deletions(-)

diff --git a/src/main/java/org/olat/modules/quality/analysis/AnalysisPresentation.java b/src/main/java/org/olat/modules/quality/analysis/AnalysisPresentation.java
index c496b974901..e0f8c4b9841 100644
--- a/src/main/java/org/olat/modules/quality/analysis/AnalysisPresentation.java
+++ b/src/main/java/org/olat/modules/quality/analysis/AnalysisPresentation.java
@@ -21,7 +21,6 @@ package org.olat.modules.quality.analysis;
 
 import org.olat.core.id.CreateInfo;
 import org.olat.core.id.ModifiedInfo;
-import org.olat.core.id.OLATResourceable;
 import org.olat.repository.RepositoryEntry;
 
 /**
@@ -30,9 +29,7 @@ import org.olat.repository.RepositoryEntry;
  * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
  *
  */
-public interface AnalysisPresentation extends AnalysisPresentationRef, OLATResourceable, CreateInfo, ModifiedInfo {
-	
-	public String RESOURCEABLE_TYPE = "presentation";
+public interface AnalysisPresentation extends AnalysisPresentationRef, CreateInfo, ModifiedInfo {
 	
 	public String getName();
 	
diff --git a/src/main/java/org/olat/modules/quality/analysis/EvaluationFormView.java b/src/main/java/org/olat/modules/quality/analysis/EvaluationFormView.java
index 4f70dab3d52..b78c5b48a47 100644
--- a/src/main/java/org/olat/modules/quality/analysis/EvaluationFormView.java
+++ b/src/main/java/org/olat/modules/quality/analysis/EvaluationFormView.java
@@ -21,7 +21,6 @@ package org.olat.modules.quality.analysis;
 
 import java.util.Date;
 
-import org.olat.core.id.OLATResourceable;
 import org.olat.repository.RepositoryEntry;
 
 /**
@@ -30,10 +29,8 @@ import org.olat.repository.RepositoryEntry;
  * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
  *
  */
-public interface EvaluationFormView extends OLATResourceable {
+public interface EvaluationFormView {
 	
-	public String RESOURCEABLE_TYPE = "form";
-
 	public RepositoryEntry getFormEntry();
 	
 	public Long getNumberDataCollections();
diff --git a/src/main/java/org/olat/modules/quality/analysis/model/AnalysisPresentationImpl.java b/src/main/java/org/olat/modules/quality/analysis/model/AnalysisPresentationImpl.java
index 4cfb37adb04..065ebc917cc 100644
--- a/src/main/java/org/olat/modules/quality/analysis/model/AnalysisPresentationImpl.java
+++ b/src/main/java/org/olat/modules/quality/analysis/model/AnalysisPresentationImpl.java
@@ -96,16 +96,6 @@ public class AnalysisPresentationImpl implements AnalysisPresentation, Persistab
 		this.key = key;
 	}
 
-	@Override
-	public String getResourceableTypeName() {
-		return AnalysisPresentation.RESOURCEABLE_TYPE;
-	}
-
-	@Override
-	public Long getResourceableId() {
-		return key;
-	}
-
 	@Override
 	public Date getCreationDate() {
 		return creationDate;
diff --git a/src/main/java/org/olat/modules/quality/analysis/model/EvaluationFormViewImpl.java b/src/main/java/org/olat/modules/quality/analysis/model/EvaluationFormViewImpl.java
index 3e7cfe384a8..1749cf99f93 100644
--- a/src/main/java/org/olat/modules/quality/analysis/model/EvaluationFormViewImpl.java
+++ b/src/main/java/org/olat/modules/quality/analysis/model/EvaluationFormViewImpl.java
@@ -47,16 +47,6 @@ public class EvaluationFormViewImpl implements EvaluationFormView {
 		this.numberParticipationsDone = numberParticipationsDone;
 	}
 
-	@Override
-	public String getResourceableTypeName() {
-		return EvaluationFormView.RESOURCEABLE_TYPE;
-	}
-
-	@Override
-	public Long getResourceableId() {
-		return formEntry.getKey();
-	}
-
 	@Override
 	public RepositoryEntry getFormEntry() {
 		return formEntry;
diff --git a/src/main/java/org/olat/modules/quality/analysis/ui/AnalysisListController.java b/src/main/java/org/olat/modules/quality/analysis/ui/AnalysisListController.java
index 73cfd64995d..36f84b8e2c2 100644
--- a/src/main/java/org/olat/modules/quality/analysis/ui/AnalysisListController.java
+++ b/src/main/java/org/olat/modules/quality/analysis/ui/AnalysisListController.java
@@ -48,9 +48,11 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
+import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.Organisation;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.StateEntry;
+import org.olat.core.util.resource.OresHelper;
 import org.olat.modules.quality.QualitySecurityCallback;
 import org.olat.modules.quality.analysis.AnalysisPresentation;
 import org.olat.modules.quality.analysis.EvaluationFormView;
@@ -67,6 +69,8 @@ import org.springframework.beans.factory.annotation.Autowired;
  */
 public class AnalysisListController extends FormBasicController implements FlexiTableComponentDelegate, Activateable2 {
 
+	private static final String ORES_TYPE_FORM = "form";
+	private static final String ORES_TYPE_PRESENTATION = "presentation";
 	private static final String CMD_OPEN = "open";
 	private static final Comparator<? super EvaluationFormView> CREATED_DESC = 
 			(f1, f2) -> f2.getLatestDataCollectionFinishedDate().compareTo(f1.getLatestDataCollectionFinishedDate());
@@ -80,7 +84,7 @@ public class AnalysisListController extends FormBasicController implements Flexi
 	
 	private final List<Organisation> organisations;
 	private int counter = 0;
-	private EvaluationFormView currentFormView;
+	private AnalysisPresentation presentation;
 
 	@Autowired
 	private QualityAnalysisService analysisService;
@@ -97,6 +101,12 @@ public class AnalysisListController extends FormBasicController implements Flexi
 				secCallback.getAnalysisViewRoles());
 		initForm(ureq);
 	}
+	
+	public static OLATResourceable getOlatResourceable(AnalysisPresentation presentation) {
+		return presentation.getKey() != null
+				? OresHelper.createOLATResourceableInstance(ORES_TYPE_PRESENTATION, presentation.getKey())
+				: OresHelper.createOLATResourceableInstance(ORES_TYPE_FORM, presentation.getFormEntry().getKey());
+	}
 
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
@@ -173,14 +183,14 @@ public class AnalysisListController extends FormBasicController implements Flexi
 		if(entries == null || entries.isEmpty()) return;
 		
 		String type = entries.get(0).getOLATResourceable().getResourceableTypeName();
-		if (EvaluationFormView.RESOURCEABLE_TYPE.equalsIgnoreCase(type)) {
+		if (ORES_TYPE_FORM.equalsIgnoreCase(type)) {
 			Long formEntryKey = entries.get(0).getOLATResourceable().getResourceableId();
 			AnalysisRow row = dataModel.getObjectByFormEntryKey(formEntryKey);
 			if (row != null) {
-				currentFormView = row;
+				presentation = createPresentation(row);
 				doOpenAnalysis(ureq);
 			}
-		} else if (AnalysisPresentation.RESOURCEABLE_TYPE.equalsIgnoreCase(type)) {
+		} else if (ORES_TYPE_PRESENTATION.equalsIgnoreCase(type)) {
 			Long presentationKey = entries.get(0).getOLATResourceable().getResourceableId();
 			doOpenPresentation(ureq, presentationKey);
 		}
@@ -203,40 +213,49 @@ public class AnalysisListController extends FormBasicController implements Flexi
 		if (source == tableEl && event instanceof SelectionEvent) {
 			SelectionEvent se = (SelectionEvent)event;
 			String cmd = se.getCommand();
-			currentFormView = dataModel.getObject(se.getIndex());
+			AnalysisRow row = dataModel.getObject(se.getIndex());
+			presentation = createPresentation(row);
 			if (CMD_OPEN.equals(cmd)) {
 				doOpenAnalysis(ureq);
 			}
 		} else if (source instanceof FormLink) {
 			FormLink link = (FormLink)source;
 			if(CMD_OPEN.equals(link.getCmd())) {
-				currentFormView = (AnalysisRow)link.getUserObject();
+				AnalysisRow row = (AnalysisRow)link.getUserObject();
+				presentation = createPresentation(row);
 				doOpenAnalysis(ureq);
 			}
 		}
 		
 		super.formInnerEvent(ureq, source, event);
 	}
-
-	private void doOpenAnalysis(UserRequest ureq) {
-		AnalysisPresentation presentation = analysisService.createPresentation(currentFormView.getFormEntry());
-		WindowControl bwControl = addToHistory(ureq, currentFormView, null);
-		doOpenAnalysis(ureq, bwControl, presentation);
+	
+	private AnalysisPresentation createPresentation(EvaluationFormView formView) {
+		return analysisService.createPresentation(formView.getFormEntry());
 	}
 
 	private void doOpenPresentation(UserRequest ureq, Long presentationKey) {
-		AnalysisPresentation presentation = analysisService.loadPresentationByKey(() -> presentationKey);
-		WindowControl bwControl = addToHistory(ureq, presentation, null);
-		doOpenAnalysis(ureq, bwControl, presentation);
+		presentation = analysisService.loadPresentationByKey(() -> presentationKey);
+		if (presentation != null) {
+			doOpenAnalysis(ureq);
+		}
 	}
 
-	private void doOpenAnalysis(UserRequest ureq, WindowControl wControl, AnalysisPresentation presentation) {
-		analysisCtrl = new AnalysisSegmentsController(ureq, wControl, secCallback, stackPanel, presentation);
+	private void doOpenAnalysis(UserRequest ureq) {
+		OLATResourceable ores = getOlatResourceable(presentation);
+		WindowControl bwControl = addToHistory(ureq, ores, null);
+		analysisCtrl = new AnalysisSegmentsController(ureq, bwControl, secCallback, stackPanel, presentation);
 		listenTo(analysisCtrl);
-		String title = presentation.getFormEntry().getDisplayname();
+		String title = getBreadcrumbTitle(presentation);
 		stackPanel.pushController(title, analysisCtrl);
 		analysisCtrl.activate(ureq, null, null);
 	}
+	
+	private String getBreadcrumbTitle(AnalysisPresentation presentation) {
+		return presentation.getKey() != null
+				? presentation.getName()
+				: presentation.getFormEntry().getDisplayname();
+	}
 
 	@Override
 	protected void formOK(UserRequest ureq) {
diff --git a/src/main/java/org/olat/modules/quality/analysis/ui/AnalysisRow.java b/src/main/java/org/olat/modules/quality/analysis/ui/AnalysisRow.java
index 6b34064d562..68efb2a9d50 100644
--- a/src/main/java/org/olat/modules/quality/analysis/ui/AnalysisRow.java
+++ b/src/main/java/org/olat/modules/quality/analysis/ui/AnalysisRow.java
@@ -41,16 +41,6 @@ public class AnalysisRow implements EvaluationFormView {
 		this.openLink = openLink;
 	}
 
-	@Override
-	public String getResourceableTypeName() {
-		return formView.getResourceableTypeName();
-	}
-
-	@Override
-	public Long getResourceableId() {
-		return formView.getResourceableId();
-	}
-	
 	@Override
 	public RepositoryEntry getFormEntry() {
 		return formView.getFormEntry();
diff --git a/src/main/java/org/olat/modules/quality/ui/QualityHomeController.java b/src/main/java/org/olat/modules/quality/ui/QualityHomeController.java
index cbe51f6d38f..1dc32084e70 100644
--- a/src/main/java/org/olat/modules/quality/ui/QualityHomeController.java
+++ b/src/main/java/org/olat/modules/quality/ui/QualityHomeController.java
@@ -234,7 +234,8 @@ public class QualityHomeController extends BasicController implements Activateab
 	}
 	
 	private void doOpenPresentation(UserRequest ureq, AnalysisPresentation presentation) {
-		ContextEntry contextEntry = BusinessControlFactory.getInstance().createContextEntry(presentation);
+		OLATResourceable ores = AnalysisListController.getOlatResourceable(presentation);
+		ContextEntry contextEntry = BusinessControlFactory.getInstance().createContextEntry(ores);
 		List<ContextEntry> entries = Collections.singletonList(contextEntry);
 		doOpenAnalysis(ureq, entries);
 	}
-- 
GitLab