From 02d7bde371c2ae659f3d6653f35d63e12402de1c Mon Sep 17 00:00:00 2001 From: gnaegi <none@none> Date: Fri, 8 Apr 2016 11:35:12 +0200 Subject: [PATCH] OO-1976 implement activateable2 interface for single page nodes to load the page from the path --- .../singlepage/SinglePageController.java | 15 ++++++++++++++- .../iframe/IFrameDisplayController.java | 18 +++++++++++++++++- .../olat/course/nodes/sp/SPRunController.java | 15 ++++++++++++++- .../org/olat/course/run/RunMainController.java | 12 +++++++++++- 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java b/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java index 05275d806fb..ac7fb62fced 100644 --- a/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java +++ b/src/main/java/org/olat/core/commons/modules/singlepage/SinglePageController.java @@ -26,6 +26,8 @@ package org.olat.core.commons.modules.singlepage; +import java.util.List; + import org.olat.core.commons.controllers.linkchooser.CustomLinkTreeModel; import org.olat.core.commons.editor.htmleditor.WysiwygFactory; import org.olat.core.gui.UserRequest; @@ -41,12 +43,14 @@ 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.core.gui.control.generic.clone.CloneableController; +import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.gui.control.generic.iframe.IFrameDisplayController; import org.olat.core.gui.control.generic.iframe.NewIframeUriEvent; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.core.logging.activity.CoreLoggingResourceable; @@ -67,7 +71,7 @@ import org.olat.core.util.vfs.VFSContainer; * * @author gnaegi */ -public class SinglePageController extends BasicController implements CloneableController { +public class SinglePageController extends BasicController implements CloneableController, Activateable2 { private static final OLog log = Tracing.createLoggerFor(SinglePageController.class); @@ -168,6 +172,7 @@ public class SinglePageController extends BasicController implements CloneableCo } // adjust root folder if security does not allow using ../.. etc. + // *** IF YOU CHANGE THIS LOGIC, do also change it in SPCourseNodeIndexer! *** if (!allowRelativeLinks && !jumpIn) { // start uri is filename without relative path. // the relative path of the file is added to the vfs rootcontainer @@ -302,6 +307,14 @@ public class SinglePageController extends BasicController implements CloneableCo return new SinglePageController(ureq, control, g_rootContainer, g_fileName, g_allowRelativeLinks, frameId, null, deliveryOptions); } + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty() || idc == null) return; + // delegate to iframe controller + idc.activate(ureq, entries, state); + } + + /** * Set a scale factor to enlarge / shrink the entire page. This is handy when * a preview of a page should be displayed. diff --git a/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java b/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java index 146b055a13a..32a66a681f2 100644 --- a/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java +++ b/src/main/java/org/olat/core/gui/control/generic/iframe/IFrameDisplayController.java @@ -27,6 +27,7 @@ package org.olat.core.gui.control.generic.iframe; import java.io.File; +import java.util.List; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; @@ -39,9 +40,13 @@ 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.core.gui.control.generic.dtabs.Activateable2; import org.olat.core.gui.control.generic.textmarker.TextMarkerManagerImpl; import org.olat.core.gui.media.MediaResource; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.BusinessControlFactory; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.core.util.StringHelper; import org.olat.core.util.event.GenericEventListener; import org.olat.core.util.event.MultiUserEvent; @@ -60,7 +65,7 @@ import org.olat.core.util.vfs.VFSMediaResource; * * @author guido */ -public class IFrameDisplayController extends BasicController implements GenericEventListener { +public class IFrameDisplayController extends BasicController implements GenericEventListener, Activateable2 { private static final String NEW_URI_EVENT = "newUriEvent"; protected static final String FILE_SUFFIX_HTM = "htm"; protected static final String FILE_SUFFIX_JS = ".js"; @@ -433,4 +438,15 @@ public class IFrameDisplayController extends BasicController implements GenericE getWindowControl().getWindowBackOffice().removeCycleListener(this); } } + + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty()) return; + Long id = entries.get(0).getOLATResourceable().getResourceableId(); + if(id == 0) { + String path = BusinessControlFactory.getInstance().getPath(entries.get(0)); + changeCurrentURI(path, false); + } + } + } diff --git a/src/main/java/org/olat/course/nodes/sp/SPRunController.java b/src/main/java/org/olat/course/nodes/sp/SPRunController.java index 081e90966d7..a9080b46412 100644 --- a/src/main/java/org/olat/course/nodes/sp/SPRunController.java +++ b/src/main/java/org/olat/course/nodes/sp/SPRunController.java @@ -25,6 +25,7 @@ package org.olat.course.nodes.sp; +import java.util.List; import java.util.UUID; import org.olat.core.commons.controllers.linkchooser.CustomLinkTreeModel; @@ -44,9 +45,12 @@ import org.olat.core.gui.control.creator.ControllerCreator; import org.olat.core.gui.control.generic.clone.CloneController; import org.olat.core.gui.control.generic.clone.CloneLayoutControllerCreatorCallback; import org.olat.core.gui.control.generic.clone.CloneableController; +import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.core.gui.control.generic.iframe.DeliveryOptions; import org.olat.core.id.OLATResourceable; import org.olat.core.id.Roles; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.StateEntry; import org.olat.core.logging.AssertException; import org.olat.core.util.resource.OresHelper; import org.olat.core.util.vfs.VFSContainer; @@ -75,7 +79,7 @@ import org.springframework.beans.factory.annotation.Autowired; * * @author Felix Jost */ -public class SPRunController extends BasicController { +public class SPRunController extends BasicController implements Activateable2 { private SPCourseNode courseNode; private Panel main; @@ -233,6 +237,15 @@ public class SPRunController extends BasicController { } } + + @Override + public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { + if(entries == null || entries.isEmpty() || spCtr == null) return; + // delegate to single page controller + spCtr.activate(ureq, entries, state); + } + + /** * * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) diff --git a/src/main/java/org/olat/course/run/RunMainController.java b/src/main/java/org/olat/course/run/RunMainController.java index b1c3c6c58a7..1368902d409 100644 --- a/src/main/java/org/olat/course/run/RunMainController.java +++ b/src/main/java/org/olat/course/run/RunMainController.java @@ -833,11 +833,21 @@ public class RunMainController extends MainLayoutBasicController implements Gene if (cn != null) { addLoggingResourceable(LoggingResourceable.wrap(cn)); } - + // consume our entry if(entries.size() > 1) { entries = entries.subList(1, entries.size()); } updateTreeAndContent(ureq, cn, null, entries, firstEntry.getTransientState()); + } else if (currentCourseNode.equals(cn)) { + // consume our entry + if(entries.size() > 1) { + entries = entries.subList(1, entries.size()); + } + // the node to be activated is the one that is already on the screen + if (currentNodeController instanceof Activateable2) { + Activateable2 activateable = (Activateable2) currentNodeController; + activateable.activate(ureq, entries, state); + } } } } -- GitLab