diff --git a/src/main/java/org/olat/NewControllerFactory.java b/src/main/java/org/olat/NewControllerFactory.java index 3da37ec879219bab2608bb2080eea6756939c7d9..9a2960af31b21a8372fec375bdef115ac048e90f 100644 --- a/src/main/java/org/olat/NewControllerFactory.java +++ b/src/main/java/org/olat/NewControllerFactory.java @@ -159,12 +159,19 @@ public class NewControllerFactory extends LogDelegator { boolean ceConsumed = false; RepositoryEntry re = null; if (ores.getResourceableTypeName().equals(OresHelper.calculateTypeName(RepositoryEntry.class))) { - // It is a repository-entry => get OLATResourceable from RepositoryEntry - RepositoryManager repom = RepositoryManager.getInstance(); - re = repom.lookupRepositoryEntry(ores.getResourceableId()); - if (re != null){ + if(ores instanceof RepositoryEntry) { + re = (RepositoryEntry)ores; ores = re.getOlatResource(); ceConsumed = true; + } else { + // It is a repository-entry => get OLATResourceable from RepositoryEntry + RepositoryManager repom = RepositoryManager.getInstance(); + re = repom.lookupRepositoryEntry(ores.getResourceableId()); + if (re != null){ + ores = re.getOlatResource(); + ceConsumed = true; + mainCe.upgradeOLATResourceable(re); + } } } diff --git a/src/main/java/org/olat/core/id/context/BusinessControlFactory.java b/src/main/java/org/olat/core/id/context/BusinessControlFactory.java index af968d4205053cb9c4cea13b66732446c11ede42..ac9572086c8a53ea1fc8607eeffecdc67c1c1dc4 100644 --- a/src/main/java/org/olat/core/id/context/BusinessControlFactory.java +++ b/src/main/java/org/olat/core/id/context/BusinessControlFactory.java @@ -527,7 +527,7 @@ public class BusinessControlFactory { class MyContextEntry implements ContextEntry, Serializable { private static final long serialVersionUID = 949522581806327579L; - private final OLATResourceable olatResourceable; + private OLATResourceable olatResourceable; //fxdiff BAKS-7 Resume function private StateEntry state; @@ -542,7 +542,12 @@ class MyContextEntry implements ContextEntry, Serializable { public OLATResourceable getOLATResourceable() { return olatResourceable; } - + + @Override + public void upgradeOLATResourceable(OLATResourceable ores) { + olatResourceable = ores; + } + @Override //fxdiff BAKS-7 Resume function public StateEntry getTransientState() { diff --git a/src/main/java/org/olat/core/id/context/ContextEntry.java b/src/main/java/org/olat/core/id/context/ContextEntry.java index 99bdaaa9c70a4778c917bf18e1e9d068ba131843..dee24f0ad0927bbe03ff9de2bbc66a42482a6642 100644 --- a/src/main/java/org/olat/core/id/context/ContextEntry.java +++ b/src/main/java/org/olat/core/id/context/ContextEntry.java @@ -39,12 +39,18 @@ import org.olat.core.id.OLATResourceable; * @author Felix Jost */ public interface ContextEntry extends Cloneable { + public OLATResourceable getOLATResourceable(); + + /** + * Use it to replace an OresHelper generate resourceable with + * the real object. + * @param ores + */ + public void upgradeOLATResourceable(OLATResourceable ores); - //fxdiff BAKS-7 Resume function public StateEntry getTransientState(); - //fxdiff BAKS-7 Resume function public void setTransientState(StateEntry state); public ContextEntry clone(); diff --git a/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java b/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java index 2b550ec86e0ccebd30d14927d95bb0a72ba016cb..a3b2afbdea23f443f0efd432bf1aa8f2ad3a64c1 100644 --- a/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java +++ b/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java @@ -129,9 +129,13 @@ public class CourseSiteContextEntryControllerCreator extends DefaultContextEntry private RepositoryEntry getRepositoryEntry(ContextEntry ce) { if(repoEntry == null) { - OLATResourceable ores = ce.getOLATResourceable(); - RepositoryManager rm = RepositoryManager.getInstance(); - repoEntry = rm.lookupRepositoryEntry(ores.getResourceableId()); + if(ce.getOLATResourceable() instanceof RepositoryEntry) { + repoEntry = (RepositoryEntry)ce.getOLATResourceable(); + } else { + OLATResourceable ores = ce.getOLATResourceable(); + RepositoryManager rm = RepositoryManager.getInstance(); + repoEntry = rm.lookupRepositoryEntry(ores.getResourceableId()); + } } return repoEntry; } diff --git a/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java b/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java index 92307e0a92602d776e0a3c07b1b2f5b1eb92cbdd..aa600b1e7fb0e3618fac30ed0700252019c736f6 100644 --- a/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java +++ b/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java @@ -82,9 +82,13 @@ public class RepositoryContextEntryControllerCreator extends DefaultContextEntry private RepositoryEntry getRepositoryEntry(ContextEntry ce) { if(repoEntry == null) { - OLATResourceable ores = ce.getOLATResourceable(); - RepositoryManager rm = RepositoryManager.getInstance(); - repoEntry = rm.lookupRepositoryEntry(ores.getResourceableId()); + if(ce.getOLATResourceable() instanceof RepositoryEntry) { + repoEntry = (RepositoryEntry)ce.getOLATResourceable(); + } else { + OLATResourceable ores = ce.getOLATResourceable(); + RepositoryManager rm = RepositoryManager.getInstance(); + repoEntry = rm.lookupRepositoryEntry(ores.getResourceableId()); + } } return repoEntry; }