From debc8d0011ebb184911cd96289160e13860e5b8f Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 20 Nov 2014 09:31:33 +0100 Subject: [PATCH] OO-1322: show an error message in the course element if the feed doesn't exist --- .../nodes/feed/FeedPeekviewController.java | 74 ++++++++++--------- .../course/nodes/feed/_content/peekview.html | 5 ++ .../feed/_i18n/LocalStrings_de.properties | 2 +- .../webFeed/_spring/webFeedContext.xml | 2 +- .../webFeed/ui/FeedMainController.java | 46 +++++++----- .../webFeed/ui/_content/feed_error.html | 3 + .../ui/_i18n/LocalStrings_de.properties | 3 +- 7 files changed, 79 insertions(+), 56 deletions(-) create mode 100644 src/main/java/org/olat/modules/webFeed/ui/_content/feed_error.html diff --git a/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java b/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java index ff2a06bf327..6291886ded8 100644 --- a/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java +++ b/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java @@ -22,7 +22,6 @@ package org.olat.course.nodes.feed; import java.util.ArrayList; import java.util.List; -import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.htmlsite.OlatCmdEvent; @@ -43,6 +42,7 @@ import org.olat.modules.webFeed.models.Item; import org.olat.modules.webFeed.ui.FeedUIFactory; import org.olat.resource.OLATResource; import org.olat.user.UserManager; +import org.springframework.beans.factory.annotation.Autowired; /** * <h3>Description:</h3> The feed peekview controller displays the configurable @@ -60,6 +60,11 @@ import org.olat.user.UserManager; public class FeedPeekviewController extends BasicController implements Controller { // the current course node id private final String nodeId; + + @Autowired + private FeedManager feedManager; + @Autowired + private UserManager userManager; /** * Constructor for the feed peekview controller @@ -79,43 +84,46 @@ public class FeedPeekviewController extends BasicController implements Controlle Long courseId, String nodeId, FeedUIFactory feedUIFactory, int itemsToDisplay, String wrapperCssClass) { super(ureq, wControl); this.nodeId = nodeId; - FeedManager feedManager = FeedManager.getInstance(); Feed feed = feedManager.getFeed(olatResource); - UserManager userManager = CoreSpringFactory.getImpl(UserManager.class); VelocityContainer peekviewVC = createVelocityContainer("peekview"); - peekviewVC.contextPut("wrapperCssClass", wrapperCssClass != null ? wrapperCssClass : ""); - // add gui helper - String authorFullname = userManager.getUserDisplayName(feed.getAuthor()); - FeedViewHelper helper = new FeedViewHelper(feed, getIdentity(), authorFullname, getTranslator(), courseId, nodeId, callback); - peekviewVC.contextPut("helper", helper); - // add items, only as many as configured - List<Item> allItems = feed.getFilteredItems(callback, getIdentity()); - List<Item> items = new ArrayList<Item>(); - for (int i = 0; i < allItems.size(); i++) { - if (items.size() == itemsToDisplay) { - break; - } - // add item itself if published - Item item = allItems.get(i); - if (item.isPublished()) { - items.add(item); - // add link to item - // Add link to jump to course node - Link nodeLink = LinkFactory.createLink("nodeLink_" + item.getGuid(), peekviewVC, this); - nodeLink.setCustomDisplayText(StringHelper.escapeHtml(item.getTitle())); - nodeLink.setIconLeftCSS("o_icon o_" + feed.getResourceableTypeName().replace(".", "-") + "_icon"); - nodeLink.setCustomEnabledLinkCSS("o_gotoNode"); - nodeLink.setUserObject(item.getGuid()); + if(feed == null) { + peekviewVC.contextPut("items", new ArrayList<>(1)); + peekviewVC.contextPut("errorMessage", translate("peekview.error")); + } else { + peekviewVC.contextPut("wrapperCssClass", wrapperCssClass != null ? wrapperCssClass : ""); + // add gui helper + String authorFullname = userManager.getUserDisplayName(feed.getAuthor()); + FeedViewHelper helper = new FeedViewHelper(feed, getIdentity(), authorFullname, getTranslator(), courseId, nodeId, callback); + peekviewVC.contextPut("helper", helper); + // add items, only as many as configured + List<Item> allItems = feed.getFilteredItems(callback, getIdentity()); + List<Item> items = new ArrayList<Item>(); + for (int i = 0; i < allItems.size(); i++) { + if (items.size() == itemsToDisplay) { + break; + } + // add item itself if published + Item item = allItems.get(i); + if (item.isPublished()) { + items.add(item); + // add link to item + // Add link to jump to course node + Link nodeLink = LinkFactory.createLink("nodeLink_" + item.getGuid(), peekviewVC, this); + nodeLink.setCustomDisplayText(StringHelper.escapeHtml(item.getTitle())); + nodeLink.setIconLeftCSS("o_icon o_" + feed.getResourceableTypeName().replace(".", "-") + "_icon"); + nodeLink.setCustomEnabledLinkCSS("o_gotoNode"); + nodeLink.setUserObject(item.getGuid()); + } } + peekviewVC.contextPut("items", items); + // Add link to show all items (go to node) + Link allItemsLink = LinkFactory.createLink("peekview.allItemsLink", peekviewVC, this); + allItemsLink.setIconRightCSS("o_icon o_icon_start"); + allItemsLink.setCustomEnabledLinkCSS("pull-right"); + // Add Formatter for proper date formatting + peekviewVC.contextPut("formatter", Formatter.getInstance(getLocale())); } - peekviewVC.contextPut("items", items); - // Add link to show all items (go to node) - Link allItemsLink = LinkFactory.createLink("peekview.allItemsLink", peekviewVC, this); - allItemsLink.setIconRightCSS("o_icon o_icon_start"); - allItemsLink.setCustomEnabledLinkCSS("pull-right"); - // Add Formatter for proper date formatting - peekviewVC.contextPut("formatter", Formatter.getInstance(getLocale())); putInitialPanel(peekviewVC); } diff --git a/src/main/java/org/olat/course/nodes/feed/_content/peekview.html b/src/main/java/org/olat/course/nodes/feed/_content/peekview.html index ca90c7c3c3f..37a90fdff8b 100644 --- a/src/main/java/org/olat/course/nodes/feed/_content/peekview.html +++ b/src/main/java/org/olat/course/nodes/feed/_content/peekview.html @@ -1,3 +1,6 @@ +#if($errorMessage) + <div class="o_error">$errorMessage</div> +#end <div class="o_feed_peekview $wrapperCssClass clearfix"> #foreach( $post in $items ) <div class="o_item"> @@ -10,5 +13,7 @@ $!helper.getItemDescriptionForBrowser($post) </div> #end +#if($r.available("peekview.allItemsLink")) $r.render("peekview.allItemsLink") +#end </div> \ No newline at end of file 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 a346215cc5d..f02641ff9b4 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 @@ -9,7 +9,7 @@ command.close=Vorschau schliessen condition.accessModerator.title=Moderieren condition.accessPoster.title=Lesen und Schreiben condition.accessReader.title=Nur Lesen - +peekview.error=$org.olat.modules.webFeed.ui:feed.error peekview.allItemsLink = Alle Ausgaben help.hover.feed.mo=Hilfe, um den moderierenden Zugang zu konfigurieren help.hover.feed.r=Hilfe, um den lesenden Zugang zu konfigurieren diff --git a/src/main/java/org/olat/modules/webFeed/_spring/webFeedContext.xml b/src/main/java/org/olat/modules/webFeed/_spring/webFeedContext.xml index 3f2299d1c57..50b7925f335 100644 --- a/src/main/java/org/olat/modules/webFeed/_spring/webFeedContext.xml +++ b/src/main/java/org/olat/modules/webFeed/_spring/webFeedContext.xml @@ -3,7 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> + http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="feedManager" class="org.olat.modules.webFeed.managers.FeedManagerImpl"> <constructor-arg index="0" ref="resourceManager"/> diff --git a/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java b/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java index a8fd512a364..d4f77ba0a9e 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java +++ b/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java @@ -21,7 +21,6 @@ package org.olat.modules.webFeed.ui; import java.util.List; -import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.form.flexible.elements.FileElement; @@ -50,6 +49,7 @@ import org.olat.modules.webFeed.models.Feed; import org.olat.modules.webFeed.models.Item; import org.olat.user.UserManager; import org.olat.util.logging.activity.LoggingResourceable; +import org.springframework.beans.factory.annotation.Autowired; /** * This is the main feed layout controller. It handles everything from adding @@ -62,7 +62,6 @@ import org.olat.util.logging.activity.LoggingResourceable; */ public class FeedMainController extends BasicController implements Activateable2, GenericEventListener { - private static final FeedManager feedManager = FeedManager.getInstance(); private Feed feed; private Link editFeedButton; private CloseableModalController cmc; @@ -77,7 +76,10 @@ public class FeedMainController extends BasicController implements Activateable2 // needed for comparison private String oldFeedUrl; - private final UserManager userManager; + @Autowired + private UserManager userManager; + @Autowired + private FeedManager feedManager; /** * Constructor for learning resource (not course nodes) @@ -107,15 +109,28 @@ public class FeedMainController extends BasicController implements Activateable2 super(ureq, wControl); this.uiFactory = uiFactory; this.callback = callback; - userManager = CoreSpringFactory.getImpl(UserManager.class); setTranslator(uiFactory.getTranslator()); feed = feedManager.getFeed(ores); - String authorFullname = userManager.getUserDisplayName(feed.getAuthor()); - helper = new FeedViewHelper(feed, getIdentity(), authorFullname, uiFactory.getTranslator(), courseId, nodeId, callback); - CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), feed); - display(ureq, wControl, displayConfig); - // do logging - ThreadLocalUserActivityLogger.log(FeedLoggingAction.FEED_READ, getClass(), LoggingResourceable.wrap(feed)); + if(feed == null) { + vcMain = createVelocityContainer("feed_error"); + vcMain.contextPut("errorMessage", translate("feed.error")); + putInitialPanel(vcMain); + } else { + String authorFullname = userManager.getUserDisplayName(feed.getAuthor()); + helper = new FeedViewHelper(feed, getIdentity(), authorFullname, uiFactory.getTranslator(), courseId, nodeId, callback); + CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), feed); + display(ureq, wControl, displayConfig); + // do logging + ThreadLocalUserActivityLogger.log(FeedLoggingAction.FEED_READ, getClass(), LoggingResourceable.wrap(feed)); + } + } + + @Override + protected void doDispose() { + feedManager.releaseLock(lock); + if(feed != null) { + CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, feed); + } } /** @@ -156,16 +171,7 @@ public class FeedMainController extends BasicController implements Activateable2 listenTo(itemsCtr); vcMain.put("items", itemsCtr.getInitialComponent()); - this.putInitialPanel(vcMain); - } - - /** - * @see org.olat.core.gui.control.DefaultController#doDispose() - */ - @Override - protected void doDispose() { - feedManager.releaseLock(lock); - CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, feed); + putInitialPanel(vcMain); } /** diff --git a/src/main/java/org/olat/modules/webFeed/ui/_content/feed_error.html b/src/main/java/org/olat/modules/webFeed/ui/_content/feed_error.html new file mode 100644 index 00000000000..5ee912b6b67 --- /dev/null +++ b/src/main/java/org/olat/modules/webFeed/ui/_content/feed_error.html @@ -0,0 +1,3 @@ +<div class="o_error"> + $errorMessage +</div> \ No newline at end of file diff --git a/src/main/java/org/olat/modules/webFeed/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/webFeed/ui/_i18n/LocalStrings_de.properties index 2af164dacdd..7f175723acd 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/webFeed/ui/_i18n/LocalStrings_de.properties @@ -34,4 +34,5 @@ feed.form.minutes.error = Die Minutenangabe ist ung\u00FCltig feed.item.confirm.delete = Wollen Sie diesen Eintrag wirklich l\u00F6schen? feed.item.is.being.edited.by = Der Eintrag wird bereits von {0} bearbeitet. feed.is.being.edited.by = Die Beschreibung wird bereits von {0} bearbeitet. -feed.link.more=weiterlesen \ No newline at end of file +feed.link.more=weiterlesen +feed.error=Leider ist ein unerwartete Fehler aufgetretten und der Feed konnte nicht dargestellt werden. \ No newline at end of file -- GitLab