From 4d544090f127841ad536d5fa35f7098ba3d0849b Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Mon, 1 Dec 2014 10:57:26 +0100
Subject: [PATCH] OO-1336: check if the resource can be launched or show an
 error message

---
 .../olat/course/nodes/CourseNodeFactory.java  | 10 ++++---
 .../nodes/feed/FeedNodeEditController.java    | 28 +++++++++----------
 .../feed/_i18n/LocalStrings_de.properties     |  2 ++
 .../feed/_i18n/LocalStrings_en.properties     |  2 ++
 4 files changed, 23 insertions(+), 19 deletions(-)

diff --git a/src/main/java/org/olat/course/nodes/CourseNodeFactory.java b/src/main/java/org/olat/course/nodes/CourseNodeFactory.java
index 5545404860b..4cd2375a1c0 100644
--- a/src/main/java/org/olat/course/nodes/CourseNodeFactory.java
+++ b/src/main/java/org/olat/course/nodes/CourseNodeFactory.java
@@ -37,7 +37,6 @@ import org.olat.NewControllerFactory;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.WindowControl;
-import org.olat.core.logging.AssertException;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.course.CorruptedCourseException;
@@ -128,23 +127,26 @@ public class CourseNodeFactory {
 	 * @param ureq
 	 * @param node
 	 */
-	public void launchReferencedRepoEntryEditor(UserRequest ureq, WindowControl wControl, CourseNode node) {
+	public boolean launchReferencedRepoEntryEditor(UserRequest ureq, WindowControl wControl, CourseNode node) {
 		RepositoryEntry repositoryEntry = node.getReferencedRepositoryEntry();
 		if (repositoryEntry == null) {
 			// do nothing
-			return;
+			return false;
 		}
 		
 		RepositoryHandler typeToEdit = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry);
 		if (typeToEdit.supportsEdit(repositoryEntry.getOlatResource()) == EditionSupport.no){
-			throw new AssertException("Trying to edit repository entry which has no assoiciated editor: "+ typeToEdit);
+			log.error("Trying to edit repository entry which has no associated editor: "+ typeToEdit);
+			return false;
 		}
 		
 		try {
 			String businessPath = "[RepositoryEntry:" + repositoryEntry.getKey() + "][Editor:0]";
 			NewControllerFactory.getInstance().launch(businessPath, ureq, wControl);
+			return true;
 		} catch (CorruptedCourseException e) {
 			log.error("Course corrupted: " + repositoryEntry.getKey() + " (" + repositoryEntry.getOlatResource().getResourceableId() + ")", e);
+			return false;
 		}
 	}
 	
diff --git a/src/main/java/org/olat/course/nodes/feed/FeedNodeEditController.java b/src/main/java/org/olat/course/nodes/feed/FeedNodeEditController.java
index e6e3b0d1a90..6394fcde365 100644
--- a/src/main/java/org/olat/course/nodes/feed/FeedNodeEditController.java
+++ b/src/main/java/org/olat/course/nodes/feed/FeedNodeEditController.java
@@ -214,16 +214,11 @@ public abstract class FeedNodeEditController extends ActivateableTabbableDefault
 		}
 	}
 
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component,
-	 *      org.olat.core.gui.control.Event)
-	 */
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
 		if (source == chooseButton || source == changeButton) {
 			searchController = new ReferencableEntriesSearchController(getWindowControl(), ureq, resourceTypeName, translate(BUTTON_CHOOSE_FEED));
-			this.listenTo(searchController);
+			listenTo(searchController);
 			cmc = new CloseableModalController(getWindowControl(), translate("close"), searchController.getInitialComponent(), true,
 					translate(BUTTON_CREATE_FEED));
 			cmc.activate();
@@ -232,27 +227,30 @@ public abstract class FeedNodeEditController extends ActivateableTabbableDefault
 			RepositoryEntry re = node.getReferencedRepositoryEntry();
 			if (re == null) {
 				// The repository entry has been deleted meanwhile.
-				this.showError("error.repoentrymissing");
+				showError("error.repoentrymissing");
 			} else {
 				FeedSecurityCallback callback = new FeedPreviewSecurityCallback();
 				feedController = uiFactory.createMainController(re.getOlatResource(), ureq, getWindowControl(), callback, course
 						.getResourceableId(), node.getIdent());
 				cmcFeedCtr = new CloseableModalController(getWindowControl(), translate("command.close"), feedController.getInitialComponent());
-				this.listenTo(cmcFeedCtr);
-				// cmcFeedCtr.insertHeaderCss();
+				listenTo(cmcFeedCtr);
 				cmcFeedCtr.activate();
 			}
 			
 		} else if (source == editLink) {
-			CourseNodeFactory.getInstance().launchReferencedRepoEntryEditor(ureq, getWindowControl(), node);
+			boolean launched = CourseNodeFactory.getInstance().launchReferencedRepoEntryEditor(ureq, getWindowControl(), node);
+			if(!launched) {
+				RepositoryEntry re = node.getReferencedRepositoryEntry();
+				if (re == null) {
+					showError("error.repoentrymissing");
+				} else {
+					showError("error.wrongtype");	
+				}
+			}
 		}
-
 	}
 
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
+	@Override
 	public void event(UserRequest urequest, Controller source, Event event) {
 		if (source == moderatroCtr) {
 			if (event == Event.CHANGED_EVENT) {
diff --git a/src/main/java/org/olat/course/nodes/feed/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/feed/_i18n/LocalStrings_de.properties
index f02641ff9b4..44d23ab37ff 100644
--- a/src/main/java/org/olat/course/nodes/feed/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/feed/_i18n/LocalStrings_de.properties
@@ -16,6 +16,8 @@ help.hover.feed.r=Hilfe, um den lesenden Zugang zu konfigurieren
 help.hover.feed.rw=Hilfe, um den schreibenden Zugang zu konfigurieren
 heip.hover.choose.feed=Hilfe zur Auswahl eines Feeds
 
+error.repoentrymissing=Das Feed (Blog oder Podcast), das Sie anzeigen m\u00F6chten, wurde in der Zwischenzeit in der Ablage der Lernressourcen gel\u00F6scht.
+error.wrongtype=Der Lernressourcen hat wahrscheinlich nicht den richtigen Typ. Pr\u00FCfen Sie dass Sie ein Podcast oder ein Blog an diesem Kursbaustein verbunden haben
 
 chelp.feed.p1=Wenn Sie noch keinen Feed (Blog oder Podcast) ausgew\u00E4hlt haben, wird dies angezeigt.
 chelp.feed.p2=Erstellen Sie erst den Feed (Blog oder Podcast) in den Lernressourcen. Klicken Sie dann auf die Schaltfläche "Blog/Podcast wählen, erstellen oder importieren", um in der Ablage der Lernressourcen den gew\u00FCnschten Inhalt auszuw\u00E4hlen.
diff --git a/src/main/java/org/olat/course/nodes/feed/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/feed/_i18n/LocalStrings_en.properties
index edbc1e7aed4..c00076c57c3 100644
--- a/src/main/java/org/olat/course/nodes/feed/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/feed/_i18n/LocalStrings_en.properties
@@ -9,6 +9,8 @@ command.preview=Display preview
 condition.accessModerator.title=Moderate
 condition.accessPoster.title=Read and write
 condition.accessReader.title=Read only
+error.repoentrymissing=This Feed (blog or podcast) has been deleted in the meantime within the storage folder of learning resources.
+error.wrongtype=The learning resource has  probably the wrong type. Please, make sure that you have linked a podcast or a blog to this course element.
 heip.hover.choose.feed=Help regarding your feed selection
 help.hover.feed.mo=Help regarding the access configuration as moderator
 help.hover.feed.r=Help regarding the access configuration as reader
-- 
GitLab