diff --git a/src/main/java/de/bps/olat/portal/institution/InstitutionPortletRunController.java b/src/main/java/de/bps/olat/portal/institution/InstitutionPortletRunController.java index 92231b327f5209fc83fe56144b436d8ed9e29482..6c2d196923b457bbaf43c2e641d1797f5a5105f6 100644 --- a/src/main/java/de/bps/olat/portal/institution/InstitutionPortletRunController.java +++ b/src/main/java/de/bps/olat/portal/institution/InstitutionPortletRunController.java @@ -24,22 +24,17 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.olat.ControllerFactory; import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.Windows; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; import org.olat.core.gui.components.velocity.VelocityContainer; -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.controller.BasicController; -import org.olat.core.gui.control.generic.dtabs.DTab; -import org.olat.core.gui.control.generic.dtabs.DTabs; -import org.olat.core.id.OLATResourceable; import org.olat.core.id.UserConstants; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.logging.Tracing; import org.olat.core.util.StringHelper; import org.olat.repository.RepositoryEntry; @@ -181,19 +176,8 @@ public class InstitutionPortletRunController extends BasicController { if (!rm.isAllowedToLaunch(ureq, re)) { getWindowControl().setWarning(translate("warn.cantlaunch")); } else { - OLATResourceable ores = re.getOlatResource(); - DTabs dts = Windows.getWindows(ureq).getWindow(ureq).getDTabs(); - DTab dt = dts.getDTab(ores); - if (dt == null) { - // does not yet exist -> create and add - dt = dts.createDTab(ores, re, re.getDisplayname()); - if (dt == null) return; - Controller launchController = ControllerFactory.createLaunchController(ores, ureq, dt.getWindowControl(), true); - dt.setController(launchController); - dts.addDTab(ureq, dt); - } - dts.activate(ureq, dt, null); // null: do not activate a certain - // view + WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(getWindowControl(), re); + NewControllerFactory.getInstance().launch(ureq, bwControl); } } else { getWindowControl().setWarning(translate("warn.cantlaunch")); diff --git a/src/main/java/org/olat/ControllerFactory.java b/src/main/java/org/olat/ControllerFactory.java deleted file mode 100644 index 5417e53ffce3d8e8eb8727b6b8b49eabb6975b3b..0000000000000000000000000000000000000000 --- a/src/main/java/org/olat/ControllerFactory.java +++ /dev/null @@ -1,224 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -*/ - -package org.olat; - -import java.util.Locale; - -import org.olat.admin.SystemAdminMainController; -import org.olat.admin.UserAdminMainController; -import org.olat.core.CoreSpringFactory; -import org.olat.core.commons.chiefcontrollers.BaseChiefController; -import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.WindowControl; -import org.olat.core.gui.control.generic.layout.MainLayoutController; -import org.olat.core.gui.translator.Translator; -import org.olat.core.id.OLATResourceable; -import org.olat.core.id.Roles; -import org.olat.core.logging.AssertException; -import org.olat.core.logging.OLATSecurityException; -import org.olat.core.util.Util; -import org.olat.core.util.resource.OresHelper; -import org.olat.course.CourseModule; -import org.olat.course.assessment.AssessmentManager; -import org.olat.course.nodes.ta.DropboxController; -import org.olat.course.nodes.ta.ReturnboxController; -import org.olat.group.BusinessGroup; -import org.olat.group.BusinessGroupService; -import org.olat.group.ui.BGControllerFactory; -import org.olat.gui.demo.GUIDemoMainController; -import org.olat.home.HomeMainController; -import org.olat.home.InviteeHomeMainController; -import org.olat.repository.RepositoryEntry; -import org.olat.repository.RepositoryManager; -import org.olat.repository.RepositoyUIFactory; - - -/** - * Initial Date: May 6, 2004 - * @author gnaegi - */ -public class ControllerFactory { - /** - * Create a controller for a specific OLAT resource - * - * @param olatResourceable The OLAT resource - * @param initialViewIdentifier if null the default view will be started, - * otherwise a controllerfactory type dependant view will be - * activated (subscription subtype) - * @param ureq - * @param wControl - * @param exceptIfNoneFound if true, then an exception will be thrown if no - * controller could be created for whatever reason. if false, the - * call will just return null. - * @return the created controller - */ - public static MainLayoutController createLaunchController(OLATResourceable olatResourceable, UserRequest ureq, - WindowControl wControl, boolean exceptIfNoneFound) { - Roles roles = ureq.getUserSession().getRoles(); - if (olatResourceable == null) { - // special case after login: guest will get guesthome, other user the - // normal home - if (ureq.getUserSession().getRoles().isGuestOnly()) return new HomeMainController(ureq, wControl); - - } else if (OresHelper.isOfType(olatResourceable, "BGMainController")) { - if (roles.isGuestOnly()) throw new OLATSecurityException("Tried to launch a GroupMainController, but is in guest group " + roles); - return BGControllerFactory.getInstance().createGroupMainController(ureq, wControl); - - } else if (OresHelper.isOfType(olatResourceable, BusinessGroup.class)) { - if (roles.isGuestOnly()) throw new OLATSecurityException("Tried to launch a BusinessGroup, but is in guest group " + roles); - BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class); - BusinessGroup bg = bgs.loadBusinessGroup(olatResourceable.getResourceableId()); - // check if allowed to start (must be member or admin) - if (ureq.getUserSession().getRoles().isOLATAdmin() || ureq.getUserSession().getRoles().isGroupManager() - || bgs.isIdentityInBusinessGroup(ureq.getIdentity(), bg)) { - // only olatadmins or admins of this group can administer this group - return BGControllerFactory.getInstance().createRunControllerFor(ureq, wControl, bg); - } - // else skip - - } else if (OresHelper.isOfType(olatResourceable, RepositoryEntry.class)) { - // it this is a respository type, the resourceableID is the repository - // entry key - RepositoryManager rm = RepositoryManager.getInstance(); - RepositoryEntry re = rm.lookupRepositoryEntry(olatResourceable.getResourceableId()); - MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl); - if (ctrl != null) return ctrl; - - } else if (OresHelper.isOfType(olatResourceable, CourseModule.class)) { - // gets called by subscription launcher - //FIXME:fj:make it clearer here: subscriptioncontext is always given by - // the surrounding resource, but for launching we always need the - // repoentry - // if it is a course, we also take the repository entry, since a course - // can only be called by a repoentry - RepositoryManager rm = RepositoryManager.getInstance(); - RepositoryEntry re = rm.lookupRepositoryEntry(olatResourceable, false); - MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl); - if (ctrl != null) return ctrl; - } else if (OresHelper.isOfType(olatResourceable, AssessmentManager.class)) { - // gets called by subscription launcher - //FIXME:fj:make it clearer here: subscriptioncontext is always given by - // the surrounding resource, but for launching we always need the - // repoentry - // if it is a course, we also take the repository entry, since a course - // can only be called by a repoentry - RepositoryManager rm = RepositoryManager.getInstance(); - // launch course with view identifyer assessment tool. however notifications - // publisher data provides not existing assessmentManager resource - OLATResourceable fakedCourseResource = OresHelper.createOLATResourceableInstance(CourseModule.class, olatResourceable.getResourceableId()); - RepositoryEntry re = rm.lookupRepositoryEntry(fakedCourseResource, false); - MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl); - if (ctrl != null) { - //TODO "assessmentTool" - return ctrl; - } - } else if (OresHelper.isOfType(olatResourceable, DropboxController.class)) { - // JumpIn-handling for task-dropbox notification - RepositoryManager rm = RepositoryManager.getInstance(); - OLATResourceable fakedCourseResource = OresHelper.createOLATResourceableInstance(CourseModule.class, olatResourceable.getResourceableId()); - RepositoryEntry re = rm.lookupRepositoryEntry(fakedCourseResource,false); - if (re == null) { - return null;// found no repositoryEntry => return null - } - MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl); - if (ctrl != null) { - //TODO "assessmentTool:nodeChoose" - return ctrl; - } - } else if (OresHelper.isOfType(olatResourceable, ReturnboxController.class)) { - // JumpIn-handling for task-returnbox notification - RepositoryManager rm = RepositoryManager.getInstance(); - OLATResourceable fakedCourseResource = OresHelper.createOLATResourceableInstance(CourseModule.class, olatResourceable.getResourceableId()); - RepositoryEntry re = rm.lookupRepositoryEntry(fakedCourseResource, false); - MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl); - if (ctrl != null) return ctrl; - } - // --- home --- - else if (OresHelper.isOfType(olatResourceable, HomeMainController.class)) { - return new HomeMainController(ureq, wControl); - } else if (OresHelper.isOfType(olatResourceable, SystemAdminMainController.class)) { - if (!roles.isOLATAdmin()) throw new OLATSecurityException("Tried to launch a SystemAdminMainController, but is not in admin group " + roles); - return new SystemAdminMainController(ureq, wControl); - } else if (OresHelper.isOfType(olatResourceable, UserAdminMainController.class)) { - if (!roles.isUserManager()) throw new OLATSecurityException("Tried to launch a UserAdminMainController, but is not in admin group " + roles); - return new UserAdminMainController(ureq, wControl); - } else if (OresHelper.isOfType(olatResourceable, InviteeHomeMainController.class)) { - if (!roles.isInvitee()) throw new OLATSecurityException("Tried to launch a InviteeMainController, but is not an invitee " + roles); - return new InviteeHomeMainController(ureq, wControl); - } else if (OresHelper.isOfType(olatResourceable, GUIDemoMainController.class)) { - if (!roles.isOLATAdmin()) throw new OLATSecurityException("Tried to launch a GUIDemoMainController, but is not in admin group " - + roles); - return new GUIDemoMainController(ureq, wControl); - } else { // ask the handlerfactory of the repository if it can handle it - // a repository entry ? - RepositoryManager rm = RepositoryManager.getInstance(); - //OLAT-1842 - //if the LaunchController is created from a link click in a - //notification list/email then we cannot be strict in the repoentry lookup. - //Because the notification can live longer then the resource it is pointing to. - RepositoryEntry re = rm.lookupRepositoryEntry(olatResourceable, false); - //but now we have to handle the NULL case. - //from the method signature it follows that one can choose if the method - //should throw the "Unable to creat..." exception or to return null. - //Hence it follows to set the ctrl == null if no repoentry found. - MainLayoutController ctrl; - if(re == null){ - ctrl = null; - } else { - ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl); - } - if (ctrl != null) return ctrl; - } - - if (exceptIfNoneFound) { - throw new AssertException("Unable to create launch controller for resourceable: " + olatResourceable.getResourceableTypeName() + ", " - + olatResourceable.getResourceableId()); - } else { - return null; - } - } - - /** - * Translate a resourceableTypeName. - * - * @param resourceableTypeName - * @param locale - * @return the String representing the type in the given locale - */ - public static String translateResourceableTypeName(String resourceableTypeName, Locale locale) { - //REVIEW:12-2007:CodeCleanup - //TODO: cache per locale?? -> Task for i18n manager - Translator trans = Util.createPackageTranslator(BaseChiefController.class, locale); - String tr = trans.translate(resourceableTypeName); - return tr; - //REVIEW:12-2007:CodeCleanup - //Localization.getInstance().getString("org.olat", resourceableTypeName, null, locale); - } - - - - -} \ No newline at end of file diff --git a/src/main/java/org/olat/NewControllerFactory.java b/src/main/java/org/olat/NewControllerFactory.java index fbaa4fe36db2f1f2ba65f849fb1da560753e7e91..24950097886a82197284a4ff68b3bdee17a7587e 100644 --- a/src/main/java/org/olat/NewControllerFactory.java +++ b/src/main/java/org/olat/NewControllerFactory.java @@ -31,8 +31,10 @@ package org.olat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; +import org.olat.core.commons.chiefcontrollers.BaseChiefController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.Windows; import org.olat.core.gui.components.Window; @@ -40,6 +42,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.dtabs.DTab; import org.olat.core.gui.control.generic.dtabs.DTabs; +import org.olat.core.gui.translator.Translator; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.BusinessControlFactory; @@ -49,6 +52,7 @@ import org.olat.core.id.context.TabContext; import org.olat.core.logging.AssertException; import org.olat.core.logging.LogDelegator; import org.olat.core.util.UserSession; +import org.olat.core.util.Util; import org.olat.core.util.resource.OresHelper; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; @@ -83,6 +87,11 @@ public class NewControllerFactory extends LogDelegator { private NewControllerFactory() { // } + + public static String translateResourceableTypeName(String resourceableTypeName, Locale locale) { + Translator trans = Util.createPackageTranslator(BaseChiefController.class, locale); + return trans.translate(resourceableTypeName); + } /** * Add a context entry controller creator for a specific key. This is used to @@ -204,40 +213,24 @@ public class NewControllerFactory extends LogDelegator { //simply return and don't throw a red screen return false; } + + List<ContextEntry> entries = new ArrayList<ContextEntry>(5); + while(bc.hasContextEntry()) { + entries.add(bc.popLauncherContextEntry()); + } + List<ContextEntry> ces = new ArrayList<ContextEntry>(entries.size() + 1); + ces.add(mainCe); + if(entries.size() > 0) { + ces.addAll(entries); + } - //fxdiff BAKS-7 Resume function - String siteClassName = typeHandler.getSiteClassName(mainCe, ureq); - + TabContext context = typeHandler.getTabContext(ureq, ores, mainCe, entries); + String siteClassName = typeHandler.getSiteClassName(ces, ureq); // open in existing site if (siteClassName != null) { - // use special activation key to trigger the activate method - //fxdiff BAKS-7 Resume function - List<ContextEntry> entries = new ArrayList<ContextEntry>(); - if (bc.hasContextEntry()) { - ContextEntry subContext = bc.popLauncherContextEntry(); - if (subContext != null) { - entries.add(subContext); - while(bc.hasContextEntry()) { - entries.add(bc.popLauncherContextEntry()); - } - } - } else if (!ceConsumed) { - //the olatresourceable is not in a dynamic tab but in a fix one - if(ores != null) { - entries.add(BusinessControlFactory.getInstance().createContextEntry(ores)); - } - } - - TabContext context = typeHandler.getTabContext(ureq, ores, mainCe, entries); dts.activateStatic(ureq, siteClassName, context.getContext()); return true; } else { - List<ContextEntry> entries = new ArrayList<ContextEntry>(); - while(bc.hasContextEntry()) { - entries.add(bc.popLauncherContextEntry()); - } - TabContext context = typeHandler.getTabContext(ureq, ores, mainCe, entries); - // or create new tab //String tabName = typeHandler.getTabName(mainCe, ureq); // create and add Tab @@ -248,7 +241,8 @@ public class NewControllerFactory extends LogDelegator { } else { WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, dt.getWindowControl()); usess.addToHistory(ureq, bc); - Controller launchC = typeHandler.createController(mainCe, ureq, bwControl); + + Controller launchC = typeHandler.createController(ces, ureq, bwControl); if (launchC == null) { throw new AssertException("ControllerFactory could not create a controller to be launched. Please validate businesspath " + bc.getAsString() + " for type " + typeHandler.getClass().getName() + " in advance with validateContextEntryAndShowError()."); diff --git a/src/main/java/org/olat/admin/site/AdminSite.java b/src/main/java/org/olat/admin/site/AdminSite.java index 5088934e3a2d81c78d5656c1d6b8383456f5323c..ad149779d213b316f34d1523ad0cea3d51394d57 100644 --- a/src/main/java/org/olat/admin/site/AdminSite.java +++ b/src/main/java/org/olat/admin/site/AdminSite.java @@ -27,7 +27,6 @@ package org.olat.admin.site; import java.util.Locale; -import org.olat.ControllerFactory; import org.olat.admin.SystemAdminMainController; import org.olat.core.commons.chiefcontrollers.BaseChiefController; import org.olat.core.gui.UserRequest; @@ -48,7 +47,7 @@ import org.olat.core.util.resource.OresHelper; import org.olat.util.logging.activity.LoggingResourceable; /** * Description:<br> - * TODO: Felix Jost Class Description for HomeSite + * Create the administration site * * <P> * Initial Date: 19.07.2005 <br> @@ -56,8 +55,6 @@ import org.olat.util.logging.activity.LoggingResourceable; * @author Felix Jost */ public class AdminSite extends AbstractSiteInstance { - private static final OLATResourceable ORES_OLATADMINS = OresHelper.lookupType(SystemAdminMainController.class); - private NavElement origNavElem; private NavElement curNavElem; @@ -68,9 +65,7 @@ public class AdminSite extends AbstractSiteInstance { curNavElem = new DefaultNavElement(origNavElem); } - /** - * @see org.olat.navigation.SiteInstance#getNavElement() - */ + @Override public NavElement getNavElement() { return curNavElem; } @@ -80,20 +75,16 @@ public class AdminSite extends AbstractSiteInstance { OLATResourceable ores = OresHelper.createOLATResourceableInstance(AdminSite.class, 0l); ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores)); WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ureq, ores, new StateSite(this), wControl, true); - MainLayoutController c = ControllerFactory.createLaunchController(ORES_OLATADMINS, ureq, bwControl, true); - return c; + return new SystemAdminMainController(ureq, bwControl); } - /** - * @see org.olat.navigation.SiteInstance#isKeepState() - */ + @Override public boolean isKeepState() { return true; } - + + @Override public void reset() { curNavElem = new DefaultNavElement(origNavElem); } - -} - +} \ No newline at end of file diff --git a/src/main/java/org/olat/admin/site/UserAdminSite.java b/src/main/java/org/olat/admin/site/UserAdminSite.java index 3736794820fd4144ddc8839bdfd1b25f2b1c46fc..3f6fd81e9af5d1b4b552c0919637c792fe04256b 100644 --- a/src/main/java/org/olat/admin/site/UserAdminSite.java +++ b/src/main/java/org/olat/admin/site/UserAdminSite.java @@ -27,7 +27,6 @@ package org.olat.admin.site; import java.util.Locale; -import org.olat.ControllerFactory; import org.olat.admin.UserAdminMainController; import org.olat.core.commons.chiefcontrollers.BaseChiefController; import org.olat.core.gui.UserRequest; @@ -49,11 +48,8 @@ import org.olat.util.logging.activity.LoggingResourceable; /** * Initial Date: Jan 16, 2006 * @author Florian Gnaegi - * </pre> */ public class UserAdminSite extends AbstractSiteInstance { - private static final OLATResourceable ORES_OLATUSERADMINS = OresHelper.lookupType(UserAdminMainController.class); - private NavElement origNavElem; private NavElement curNavElem; @@ -64,9 +60,7 @@ public class UserAdminSite extends AbstractSiteInstance { curNavElem = new DefaultNavElement(origNavElem); } - /** - * @see org.olat.navigation.SiteInstance#getNavElement() - */ + @Override public NavElement getNavElement() { return curNavElem; } @@ -76,17 +70,15 @@ public class UserAdminSite extends AbstractSiteInstance { OLATResourceable ores = OresHelper.createOLATResourceableInstance(UserAdminSite.class, 0l); ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores)); WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ureq, ores, new StateSite(this), wControl, true); - MainLayoutController c = ControllerFactory.createLaunchController(ORES_OLATUSERADMINS, ureq, bwControl, true); - return c; + return new UserAdminMainController(ureq, bwControl); } - /** - * @see org.olat.navigation.SiteInstance#isKeepState() - */ + @Override public boolean isKeepState() { return true; } - + + @Override public void reset() { curNavElem = new DefaultNavElement(origNavElem); } diff --git a/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java b/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java index cbf841de28d7f7720eda6e2b01ef152c9f57d128..8b8fc95ca41b9842e17f750c5d56e9110164ab2a 100644 --- a/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java +++ b/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java @@ -19,10 +19,10 @@ */ package org.olat.admin.user; +import java.util.List; + import org.olat.admin.site.UserAdminSite; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.Controller; -import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntryControllerCreator; import org.olat.core.id.context.DefaultContextEntryControllerCreator; @@ -43,35 +43,9 @@ public class UserAdminContextEntryControllerCreator extends DefaultContextEntryC return this; } - /** - * @see org.olat.core.id.context.ContextEntryControllerCreator#createController(org.olat.core.id.context.ContextEntry, - * org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.WindowControl) - */ @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return null; - } - - /** - * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry) - */ - @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { // opened as site not tab return UserAdminSite.class.getName(); } - - /** - * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry) - */ - @Override - public String getTabName(ContextEntry ce, UserRequest ureq) { - return null; - } - - @Override - public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return true; - } } diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java index a7492c8dadf360297383642718da0c2bdf58f4ce..af94f9a87741822a53b2eb636b32b432b28eada4 100644 --- a/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java +++ b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java @@ -32,7 +32,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import org.olat.ControllerFactory; import org.olat.NewControllerFactory; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.services.mark.Mark; @@ -205,7 +204,7 @@ public class BookmarksController extends BasicController { return getBookmarkTitle(bm); case 1: String resType = bm.getDisplayrestype(); - return (resType == null ? "n/a" : ControllerFactory.translateResourceableTypeName(resType, locale)); + return (resType == null ? "n/a" : NewControllerFactory.translateResourceableTypeName(resType, locale)); case 2: String desc = bm.getDescription(); return (desc == null ? "n/a" : desc); diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java index db0860a1029c0b692475b3939ca5ac8b7e827a14..2fa864fe430d4cf1ba765d10cced8a346e3cd2ab 100644 --- a/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java +++ b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java @@ -34,7 +34,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import org.olat.ControllerFactory; import org.olat.NewControllerFactory; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.services.mark.Mark; @@ -323,7 +322,7 @@ public class BookmarksPortletRunController extends AbstractPortletRunController< return name; case 1: String resType = bookmark.getDisplayrestype(); - return ControllerFactory.translateResourceableTypeName(resType, locale); + return NewControllerFactory.translateResourceableTypeName(resType, locale); default: return "ERROR"; } @@ -379,7 +378,7 @@ public class BookmarksPortletRunController extends AbstractPortletRunController< return (desc == null ? "n/a" : FilterFactory.getHtmlTagsFilter().filter(desc)); case 2: String resType = bm.getDisplayrestype(); - return (resType == null ? "n/a" : ControllerFactory.translateResourceableTypeName(resType, locale)); + return (resType == null ? "n/a" : NewControllerFactory.translateResourceableTypeName(resType, locale)); case 3: Date date = bm.getCreationDate(); //return DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, getTranslator().getLocale()).format(date); diff --git a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java index cde91316c0e6c75c5b51329a7d66835bde421f17..de0c418bbec358088fd2ce120fcb789cf9247285 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java +++ b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java @@ -43,7 +43,7 @@ import javax.persistence.LockModeType; import javax.persistence.TypedQuery; import org.hibernate.FlushMode; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.basesecurity.BaseSecurity; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.persistence.DB; @@ -1041,7 +1041,7 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us private String getFormatedTitle(SubscriptionInfo subsInfo, Subscriber subscriber, Locale locale, String mimeType){ Publisher pub = subscriber.getPublisher(); String innerType = pub.getType(); - String typeName = ControllerFactory.translateResourceableTypeName(innerType, locale); + String typeName = NewControllerFactory.translateResourceableTypeName(innerType, locale); StringBuilder titleSb = new StringBuilder(); titleSb.append(typeName); diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/DateChooserController.java b/src/main/java/org/olat/core/commons/services/notifications/ui/DateChooserController.java index ee7a27a712f435b8b5d1b64689aadb62b266779f..c96d5595edcfdd1889f505f6b6fb793ad5e3dad6 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/ui/DateChooserController.java +++ b/src/main/java/org/olat/core/commons/services/notifications/ui/DateChooserController.java @@ -24,7 +24,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.core.commons.services.notifications.Subscriber; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; @@ -176,7 +176,7 @@ public class DateChooserController extends FormBasicController { int count = 1; for(String type:types) { - String typeName = ControllerFactory.translateResourceableTypeName(type, getLocale()); + String typeName = NewControllerFactory.translateResourceableTypeName(type, getLocale()); typeKeys[count] = type; typeValues[count++] = typeName; } diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsFormatter.java b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsFormatter.java index 9a078129e250f60e21b2d826ce84bbd6648c1f9f..80ddbd7a46b13ffe4e361de5aed08892f475adfc 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsFormatter.java +++ b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsFormatter.java @@ -26,7 +26,7 @@ package org.olat.core.commons.services.notifications.ui; import java.util.Map; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.core.commons.services.notifications.NotificationsManager; import org.olat.core.commons.services.notifications.Publisher; import org.olat.core.commons.services.notifications.Subscriber; @@ -57,15 +57,13 @@ public class NotificationSubscriptionAndNewsFormatter { public String getType(Subscriber sub) { Publisher pub = sub.getPublisher(); String innerType = pub.getType(); - String typeName = ControllerFactory.translateResourceableTypeName(innerType, translator.getLocale()); - return typeName; + return NewControllerFactory.translateResourceableTypeName(innerType, translator.getLocale()); } public String getContainerType(Subscriber sub) { Publisher pub = sub.getPublisher(); String containerType = pub.getResName(); - String containerTypeTrans = ControllerFactory.translateResourceableTypeName(containerType, translator.getLocale()); - return containerTypeTrans; + return NewControllerFactory.translateResourceableTypeName(containerType, translator.getLocale()); } public boolean hasNews(Subscriber sub) { diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java index 928265d387a6da43de4cf3ef17d0295737920541..7ee74ef1e66ec1b6c0f78a999d8835957e7d1861 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java +++ b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java @@ -19,7 +19,7 @@ */ package org.olat.core.commons.services.notifications.ui; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.core.commons.services.notifications.NotificationsHandler; import org.olat.core.commons.services.notifications.NotificationsManager; import org.olat.core.commons.services.notifications.Publisher; @@ -82,12 +82,10 @@ class NotificationSubscriptionTableDataModel extends DefaultTableDataModel<Subsc switch (col) { case 0: String innerType = pub.getType(); - String typeName = ControllerFactory.translateResourceableTypeName(innerType, getLocale()); - return typeName; + return NewControllerFactory.translateResourceableTypeName(innerType, getLocale()); case 1: String containerType = pub.getResName(); - String containerTypeTrans = ControllerFactory.translateResourceableTypeName(containerType, getLocale()); - return containerTypeTrans; + return NewControllerFactory.translateResourceableTypeName(containerType, getLocale()); case 2: NotificationsHandler handler = NotificationsManager.getInstance().getNotificationsHandler(pub); if(handler == null){ diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationsPortletRunController.java b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationsPortletRunController.java index 24ef05c58682c82102968b44dd52d978d5badc34..6e6e8079ca93300777b3ab717a2875a493d797ca 100644 --- a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationsPortletRunController.java +++ b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationsPortletRunController.java @@ -33,7 +33,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import org.olat.ControllerFactory; import org.olat.NewControllerFactory; import org.olat.core.commons.services.notifications.NotificationHelper; import org.olat.core.commons.services.notifications.NotificationUIFactory; @@ -296,8 +295,8 @@ public class NotificationsPortletRunController extends AbstractPortletRunControl } else if(sortingCriteria.getSortingTerm()==SortingCriteria.DATE_SORTING) { comparisonResult = subscriber1.getLastModified().compareTo(subscriber1.getLastModified()); } else if(sortingCriteria.getSortingTerm()==SortingCriteria.TYPE_SORTING) { - String type1 = ControllerFactory.translateResourceableTypeName(subscriber1.getPublisher().getType(), getTranslator().getLocale()); - String type2 = ControllerFactory.translateResourceableTypeName(subscriber2.getPublisher().getType(), getTranslator().getLocale()); + String type1 = NewControllerFactory.translateResourceableTypeName(subscriber1.getPublisher().getType(), getTranslator().getLocale()); + String type2 = NewControllerFactory.translateResourceableTypeName(subscriber2.getPublisher().getType(), getTranslator().getLocale()); comparisonResult = type1.compareTo(type2); } if(!sortingCriteria.isAscending()) { @@ -345,8 +344,7 @@ public class NotificationsPortletRunController extends AbstractPortletRunControl return ""; case 1: String innerType = pub.getType(); - String typeName = ControllerFactory.translateResourceableTypeName(innerType, locale); - return typeName; + return NewControllerFactory.translateResourceableTypeName(innerType, locale); default: return "ERROR"; } @@ -399,8 +397,7 @@ public class NotificationsPortletRunController extends AbstractPortletRunControl } case 2: String innerType = pub.getType(); - String typeName = ControllerFactory.translateResourceableTypeName(innerType, locale); - return typeName; + return NewControllerFactory.translateResourceableTypeName(innerType, locale); default: return "error"; } 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 ac9572086c8a53ea1fc8607eeffecdc67c1c1dc4..c25e329d9672a88ab7be131be04a0212f1b5ce15 100644 --- a/src/main/java/org/olat/core/id/context/BusinessControlFactory.java +++ b/src/main/java/org/olat/core/id/context/BusinessControlFactory.java @@ -222,6 +222,20 @@ public class BusinessControlFactory { return wc; } + public WindowControl createBusinessWindowControl(WindowControl origWControl, OLATResourceable... ores) { + List<ContextEntry> ces; + if(ores != null && ores.length > 0) { + ces = new ArrayList<ContextEntry>(ores.length); + for(OLATResourceable o:ores) { + ces.add(createContextEntry(o)); + } + } else { + ces = Collections.emptyList(); + } + BusinessControl bc = createFromContextEntries(ces); + return createBusinessWindowControl(bc, origWControl); + } + public BusinessControl getEmptyBusinessControl() { // immutable, so therefore we can reuse it return EMPTY; diff --git a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java index e654a7fa65f4d485f698d1807e9e72dd91f79c4b..90f4dd40d23812b35a9e96c62539187bc00e7ef8 100644 --- a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java +++ b/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java @@ -69,7 +69,7 @@ public interface ContextEntryControllerCreator { * @param wControl * @return the controller or NULL if the context is an existing site */ - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl); + public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl); /** * The class name of the site that must be activated or NULL if opened as dTab @@ -78,7 +78,7 @@ public interface ContextEntryControllerCreator { * @return Return the class name that is used to activate an existing site or * NULL if the target is a new dtab */ - public String getSiteClassName(ContextEntry ce, UserRequest ureq); + public String getSiteClassName(List<ContextEntry> entries, UserRequest ureq); /** * diff --git a/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java index a3f3b4038b38ea8c55ac6869eae8f5e8aac57ad6..bf45fde82593fce876e4358518fc2327b4170f2d 100644 --- a/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java +++ b/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java @@ -37,16 +37,17 @@ public abstract class DefaultContextEntryControllerCreator implements ContextEnt public abstract ContextEntryControllerCreator clone(); @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) { return null; } + @SuppressWarnings("unused") public String getTabName(ContextEntry ce, UserRequest ureq) { return null; } @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { return null; } diff --git a/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java index 1944c1c7c723767dad0f154138f726eb2566e691..231766646ff0e5525424ed6039b9247979a4f441 100644 --- a/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java +++ b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java @@ -20,9 +20,9 @@ package org.olat.core.id.context; +import java.util.List; + import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.Controller; -import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.navigation.SiteInstance; /** @@ -46,22 +46,8 @@ public class SiteContextEntryControllerCreator extends DefaultContextEntryContro return this; } - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return null; - } - @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { return site.getName(); } - - @Override - public String getTabName(ContextEntry ce, UserRequest ureq) { - return null; - } - - @Override - public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return true; - } } diff --git a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java index 2c209dfefe194f3c0911a3ddf5c4c43ff8023c16..aadae012c7fa84aab3b417017bfc6db46151d398 100644 --- a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java +++ b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java @@ -27,7 +27,6 @@ import java.util.Locale; import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.Identity; import org.olat.core.id.context.BusinessControl; @@ -157,24 +156,8 @@ public class MailBoxExtension extends BasicManager implements MailContextResolve } @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return null; - } - - @Override - public String getTabName(ContextEntry ce, UserRequest ureq) { - // opens in home-tab - return null; - } - - @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { return HomeSite.class.getName(); } - - @Override - public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return true; - } } } diff --git a/src/main/java/org/olat/course/CourseModule.java b/src/main/java/org/olat/course/CourseModule.java index 63c91b266c9788eb8fc9ac9717acedfa3483f849..2d9a10b544a66b93cb1112039567624a6e0f9cd7 100644 --- a/src/main/java/org/olat/course/CourseModule.java +++ b/src/main/java/org/olat/course/CourseModule.java @@ -31,7 +31,6 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import org.olat.NewControllerFactory; import org.olat.core.commons.persistence.DBFactory; import org.olat.core.commons.services.notifications.SubscriptionContext; import org.olat.core.configuration.AbstractOLATModule; @@ -47,7 +46,6 @@ import org.olat.core.util.resource.OresHelper; import org.olat.course.assessment.AssessmentManager; import org.olat.course.nodes.CourseNode; import org.olat.course.run.environment.CourseEnvironment; -import org.olat.course.site.CourseSiteContextEntryControllerCreator; import org.olat.properties.Property; import org.olat.properties.PropertyManager; import org.olat.repository.RepositoryEntry; @@ -146,9 +144,6 @@ public class CourseModule extends AbstractOLATModule { // skip all the expensive course demo setup and deployment when we are in junit mode. if (Settings.isJUnitTest()) return; - NewControllerFactory.getInstance().addContextEntryControllerCreator(RepositoryEntry.class.getSimpleName(), - new CourseSiteContextEntryControllerCreator()); - logInfo("Initializing the OpenOLAT course system"); // Cleanup, otherwise this subjects will have problems in normal OLAT diff --git a/src/main/java/org/olat/course/DisposedCourseRestartController.java b/src/main/java/org/olat/course/DisposedCourseRestartController.java index 5f159096792ee88e24ffb9f26529bc9800d68068..bfbefee4953fdc3acfb93d1ddb691a6515ca687d 100644 --- a/src/main/java/org/olat/course/DisposedCourseRestartController.java +++ b/src/main/java/org/olat/course/DisposedCourseRestartController.java @@ -24,22 +24,20 @@ */ package org.olat.course; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; import org.olat.core.gui.components.panel.StackedPanel; import org.olat.core.gui.components.velocity.VelocityContainer; -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.controller.BasicController; -import org.olat.core.gui.control.generic.dtabs.DTab; -import org.olat.core.gui.control.generic.dtabs.DTabs; import org.olat.core.gui.control.generic.messages.MessageController; import org.olat.core.gui.control.generic.messages.MessageUIFactory; import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.repository.RepositoryEntry; import org.olat.resource.OLATResourceManager; @@ -83,34 +81,23 @@ public class DisposedCourseRestartController extends BasicController { @Override protected void event(UserRequest ureq, Component source, Event event) { if (source == restartLink) { - DTabs dts = getWindowControl().getWindowBackOffice().getWindow().getDTabs(); OLATResourceable ores = OLATResourceManager.getInstance().findResourceable( - courseRepositoryEntry.getOlatResource().getResourceableId(), courseRepositoryEntry.getOlatResource().getResourceableTypeName()); + courseRepositoryEntry.getOlatResource().getResourceableId(), + courseRepositoryEntry.getOlatResource().getResourceableTypeName()); if(ores==null) { //course was deleted! MessageController msgController = MessageUIFactory.createInfoMessage(ureq, this.getWindowControl(), translate("course.deleted.title"), translate("course.deleted.text")); panel.setContent(msgController.getInitialComponent()); return; } - DTab dt = dts.getDTab(ores); - // remove and dispose "old course run" - dts.removeDTab(ureq, dt);//disposes also dt and controllers - /* - * create new tab with "refreshed course run" and activate the course - */ - //fxdiff BAKS-7 Resume function - dt = dts.createDTab(ores, courseRepositoryEntry, courseRepositoryEntry.getDisplayname()); - if (dt == null) return; // full tabs -> warning already set by - // dts.create... - Controller launchController = ControllerFactory.createLaunchController(ores, ureq, dt.getWindowControl(), true); - dt.setController(launchController); - dts.addDTab(ureq, dt); - dts.activate(ureq, dt, null); + + WindowControl bwControl = BusinessControlFactory.getInstance() + .createBusinessWindowControl(getWindowControl(), courseRepositoryEntry); + NewControllerFactory.getInstance().launch(ureq, bwControl); /* * last but not least dispose myself - to clean up. */ dispose(); } } - } diff --git a/src/main/java/org/olat/course/assessment/EfficiencyStatementsListController.java b/src/main/java/org/olat/course/assessment/EfficiencyStatementsListController.java index cee86d9794068e38e18b9a67510dda3cce6f9e9b..b421434e41d9e459c941053ffd42de5d6d3f0039 100644 --- a/src/main/java/org/olat/course/assessment/EfficiencyStatementsListController.java +++ b/src/main/java/org/olat/course/assessment/EfficiencyStatementsListController.java @@ -29,12 +29,11 @@ import java.util.Date; import java.util.List; import java.util.Locale; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.Windows; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.table.BooleanColumnDescriptor; import org.olat.core.gui.components.table.ColumnDescriptor; @@ -51,14 +50,12 @@ 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.creator.ControllerCreator; -import org.olat.core.gui.control.generic.dtabs.DTab; -import org.olat.core.gui.control.generic.dtabs.DTabs; import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.gui.control.generic.popup.PopupBrowserWindow; import org.olat.core.gui.render.Renderer; import org.olat.core.gui.render.StringOutput; -import org.olat.core.id.OLATResourceable; +import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.util.vfs.VFSContainer; import org.olat.course.assessment.model.UserEfficiencyStatementLight; import org.olat.course.assessment.portfolio.EfficiencyStatementArtefact; @@ -163,21 +160,8 @@ public class EfficiencyStatementsListController extends BasicController { } else if (!rm.isAllowedToLaunch(ureq, re)) { showWarning("efficiencyStatements.course.noaccess"); } else { - OLATResourceable ores = re.getOlatResource(); - //was brasato:: DTabs dts = getWindowControl().getDTabs(); - DTabs dts = Windows.getWindows(ureq).getWindow(ureq).getDTabs(); - DTab dt = dts.getDTab(ores); - if (dt == null) { - // does not yet exist -> create and add - //fxdiff BAKS-7 Resume function - dt = dts.createDTab(ores, re, efficiencyStatement.getShortTitle()); - if (dt == null) return; - Controller launchController = ControllerFactory.createLaunchController(ores, ureq, dt.getWindowControl(), true); - dt.setController(launchController); - dts.addDTab(ureq, dt); - } - dts.activate(ureq, dt, null); // null: do not activate to a certain view - + WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(getWindowControl(), re); + NewControllerFactory.getInstance().launch(ureq, bwControl); } } else if (actionid.equals(CMD_DELETE)) { // show confirmation dialog diff --git a/src/main/java/org/olat/course/nodes/CourseNodeFactory.java b/src/main/java/org/olat/course/nodes/CourseNodeFactory.java index 0dc72589ba2d2ee743db2da3caf7d1f3dce84392..340d89c82fa2616d3a9020e0fa08950f7d1387e5 100644 --- a/src/main/java/org/olat/course/nodes/CourseNodeFactory.java +++ b/src/main/java/org/olat/course/nodes/CourseNodeFactory.java @@ -44,7 +44,6 @@ import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; import org.olat.core.logging.AssertException; import org.olat.repository.RepositoryEntry; -import org.olat.repository.controllers.RepositoryDetailsController; import org.olat.repository.handlers.RepositoryHandler; import org.olat.repository.handlers.RepositoryHandlerFactory; @@ -134,6 +133,7 @@ public class CourseNodeFactory { // do nothing return; } + RepositoryHandler typeToEdit = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry); if (!typeToEdit.supportsEdit(repositoryEntry)){ throw new AssertException("Trying to edit repository entry which has no assoiciated editor: "+ typeToEdit); @@ -159,7 +159,7 @@ public class CourseNodeFactory { dt.setController(editorController); dts.addDTab(ureq, dt); } - List<ContextEntry> entries = BusinessControlFactory.getInstance().createCEListFromResourceType(RepositoryDetailsController.ACTIVATE_EDITOR); + List<ContextEntry> entries = BusinessControlFactory.getInstance().createCEListFromResourceType("activateEditor"); dts.activate(ureq, dt, entries); } diff --git a/src/main/java/org/olat/course/nodes/iq/IQEditController.java b/src/main/java/org/olat/course/nodes/iq/IQEditController.java index 47169cb4027eedfc3439304f15e82d630fd95d35..04064f47a5610e366dc87e0805815b32bbc7506f 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQEditController.java +++ b/src/main/java/org/olat/course/nodes/iq/IQEditController.java @@ -479,8 +479,7 @@ public class IQEditController extends ActivateableTabbableDefaultController impl listenTo(searchController); cmc = new CloseableModalController(getWindowControl(), translate("close"), searchController.getInitialComponent(), true, translate("command.chooseRepFile")); cmc.activate(); - } - else if (source == changeTestButton) {//change associated test + } else if (source == changeTestButton) {//change associated test if(type.equals(AssessmentInstance.QMD_ENTRY_TYPE_SELF)) {//selftest String[] types = new String[]{TestFileResource.TYPE_NAME}; searchController = new ReferencableEntriesSearchController(getWindowControl(), ureq, types, translate("command.chooseTest")); diff --git a/src/main/java/org/olat/course/nodes/wiki/WikiEditController.java b/src/main/java/org/olat/course/nodes/wiki/WikiEditController.java index 4847a5ab2d58f4ce6536d4e39a66a854d87a1e39..e7b4f9762aeba30a366ecf46dc308d3d0c0dfe82 100644 --- a/src/main/java/org/olat/course/nodes/wiki/WikiEditController.java +++ b/src/main/java/org/olat/course/nodes/wiki/WikiEditController.java @@ -25,6 +25,7 @@ package org.olat.course.nodes.wiki; +import org.olat.NewControllerFactory; import org.olat.core.commons.services.notifications.SubscriptionContext; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; @@ -59,7 +60,6 @@ import org.olat.modules.wiki.WikiSecurityCallbackImpl; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.controllers.ReferencableEntriesSearchController; -import org.olat.repository.controllers.RepositoryDetailsController; /** * Description: <BR/>Edit controller for single page course nodes <P/> Initial @@ -202,7 +202,8 @@ public class WikiEditController extends ActivateableTabbableDefaultController im // do nothing return; } - RepositoryDetailsController.doEdit(ureq, repositoryEntry); + String bPath = "[RepositoryEntry:" + repositoryEntry.getKey() + "][Editor:0]"; + NewControllerFactory.getInstance().launch(bPath, ureq, getWindowControl()); } } diff --git a/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java b/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java index a3b2afbdea23f443f0efd432bf1aa8f2ad3a64c1..ef706b7433be4e166a74100c030f93a8226f4c74 100644 --- a/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java +++ b/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java @@ -28,6 +28,7 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.navigation.SiteDefinition; import org.olat.core.gui.control.navigation.SiteDefinitions; 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.ContextEntryControllerCreator; import org.olat.core.id.context.DefaultContextEntryControllerCreator; @@ -36,6 +37,8 @@ import org.olat.course.site.model.LanguageConfiguration; import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.RepositoyUIFactory; +import org.olat.repository.handlers.RepositoryHandler; +import org.olat.repository.handlers.RepositoryHandlerFactory; /** * <h3>Description:</h3> @@ -63,10 +66,26 @@ public class CourseSiteContextEntryControllerCreator extends DefaultContextEntry * org.olat.core.gui.control.WindowControl) */ @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - RepositoryEntry re = getRepositoryEntry(ce); - Controller ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl); - return ctrl; + public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) { + Controller ctrl = null;; + RepositoryEntry re = getRepositoryEntry(ces.get(0)); + if(ces.size() > 1) { + ContextEntry subcontext = ces.get(1); + if("Editor".equals(subcontext.getOLATResourceable().getResourceableTypeName())) { + RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(re); + if(handler != null && handler.supportsEdit(re) && isAllowedToEdit(ureq, re)) { + ctrl = handler.createEditorController(re, ureq, wControl); + } + } + } + + return ctrl == null ? RepositoyUIFactory.createLaunchController(re, ureq, wControl) : ctrl; + } + + private boolean isAllowedToEdit(UserRequest ureq, RepositoryEntry re) { + Roles roles = ureq.getUserSession().getRoles(); + return roles.isOLATAdmin() + || RepositoryManager.getInstance().isOwnerOfRepositoryEntry(ureq.getIdentity(), re); } /** @@ -86,8 +105,8 @@ public class CourseSiteContextEntryControllerCreator extends DefaultContextEntry * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry) */ @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { - RepositoryEntry re = getRepositoryEntry(ce); + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { + RepositoryEntry re = getRepositoryEntry(ces.get(0)); CourseSiteDef siteDef = getCourseSite(ureq, re); if(siteDef != null) { return siteDef.getClass().getName().replace("Def", ""); diff --git a/src/main/java/org/olat/group/BusinessGroupCardContextEntryControllerCreator.java b/src/main/java/org/olat/group/BusinessGroupCardContextEntryControllerCreator.java index 58f658a33eb0cc4616b4dc6f080036d1229b1b07..32facfa20fd688f439ce7fb24b7c225dcbf05f28 100644 --- a/src/main/java/org/olat/group/BusinessGroupCardContextEntryControllerCreator.java +++ b/src/main/java/org/olat/group/BusinessGroupCardContextEntryControllerCreator.java @@ -19,6 +19,8 @@ */ package org.olat.group; +import java.util.List; + import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; @@ -48,8 +50,8 @@ public class BusinessGroupCardContextEntryControllerCreator extends DefaultConte * org.olat.core.gui.control.WindowControl) */ @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - BusinessGroup bgroup = getBusinessGroup(ce); + public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) { + BusinessGroup bgroup = getBusinessGroup(ces.get(0)); if(bgroup != null) { return new GroupInfoMainController(ureq, wControl, bgroup); } diff --git a/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java b/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java index 619be44388769cd6f701620f03ca1c42f78bd118..3fc4a2fafd2f7ba75fded98a85b5f21924ba7972 100644 --- a/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java +++ b/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java @@ -20,6 +20,7 @@ package org.olat.group; import java.util.Date; +import java.util.List; import org.olat.basesecurity.Constants; import org.olat.core.CoreSpringFactory; @@ -60,9 +61,10 @@ public class BusinessGroupContextEntryControllerCreator extends DefaultContextEn * org.olat.core.gui.UserRequest, * org.olat.core.gui.control.WindowControl) */ - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + @Override + public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) { Controller ctrl = null; - BusinessGroup bgroup = getBusinessGroup(ce); + BusinessGroup bgroup = getBusinessGroup(ces.get(0)); if(bgroup != null && isAuthorized(ureq, bgroup)) { ctrl = BGControllerFactory.getInstance().createRunControllerFor(ureq, wControl, bgroup); } diff --git a/src/main/java/org/olat/gui/demo/site/GUIDemoSite.java b/src/main/java/org/olat/gui/demo/site/GUIDemoSite.java index 55c75a138e050d164eda39bce0ea5c11427019c6..480dba12aa4ec8fb3b4151121568f8f54ffc2c9e 100644 --- a/src/main/java/org/olat/gui/demo/site/GUIDemoSite.java +++ b/src/main/java/org/olat/gui/demo/site/GUIDemoSite.java @@ -25,7 +25,6 @@ package org.olat.gui.demo.site; -import org.olat.ControllerFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.layout.MainLayoutController; @@ -34,58 +33,43 @@ import org.olat.core.gui.control.navigation.DefaultNavElement; import org.olat.core.gui.control.navigation.NavElement; import org.olat.core.gui.control.navigation.SiteConfiguration; import org.olat.core.gui.control.navigation.SiteDefinition; -import org.olat.core.id.OLATResourceable; -import org.olat.core.util.resource.OresHelper; import org.olat.gui.demo.GUIDemoMainController; /** * * Description:<br> - * TODO: Lavinia Dumitrescu Class Description for GUIDemoSite + * Create the main demo controller * * <P> * Initial Date: 11.09.2007 <br> * @author Lavinia Dumitrescu */ public class GUIDemoSite extends AbstractSiteInstance { - private static final OLATResourceable ORES_TESTING = OresHelper.lookupType(GUIDemoMainController.class); - private NavElement origNavElem; private NavElement curNavElem; - /** - * - */ + public GUIDemoSite(SiteDefinition siteDef) { super(siteDef); origNavElem = new DefaultNavElement("gui_demo", "gui demo", "o_site_guidemo"); curNavElem = new DefaultNavElement(origNavElem); } - /** - * @see org.olat.navigation.SiteInstance#getNavElement() - */ + @Override public NavElement getNavElement() { return curNavElem; } @Override protected MainLayoutController createController(UserRequest ureq, WindowControl wControl, SiteConfiguration config) { - MainLayoutController c = ControllerFactory.createLaunchController(ORES_TESTING, ureq, wControl, true); - return c; + return new GUIDemoMainController(ureq, wControl); } - /** - * @see org.olat.navigation.SiteInstance#isKeepState() - */ + @Override public boolean isKeepState() { return true; } - /** - * @see org.olat.navigation.SiteInstance#reset() - */ + @Override public void reset() { curNavElem = new DefaultNavElement(origNavElem); } - -} - +} \ No newline at end of file diff --git a/src/main/java/org/olat/home/GuestHomeSite.java b/src/main/java/org/olat/home/GuestHomeSite.java deleted file mode 100644 index eb146e5d2063e8fed5f756aad0f29dddc04c3be1..0000000000000000000000000000000000000000 --- a/src/main/java/org/olat/home/GuestHomeSite.java +++ /dev/null @@ -1,88 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -*/ - -package org.olat.home; - -import java.util.Locale; - -import org.olat.ControllerFactory; -import org.olat.core.commons.chiefcontrollers.BaseChiefController; -import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.WindowControl; -import org.olat.core.gui.control.generic.layout.MainLayoutController; -import org.olat.core.gui.control.navigation.AbstractSiteInstance; -import org.olat.core.gui.control.navigation.DefaultNavElement; -import org.olat.core.gui.control.navigation.NavElement; -import org.olat.core.gui.control.navigation.SiteConfiguration; -import org.olat.core.gui.control.navigation.SiteDefinition; -import org.olat.core.gui.translator.Translator; -import org.olat.core.id.OLATResourceable; -import org.olat.core.util.Util; -import org.olat.core.util.resource.OresHelper; -/** - * Initial Date: 19.07.2005 <br> - * @author Felix Jost - */ -public class GuestHomeSite extends AbstractSiteInstance { - private static final OLATResourceable ORES_GUEST = OresHelper.lookupType(GuestHomeMainController.class); - - private NavElement origNavElem; - private NavElement curNavElem; - /** - * - */ - public GuestHomeSite(SiteDefinition siteDef, Locale loc) { - super(siteDef); - Translator trans = Util.createPackageTranslator(BaseChiefController.class, loc); - origNavElem = new DefaultNavElement(trans.translate("topnav.guesthome"), trans.translate("topnav.guesthome.alt"), "o_site_home"); - curNavElem = new DefaultNavElement(origNavElem); - } - - /** - * @see org.olat.navigation.SiteInstance#getNavElement() - */ - public NavElement getNavElement() { - return curNavElem; - } - - @Override - protected MainLayoutController createController(UserRequest ureq, WindowControl wControl, SiteConfiguration config) { - MainLayoutController c = ControllerFactory.createLaunchController(ORES_GUEST, ureq, wControl, true); - return c; - } - - /** - * @see org.olat.navigation.SiteInstance#isKeepState() - */ - public boolean isKeepState() { - return true; - } - - public void reset() { - curNavElem = new DefaultNavElement(origNavElem); - } - -} - diff --git a/src/main/java/org/olat/home/InviteeHomeSite.java b/src/main/java/org/olat/home/InviteeHomeSite.java index 0aed133b95bb2607ca11667c20f0d3c77b16239e..2f6e930ae8cc0e44633ad63bc298c907affb89a3 100644 --- a/src/main/java/org/olat/home/InviteeHomeSite.java +++ b/src/main/java/org/olat/home/InviteeHomeSite.java @@ -21,7 +21,6 @@ package org.olat.home; import java.util.Locale; -import org.olat.ControllerFactory; import org.olat.core.commons.chiefcontrollers.BaseChiefController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.WindowControl; @@ -32,22 +31,19 @@ import org.olat.core.gui.control.navigation.NavElement; import org.olat.core.gui.control.navigation.SiteConfiguration; import org.olat.core.gui.control.navigation.SiteDefinition; import org.olat.core.gui.translator.Translator; -import org.olat.core.id.OLATResourceable; +import org.olat.core.logging.OLATSecurityException; import org.olat.core.util.Util; -import org.olat.core.util.resource.OresHelper; /** * * Description:<br> - * TODO: srosse Class Description for InviteeHomeSite + * Create the home site for invitee * * <P> * Initial Date: 7 déc. 2010 <br> * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ public class InviteeHomeSite extends AbstractSiteInstance { - private static final OLATResourceable ORES_INVITEE = OresHelper.lookupType(InviteeHomeMainController.class); - private NavElement origNavElem; private NavElement curNavElem; @@ -67,8 +63,10 @@ public class InviteeHomeSite extends AbstractSiteInstance { @Override protected MainLayoutController createController(UserRequest ureq, WindowControl wControl, SiteConfiguration config) { - MainLayoutController c = ControllerFactory.createLaunchController(ORES_INVITEE, ureq, wControl, true); - return c; + if (!ureq.getUserSession().getRoles().isInvitee()) { + throw new OLATSecurityException("Tried to launch a InviteeMainController, but is not an invitee " + ureq.getUserSession().getRoles()); + } + return new InviteeHomeMainController(ureq, wControl); } /** diff --git a/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java b/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java index 424a9c4a7e829debdb783a8e1ac877c0def79850..d386953d343b913051452bdb2b12c024e83641e0 100644 --- a/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java +++ b/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java @@ -19,8 +19,9 @@ */ package org.olat.home.controllerCreators; +import java.util.List; + import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntryControllerCreator; @@ -37,10 +38,6 @@ import org.olat.home.HomeSite; * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com */ public class GuestHomeCEControllerCreator extends DefaultContextEntryControllerCreator { - - public GuestHomeCEControllerCreator() { - // - } @Override public ContextEntryControllerCreator clone() { @@ -48,20 +45,10 @@ public class GuestHomeCEControllerCreator extends DefaultContextEntryControllerC } @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return null; - } - - @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { return HomeSite.class.getName(); } - @Override - public String getTabName(ContextEntry ce, UserRequest ureq) { - return null; - } - @Override public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { return ureq.getUserSession().getRoles().isGuestOnly(); diff --git a/src/main/java/org/olat/modules/coach/site/CoachContextEntryControllerCreator.java b/src/main/java/org/olat/modules/coach/site/CoachContextEntryControllerCreator.java index daf50ec502740ccba4667f1978f6b02838d969b7..26911c7d5ee219d7b2e0599330dedec80cb5d7ad 100644 --- a/src/main/java/org/olat/modules/coach/site/CoachContextEntryControllerCreator.java +++ b/src/main/java/org/olat/modules/coach/site/CoachContextEntryControllerCreator.java @@ -19,8 +19,9 @@ */ package org.olat.modules.coach.site; +import java.util.List; + import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntryControllerCreator; import org.olat.core.id.context.DefaultContextEntryControllerCreator; @@ -37,12 +38,7 @@ public class CoachContextEntryControllerCreator extends DefaultContextEntryContr } @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { return CoachSite.class.getName(); } - - @Override - public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return super.validateContextEntryAndShowError(ce, ureq, wControl); - } } diff --git a/src/main/java/org/olat/modules/coach/ui/CourseController.java b/src/main/java/org/olat/modules/coach/ui/CourseController.java index 4989046aa4888bce968f80e6023c7e7c29ec11ed..5991b6119625e412c8a2d5942a9c6b0529a1344a 100644 --- a/src/main/java/org/olat/modules/coach/ui/CourseController.java +++ b/src/main/java/org/olat/modules/coach/ui/CourseController.java @@ -19,7 +19,6 @@ */ package org.olat.modules.coach.ui; -import java.util.ArrayList; import java.util.List; import org.olat.NewControllerFactory; @@ -46,7 +45,6 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableModalControlle import org.olat.core.gui.control.generic.dtabs.Activateable2; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; -import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.BusinessControlFactory; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.StateEntry; @@ -55,10 +53,9 @@ import org.olat.core.util.resource.OresHelper; import org.olat.modules.coach.CoachingService; import org.olat.modules.coach.model.CourseStatEntry; import org.olat.modules.coach.model.EfficiencyStatementEntry; -import org.olat.repository.RepositoryEntry; - import org.olat.modules.coach.ui.EfficiencyStatementEntryTableDataModel.Columns; import org.olat.modules.coach.ui.ToolbarController.Position; +import org.olat.repository.RepositoryEntry; /** * @@ -332,13 +329,8 @@ public class CourseController extends BasicController implements Activateable2 { } private void openCourse(UserRequest ureq) { - List<ContextEntry> ces = new ArrayList<ContextEntry>(1); - OLATResourceable ores = OresHelper.createOLATResourceableInstance("RepositoryEntry", courseStat.getRepoKey()); - ces.add(BusinessControlFactory.getInstance().createContextEntry(ores)); - - BusinessControl bc = BusinessControlFactory.getInstance().createFromContextEntries(ces); - WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, getWindowControl()); + WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(getWindowControl(), ores); NewControllerFactory.getInstance().launch(ureq, bwControl); } } diff --git a/src/main/java/org/olat/modules/fo/ForumController.java b/src/main/java/org/olat/modules/fo/ForumController.java index 5ce86531bd11f64ca70ad7322356cf4d8972e046..2d16ceb3ff2f98351d36f4ed19a49fb7f2983b58 100644 --- a/src/main/java/org/olat/modules/fo/ForumController.java +++ b/src/main/java/org/olat/modules/fo/ForumController.java @@ -35,7 +35,7 @@ import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringEscapeUtils; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.basesecurity.BaseSecurityModule; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.modules.bc.FolderConfig; @@ -53,8 +53,8 @@ import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; -import org.olat.core.gui.components.panel.StackedPanel; import org.olat.core.gui.components.panel.SimpleStackedPanel; +import org.olat.core.gui.components.panel.StackedPanel; import org.olat.core.gui.components.table.BooleanColumnDescriptor; import org.olat.core.gui.components.table.ColumnDescriptor; import org.olat.core.gui.components.table.CustomCellRenderer; @@ -1664,18 +1664,19 @@ public class ForumController extends BasicController implements GenericEventList * Initial Date: 11.07.2007 <br> * @author Lavinia Dumitrescu */ - private class StickyRenderColumnDescriptor extends CustomRenderColumnDescriptor { + private static class StickyRenderColumnDescriptor extends CustomRenderColumnDescriptor { public StickyRenderColumnDescriptor(String headerKey, int dataColumn, String action, Locale locale, int alignment, CustomCellRenderer customCellRenderer) { super(headerKey, dataColumn, action, locale, alignment,customCellRenderer); } - /** + /** * Delegates comparison to the <code>ForumHelper.compare</code>. In case the <code>ForumHelper.compare</code> * returns <code>ForumHelper.NOT_MY_JOB</code>, the comparison is executed by the superclass. * @see org.olat.core.gui.components.table.ColumnDescriptor#compareTo(int, int) - */ + */ + @Override public int compareTo(int rowa, int rowb) { ForumHelper.MessageWrapper a = (ForumHelper.MessageWrapper)getTable().getTableDataModel().getValueAt(rowa,getDataColumn()); ForumHelper.MessageWrapper b = (ForumHelper.MessageWrapper)getTable().getTableDataModel().getValueAt(rowb,getDataColumn()); @@ -1689,16 +1690,18 @@ public class ForumController extends BasicController implements GenericEventList } } - class MessageIconRenderer extends CustomCssCellRenderer { - + public class MessageIconRenderer extends CustomCssCellRenderer { + @Override protected String getHoverText(Object val) { - return ControllerFactory.translateResourceableTypeName((String)val, getLocale()); + return NewControllerFactory.translateResourceableTypeName((String)val, getLocale()); } - + + @Override protected String getCellValue(Object val) { return ""; } + @Override protected String getCssClass(Object val) { //val.toString() // use small icon and create icon class for resource: o_FileResource-SHAREDFOLDER_icon diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java index 545e50185772bade5d08a03a03346f05f281aad8..a654a037c1b8c9eb6d22add77a02a9da5b2ff7e4 100644 --- a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java +++ b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java @@ -22,6 +22,7 @@ package org.olat.modules.qpool.ui; import java.util.Collections; import java.util.List; +import org.olat.NewControllerFactory; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.gui.UserRequest; @@ -45,6 +46,8 @@ import org.olat.core.gui.control.generic.wizard.StepsMainRunController; import org.olat.core.gui.control.generic.wizard.StepsRunContext; import org.olat.core.gui.media.MediaResource; import org.olat.core.id.Identity; +import org.olat.core.id.context.BusinessControlFactory; +import org.olat.core.util.resource.OresHelper; import org.olat.group.BusinessGroup; import org.olat.group.model.BusinessGroupSelectionEvent; import org.olat.group.ui.main.SelectBusinessGroupController; @@ -72,7 +75,6 @@ import org.olat.repository.RepositoryEntry; import org.olat.repository.RepositoryManager; import org.olat.repository.controllers.EntryChangedEvent; import org.olat.repository.controllers.ReferencableEntriesSearchController; -import org.olat.repository.controllers.RepositoryDetailsController; import org.olat.repository.controllers.RepositorySearchController.Can; import org.olat.repository.handlers.RepositoryHandler; import org.olat.repository.handlers.RepositoryHandlerFactory; @@ -648,8 +650,9 @@ public class QuestionListController extends AbstractItemListController implement private void doExportToRepositoryEntry(UserRequest ureq, Long repoEntryKey) { RepositoryEntry re = repositoryManager.lookupRepositoryEntry(repoEntryKey, false); if(re != null) { - //open editor - RepositoryDetailsController.doEdit(ureq, re); + WindowControl wControl = BusinessControlFactory.getInstance() + .createBusinessWindowControl(getWindowControl(), re, OresHelper.createOLATResourceableType("Editor")); + NewControllerFactory.getInstance().launch(ureq, wControl); } } diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java index 3c31636dbaf79477d488b829974c603f06be128c..a10097a40dd8c4fac7e50f16710fb2160b080176 100644 --- a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java +++ b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java @@ -20,6 +20,8 @@ package org.olat.modules.webFeed.portfolio; +import java.util.List; + import org.olat.NewControllerFactory; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.gui.UserRequest; @@ -70,8 +72,8 @@ public class LiveBlogContextEntryControllerCreator { } @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - OLATResourceable ores = ce.getOLATResourceable(); + public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) { + OLATResourceable ores = ces.get(0).getOLATResourceable(); Feed feed = feedManager.getFeed(ores); boolean isOwner = feed.getAuthor() != null && ureq.getIdentity() != null && feed.getAuthor().equals(ureq.getIdentity().getName()); FeedSecurityCallback secCallback = new FeedResourceSecurityCallback(isOwner, isOwner); @@ -86,11 +88,6 @@ public class LiveBlogContextEntryControllerCreator { return feed.getTitle(); } - @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { - return null; - } - @Override public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { try { diff --git a/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java b/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java index 0e71254327486630f03249df19f2012fa8ef74eb..d7d415517414b8fa3046e46317a08f1e91937e12 100644 --- a/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java +++ b/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.Map; import org.apache.commons.lang.StringEscapeUtils; +import org.olat.NewControllerFactory; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.controllers.navigation.Dated; import org.olat.core.commons.controllers.navigation.NavigationEvent; @@ -36,7 +37,6 @@ import org.olat.core.commons.services.commentAndRating.CommentAndRatingSecurityC import org.olat.core.commons.services.commentAndRating.CommentAndRatingService; import org.olat.core.commons.services.commentAndRating.ui.UserCommentsAndRatingsController; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.Windows; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.date.DateComponentFactory; import org.olat.core.gui.components.form.flexible.elements.FileElement; @@ -51,12 +51,9 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; import org.olat.core.gui.control.generic.dtabs.Activateable2; -import org.olat.core.gui.control.generic.dtabs.DTab; -import org.olat.core.gui.control.generic.dtabs.DTabs; import org.olat.core.gui.control.generic.modal.DialogBoxController; import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; import org.olat.core.id.Identity; -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; @@ -71,9 +68,6 @@ import org.olat.modules.webFeed.models.Feed; import org.olat.modules.webFeed.models.Item; import org.olat.modules.webFeed.models.ItemPublishDateComparator; import org.olat.portfolio.EPUIFactory; -import org.olat.user.HomePageConfigManager; -import org.olat.user.HomePageConfigManagerImpl; -import org.olat.user.UserInfoMainController; import org.olat.user.UserManager; import org.olat.util.logging.activity.LoggingResourceable; @@ -505,20 +499,8 @@ public class ItemsController extends BasicController implements Activateable2 { Object userObject = userLink.getUserObject(); if (userObject instanceof Identity) { Identity chosenIdentity = (Identity) userObject; - HomePageConfigManager hpcm = HomePageConfigManagerImpl.getInstance(); - OLATResourceable ores = hpcm.loadConfigFor(chosenIdentity.getName()); - DTabs dts = Windows.getWindows(ureq).getWindow(ureq).getDTabs(); - // was brasato:: DTabs dts = getWindowControl().getDTabs(); - DTab dt = dts.getDTab(ores); - if (dt == null) { - // does not yet exist -> create and add - dt = dts.createDTab(ores, chosenIdentity.getName()); - if (dt == null) return; - UserInfoMainController uimc = new UserInfoMainController(ureq, dt.getWindowControl(), chosenIdentity); - dt.setController(uimc); - dts.addDTab(ureq, dt); - } - dts.activate(ureq, dt, null); + String bPath = "[HomePage:" + chosenIdentity.getKey() + "]"; + NewControllerFactory.getInstance().launch(bPath, ureq, getWindowControl()); } } diff --git a/src/main/java/org/olat/note/NoteListTableDataModel.java b/src/main/java/org/olat/note/NoteListTableDataModel.java index 0a0aa52173e5bd647dc1a2cfb6495344929f4240..572eade7483b75e5d4dedf7000e68d753b9b7b59 100644 --- a/src/main/java/org/olat/note/NoteListTableDataModel.java +++ b/src/main/java/org/olat/note/NoteListTableDataModel.java @@ -28,7 +28,7 @@ package org.olat.note; import java.util.List; import java.util.Locale; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.core.gui.components.table.DefaultTableDataModel; /** @@ -39,7 +39,7 @@ import org.olat.core.gui.components.table.DefaultTableDataModel; class NoteListTableDataModel extends DefaultTableDataModel<Note> { - private Locale locale; + private final Locale locale; /** * @param objects @@ -50,9 +50,7 @@ class NoteListTableDataModel extends DefaultTableDataModel<Note> { this.locale = locale; } - /** - * @see org.olat.core.gui.components.table.TableDataModel#getValueAt(int, int) - */ + @Override public final Object getValueAt(int row, int col) { Note n = getObject(row); switch (col) { @@ -60,15 +58,13 @@ class NoteListTableDataModel extends DefaultTableDataModel<Note> { return n.getNoteTitle(); case 1 : String resType = n.getResourceTypeName(); - return (resType == null ? "n/a" : ControllerFactory.translateResourceableTypeName(resType, locale)); + return (resType == null ? "n/a" : NewControllerFactory.translateResourceableTypeName(resType, locale)); default : return "error"; } } - /** - * @see org.olat.core.gui.components.table.TableDataModel#getColumnCount() - */ + @Override public int getColumnCount() { return 2; } diff --git a/src/main/java/org/olat/note/NotesPortletRunController.java b/src/main/java/org/olat/note/NotesPortletRunController.java index 663948d19c60799c893fa3f95ee297ac7473178a..9ceb636bed6cf5cd6f002eff74978e78a16f6708 100644 --- a/src/main/java/org/olat/note/NotesPortletRunController.java +++ b/src/main/java/org/olat/note/NotesPortletRunController.java @@ -33,7 +33,6 @@ import java.util.List; import java.util.Locale; import org.apache.commons.lang.StringEscapeUtils; -import org.olat.ControllerFactory; import org.olat.NewControllerFactory; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory; @@ -319,10 +318,8 @@ public class NotesPortletRunController extends AbstractPortletRunController<Note super(objects, 2); this.locale = locale; } - - /** - * @see org.olat.core.gui.components.table.TableDataModel#getValueAt(int, int) - */ + + @Override public final Object getValueAt(int row, int col) { Note note = getObject(row).getValue(); switch (col) { @@ -330,7 +327,7 @@ public class NotesPortletRunController extends AbstractPortletRunController<Note return note.getNoteTitle(); case 1: String resType = note.getResourceTypeName(); - return (resType == null ? "n/a" : ControllerFactory.translateResourceableTypeName(resType, locale)); + return (resType == null ? "n/a" : NewControllerFactory.translateResourceableTypeName(resType, locale)); default: return "error"; } diff --git a/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java b/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java index 97a0b95ce2b172ddb320f430bb597f4ef21840bd..84096a5642e8a0324b9feee530358eb878fdbdb4 100644 --- a/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java +++ b/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java @@ -24,7 +24,6 @@ import java.util.List; import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.WindowControl; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.BusinessControlFactory; @@ -51,7 +50,7 @@ public class EPArtefactPoolExtension { NewControllerFactory.getInstance().addContextEntryControllerCreator(AbstractArtefact.class.getSimpleName(), new ArtefactContextEntryControllerCreator()); } - private static class ArtefactContextEntryControllerCreator extends DefaultContextEntryControllerCreator{ + private static class ArtefactContextEntryControllerCreator extends DefaultContextEntryControllerCreator { @Override public ContextEntryControllerCreator clone() { @@ -59,15 +58,10 @@ public class EPArtefactPoolExtension { } @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { return HomeSite.class.getName(); } - @Override - public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return true; - } - @Override public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries) { Identity identity = ureq.getIdentity(); diff --git a/src/main/java/org/olat/portfolio/EPMapExtension.java b/src/main/java/org/olat/portfolio/EPMapExtension.java index 015119d39e45a727af9ba7dda7c95161cd7f38b2..4851d9c963c591e9f2b97db328942f67c31ae54b 100644 --- a/src/main/java/org/olat/portfolio/EPMapExtension.java +++ b/src/main/java/org/olat/portfolio/EPMapExtension.java @@ -64,7 +64,7 @@ public class EPMapExtension { } @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { return HomeSite.class.getName(); } diff --git a/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java b/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java index e588789eef9bbd2a0a40c0a20359d913d57fe450..75c921bb70ad09a16af63f7db167aab1e727985a 100644 --- a/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java +++ b/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java @@ -19,6 +19,8 @@ */ package org.olat.portfolio; +import java.util.List; + import org.olat.NewControllerFactory; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; @@ -55,12 +57,12 @@ public class EPMapOnInvitationExtension { } @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { + public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) { if(!ureq.getUserSession().getRoles().isInvitee()) { return null; } - PortfolioStructureMap map = getMapFromContext(ce); + PortfolioStructureMap map = getMapFromContext(ces.get(0)); EPSecurityCallback secCallback = new EPSecurityCallbackImpl(false, true); Controller epCtr = EPUIFactory.createMapViewController(ureq, wControl, map, secCallback); @@ -75,11 +77,6 @@ public class EPMapOnInvitationExtension { return map.getTitle(); } - @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { - return null; - } - @Override public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { if(!ureq.getUserSession().getRoles().isInvitee()) { diff --git a/src/main/java/org/olat/portfolio/EPMyMapsExtension.java b/src/main/java/org/olat/portfolio/EPMyMapsExtension.java index 8fdc690b26209a89adc19a3d769db9f7dad07d02..0b2b913dd38e90c771f7c84170cbc830e1c48033 100644 --- a/src/main/java/org/olat/portfolio/EPMyMapsExtension.java +++ b/src/main/java/org/olat/portfolio/EPMyMapsExtension.java @@ -19,9 +19,10 @@ */ package org.olat.portfolio; +import java.util.List; + import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntryControllerCreator; @@ -53,18 +54,7 @@ public class EPMyMapsExtension { } @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return null; - } - - @Override - public String getTabName(ContextEntry ce, UserRequest ureq) { - // opens in home-tab - return null; - } - - @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { return HomeSite.class.getName(); } diff --git a/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java b/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java index 00b515f3cabd589b35d51c9a26dab1c556748209..8079b3d91b8cbbc35f91f29548758a03cb9f4584 100644 --- a/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java +++ b/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java @@ -19,10 +19,10 @@ */ package org.olat.portfolio; +import java.util.List; + import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.Controller; -import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntryControllerCreator; import org.olat.core.id.context.DefaultContextEntryControllerCreator; @@ -53,24 +53,8 @@ public class EPMyStructuredMapsExtension { } @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return null; - } - - @Override - public String getTabName(ContextEntry ce, UserRequest ureq) { - // opens in home-tab - return null; - } - - @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { return HomeSite.class.getName(); } - - @Override - public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return true; - } } } diff --git a/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java b/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java index 1cc67529c7a96595bb4dbc5ea3ebaf7f373a0fc5..9a96ef4c971d6b7525454c1c676f945c8592888f 100644 --- a/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java +++ b/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java @@ -19,10 +19,10 @@ */ package org.olat.portfolio; +import java.util.List; + import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.Controller; -import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntryControllerCreator; import org.olat.core.id.context.DefaultContextEntryControllerCreator; @@ -52,24 +52,8 @@ public class EPOtherMapsExtension { } @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return null; - } - - @Override - public String getTabName(ContextEntry ce, UserRequest ureq) { - // opens in home-tab - return null; - } - - @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { return HomeSite.class.getName(); } - - @Override - public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return true; - } } } \ No newline at end of file diff --git a/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java b/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java index b4a65e948900693ba12afd9195644730efc7f487..ec7c4cf4b714a2d8684f3ad841714effe3546eee 100644 --- a/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java +++ b/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java @@ -20,8 +20,9 @@ package org.olat.repository; +import java.util.List; + import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.id.context.ContextEntry; import org.olat.core.id.context.ContextEntryControllerCreator; @@ -48,14 +49,9 @@ public class CatalogContextEntryControllerCreator extends DefaultContextEntryCon public ContextEntryControllerCreator clone() { return this; } - - @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return null; - } @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { if(repositoryModule.isCatalogSiteEnabled()) { return CatalogSite.class.getName(); } else { @@ -63,14 +59,8 @@ public class CatalogContextEntryControllerCreator extends DefaultContextEntryCon } } - @Override - public String getTabName(ContextEntry ce, UserRequest ureq) { - return null; - } - @Override public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { return repositoryModule.isCatalogEnabled(); } - -} +} \ No newline at end of file diff --git a/src/main/java/org/olat/repository/DetailsReadOnlyForm.java b/src/main/java/org/olat/repository/DetailsReadOnlyForm.java index 7e0bc7e09a8548c95a8ec859c129d1896726c215..b1f561fbaaeafeb29a5f1c49729486309a9a3268 100644 --- a/src/main/java/org/olat/repository/DetailsReadOnlyForm.java +++ b/src/main/java/org/olat/repository/DetailsReadOnlyForm.java @@ -25,7 +25,7 @@ package org.olat.repository; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.SelectionElement; @@ -81,7 +81,7 @@ public class DetailsReadOnlyForm extends FormBasicController { typeDisplayText.append("<span class=\"b_with_small_icon_left "); typeDisplayText.append(RepositoyUIFactory.getIconCssClass(entry)); typeDisplayText.append("\">"); - String tName = ControllerFactory.translateResourceableTypeName(typeName, getLocale()); + String tName = NewControllerFactory.translateResourceableTypeName(typeName, getLocale()); typeDisplayText.append(tName); typeDisplayText.append("</span>"); } else { diff --git a/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java b/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java deleted file mode 100644 index aa600b1e7fb0e3618fac30ed0700252019c736f6..0000000000000000000000000000000000000000 --- a/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * <a href="http://www.openolat.org"> - * OpenOLAT - Online Learning and Training</a><br> - * <p> - * Licensed under the Apache License, Version 2.0 (the "License"); <br> - * you may not use this file except in compliance with the License.<br> - * You may obtain a copy of the License at the - * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> - * <p> - * Unless required by applicable law or agreed to in writing,<br> - * software distributed under the License is distributed on an "AS IS" BASIS, <br> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> - * See the License for the specific language governing permissions and <br> - * limitations under the License. - * <p> - * Initial code contributed and copyrighted by<br> - * frentix GmbH, http://www.frentix.com - * <p> - */ -package org.olat.repository; - -import org.olat.core.gui.UserRequest; -import org.olat.core.gui.control.Controller; -import org.olat.core.gui.control.WindowControl; -import org.olat.core.id.OLATResourceable; -import org.olat.core.id.context.ContextEntry; -import org.olat.core.id.context.ContextEntryControllerCreator; -import org.olat.core.id.context.DefaultContextEntryControllerCreator; - -/** - * <h3>Description:</h3> - * <p> - * This class can create run controllers for repository entries in the given - * context - * <p> - * Initial Date: 19.08.2009 <br> - * - * @author gnaegi, gnaegi@frentix.com, www.frentix.com - */ -public class RepositoryContextEntryControllerCreator extends DefaultContextEntryControllerCreator { - - private RepositoryEntry repoEntry; - - @Override - public ContextEntryControllerCreator clone() { - return new RepositoryContextEntryControllerCreator(); - } - - /** - * @see org.olat.core.id.context.ContextEntryControllerCreator#createController(org.olat.core.id.context.ContextEntry, - * org.olat.core.gui.UserRequest, - * org.olat.core.gui.control.WindowControl) - */ - @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - RepositoryEntry re = getRepositoryEntry(ce); - Controller ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl); - return ctrl; - } - - /** - * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry) - */ - @Override - public String getTabName(ContextEntry ce, UserRequest ureq) { - RepositoryEntry re = getRepositoryEntry(ce); - return re.getDisplayname(); - } - - /** - * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry) - */ - @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { - return null; - } - - @Override - public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - return getRepositoryEntry(ce) != null; - } - - private RepositoryEntry getRepositoryEntry(ContextEntry ce) { - if(repoEntry == null) { - 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/RepositoryEntryIconRenderer.java b/src/main/java/org/olat/repository/RepositoryEntryIconRenderer.java index 7ab1ac363c54dec231aae670e5112cdf852fe445..3aa00a0d6f0a5866eb67c8644def5f64cb10e809 100644 --- a/src/main/java/org/olat/repository/RepositoryEntryIconRenderer.java +++ b/src/main/java/org/olat/repository/RepositoryEntryIconRenderer.java @@ -21,7 +21,7 @@ package org.olat.repository; import java.util.Locale; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.core.gui.components.table.CustomCssCellRenderer; import org.olat.core.util.StringHelper; import org.olat.core.util.i18n.I18nModule; @@ -101,12 +101,12 @@ public class RepositoryEntryIconRenderer extends CustomCssCellRenderer { if(val instanceof RepositoryEntry) { RepositoryEntry re = (RepositoryEntry) val; String typeName = re.getOlatResource().getResourceableTypeName(); - return ControllerFactory.translateResourceableTypeName(typeName, locale); + return NewControllerFactory.translateResourceableTypeName(typeName, locale); } if(val instanceof RepositoryEntryShort) { RepositoryEntryShort re = (RepositoryEntryShort) val; String typeName = re.getResourceType(); - return ControllerFactory.translateResourceableTypeName(typeName, locale); + return NewControllerFactory.translateResourceableTypeName(typeName, locale); } return "n/a"; } diff --git a/src/main/java/org/olat/repository/RepositoryModule.java b/src/main/java/org/olat/repository/RepositoryModule.java index 5837b45f30303465be722eb6e2cdd744f9ee443e..73ea0d0aa609a5c52fedc87ca51ac2f15c813fea 100644 --- a/src/main/java/org/olat/repository/RepositoryModule.java +++ b/src/main/java/org/olat/repository/RepositoryModule.java @@ -26,6 +26,7 @@ import org.olat.core.configuration.PersistedProperties; import org.olat.core.id.Roles; import org.olat.core.id.context.SiteContextEntryControllerCreator; import org.olat.core.util.StringHelper; +import org.olat.course.site.CourseSiteContextEntryControllerCreator; import org.olat.group.BusinessGroupModule; import org.olat.repository.site.RepositorySite; @@ -63,7 +64,7 @@ public class RepositoryModule extends AbstractOLATModule { public void init() { // Add controller factory extension point to launch groups NewControllerFactory.getInstance().addContextEntryControllerCreator(RepositoryEntry.class.getSimpleName(), - new RepositoryContextEntryControllerCreator()); + new CourseSiteContextEntryControllerCreator()); NewControllerFactory.getInstance().addContextEntryControllerCreator(CatalogEntry.class.getSimpleName(), new CatalogContextEntryControllerCreator(this)); diff --git a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java b/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java deleted file mode 100644 index 42cf954202de9efbcba1f545ab3770b70e91d5ca..0000000000000000000000000000000000000000 --- a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java +++ /dev/null @@ -1,1106 +0,0 @@ -/** -* OLAT - Online Learning and Training<br> -* http://www.olat.org -* <p> -* Licensed under the Apache License, Version 2.0 (the "License"); <br> -* you may not use this file except in compliance with the License.<br> -* You may obtain a copy of the License at -* <p> -* http://www.apache.org/licenses/LICENSE-2.0 -* <p> -* Unless required by applicable law or agreed to in writing,<br> -* software distributed under the License is distributed on an "AS IS" BASIS, <br> -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> -* See the License for the specific language governing permissions and <br> -* limitations under the License. -* <p> -* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br> -* University of Zurich, Switzerland. -* <hr> -* <a href="http://www.openolat.org"> -* OpenOLAT - Online Learning and Training</a><br> -* This file has been modified by the OpenOLAT community. Changes are licensed -* under the Apache 2.0 license as the original file. -*/ - -package org.olat.repository.controllers; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Locale; - -import org.olat.ControllerFactory; -import org.olat.NewControllerFactory; -import org.olat.admin.restapi.RestapiAdminController; -import org.olat.basesecurity.BaseSecurity; -import org.olat.basesecurity.Group; -import org.olat.basesecurity.GroupRoles; -import org.olat.basesecurity.IdentityShort; -import org.olat.basesecurity.ui.GroupController; -import org.olat.catalog.ui.CatalogEntryAddController; -import org.olat.catalog.ui.RepoEntryCategoriesTableController; -import org.olat.core.CoreSpringFactory; -import org.olat.core.commons.persistence.DBFactory; -import org.olat.core.commons.services.mark.Mark; -import org.olat.core.commons.services.mark.MarkManager; -import org.olat.core.dispatcher.DispatcherModule; -import org.olat.core.gui.UserRequest; -import org.olat.core.gui.Windows; -import org.olat.core.gui.components.Component; -import org.olat.core.gui.components.image.ImageComponent; -import org.olat.core.gui.components.link.Link; -import org.olat.core.gui.components.link.LinkFactory; -import org.olat.core.gui.components.velocity.VelocityContainer; -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.controller.BasicController; -import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController; -import org.olat.core.gui.control.generic.dtabs.Activateable2; -import org.olat.core.gui.control.generic.dtabs.DTab; -import org.olat.core.gui.control.generic.dtabs.DTabs; -import org.olat.core.gui.control.generic.modal.DialogBoxController; -import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory; -import org.olat.core.gui.control.generic.tool.ToolController; -import org.olat.core.gui.control.generic.tool.ToolFactory; -import org.olat.core.gui.media.MediaResource; -import org.olat.core.gui.translator.Translator; -import org.olat.core.helpers.Settings; -import org.olat.core.id.Identity; -import org.olat.core.id.OLATResourceable; -import org.olat.core.id.Roles; -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.logging.AssertException; -import org.olat.core.logging.OLATRuntimeException; -import org.olat.core.logging.OLATSecurityException; -import org.olat.core.logging.OLog; -import org.olat.core.logging.Tracing; -import org.olat.core.util.Formatter; -import org.olat.core.util.StringHelper; -import org.olat.core.util.Util; -import org.olat.core.util.coordinate.CoordinatorManager; -import org.olat.core.util.coordinate.LockResult; -import org.olat.core.util.event.GenericEventListener; -import org.olat.core.util.filter.FilterFactory; -import org.olat.core.util.i18n.I18nManager; -import org.olat.core.util.resource.OresHelper; -import org.olat.core.util.vfs.VFSContainer; -import org.olat.core.util.vfs.VFSContainerMapper; -import org.olat.core.util.vfs.VFSLeaf; -import org.olat.course.CorruptedCourseException; -import org.olat.course.CourseFactory; -import org.olat.course.CourseModule; -import org.olat.course.run.RunMainController; -import org.olat.repository.DisplayCourseInfoForm; -import org.olat.repository.DisplayInfoForm; -import org.olat.repository.RepositoryEntry; -import org.olat.repository.RepositoryEntryManagedFlag; -import org.olat.repository.RepositoryEntryStatus; -import org.olat.repository.RepositoryManager; -import org.olat.repository.RepositoryModule; -import org.olat.repository.RepositoryService; -import org.olat.repository.RepositoyUIFactory; -import org.olat.repository.handlers.CourseHandler; -import org.olat.repository.handlers.RepositoryHandler; -import org.olat.repository.handlers.RepositoryHandlerFactory; -import org.olat.repository.model.RepositoryEntryLifecycle; -import org.olat.resource.OLATResource; -import org.olat.resource.OLATResourceManager; -import org.olat.resource.accesscontrol.ACService; -import org.olat.resource.accesscontrol.ui.OrdersAdminController; -import org.olat.resource.references.ReferenceManager; -import org.olat.user.UserManager; - - -/** - * Description: <br> - * - * @author Felix Jost - */ -public class RepositoryDetailsController extends BasicController implements GenericEventListener, Activateable2 { - OLog log = Tracing.createLoggerFor(this.getClass()); - - private static final String ACTION_CLOSE = "cmd.close"; - private static final String ACTION_DOWNLOAD = "dl"; - private static final String ACTION_DOWNLOAD_BACKWARD_COMPAT = "dlcompat"; - private static final String ACTION_LAUNCH = "lch"; - private static final String ACTION_COPY = "cp"; - private static final String ACTION_BOOKMARK = "bm"; - private static final String ACTION_EDIT = "edt"; - private static final String ACTION_DETAILSEDIT = "dtedt"; - private static final String ACTION_ADD_CATALOG = "add.cat"; - private static final String ACTION_DELETE = "del"; - private static final String ACTION_CLOSE_RESSOURCE = "close.ressource"; - private static final String ACTION_MEMBERS = "members"; - - private static final String ACTION_ORDERS = "orders"; - private static final String ACTION_EDITDESC = "chdesc"; - private static final String ACTION_EDITPROP = "chprop"; - - private static final String TOOL_BOOKMARK = "b"; - private static final String TOOL_COPY = "c"; - private static final String TOOL_DOWNLOAD = "d"; - private static final String TOOL_ORDERS = "orders"; - private static final String TOOL_DOWNLOAD_BACKWARD_COMPAT = "dcompat"; - private static final String TOOL_EDIT = "e"; - private static final String TOOL_DELETE = "del"; - private static final String TOOL_CATALOG = "cat"; - private static final String TOOL_CHDESC = "chd"; - private static final String TOOL_CHPROP = "chp"; - private static final String TOOL_LAUNCH = "l"; - private static final String TOOL_CLOSE_RESSOURCE = "cr"; - - private VelocityContainer main; - private Link downloadButton; - private Link backLink; - private Link launchButton; - private Link loginLink; - - private GroupController groupController; - private RepositoryMembersController membersEditController; - private OrdersAdminController ordersController; - private ToolController detailsToolC; - private RepositoryEditDescriptionController repositoryEditDescriptionController; - private RepoEntryCategoriesTableController repoEntryCategoriesTableController; - private CloseableModalController closeableModalController; - private DialogBoxController deleteDialogController; - private Controller catalogAdddController; - private Controller detailsForm; - - private RepositoryEntry repositoryEntry; - private boolean isOwner; - private boolean isAuthor; - private boolean isOlatAdmin; - private boolean isGuestOnly = false; - private boolean corrupted; - public static final String ACTIVATE_EDITOR = "activateEditor"; - - private DisplayCourseInfoForm courseInfoForm; - private DisplayInfoForm displayInfoForm; - - private LockResult lockResult; - private WizardCloseResourceController wc; - private CloseableModalController cmc; - - //different instances for "copy" and "settings change", since it is important to know what triggered the CLOSE_MODAL_EVENT - private CloseableModalController copyCloseableModalController; - private CloseableModalController settingsCloseableModalController; - //fxdiff FXOLAT-128: back/resume function - public static final Event LAUNCHED_EVENT = new Event("lr-launched"); - - private final ACService acService; - private final BaseSecurity securityManager; - private final UserManager userManager; - private final MarkManager markManager; - private final RepositoryModule repositoryModule; - private final RepositoryService repositoryService; - - /** - * Controller displaying details of a given repository entry. - * - * @param ureq - * @param wControl - * @param mainPanel - */ - public RepositoryDetailsController(UserRequest ureq, WindowControl wControl) { - super(ureq, wControl); - //sets velocity root and translator to RepositoryManager package - setBasePackage(RepositoryManager.class); - securityManager = CoreSpringFactory.getImpl(BaseSecurity.class); - userManager = CoreSpringFactory.getImpl(UserManager.class); - markManager = CoreSpringFactory.getImpl(MarkManager.class); - acService = CoreSpringFactory.getImpl(ACService.class); - repositoryModule = CoreSpringFactory.getImpl(RepositoryModule.class); - repositoryService = CoreSpringFactory.getImpl(RepositoryService.class); - - if (log.isDebug()){ - log.debug("Constructing ReposityMainController using velocity root " + velocity_root); - } - // main component layed out in panel - main = createVelocityContainer("details"); - - downloadButton = LinkFactory.createButton("details.download", main, this); - downloadButton.setElementCssClass("o_sel_repo_download_button"); - LinkFactory.markDownloadLink(downloadButton); - launchButton = LinkFactory.createButton("details.launch", main, this); - launchButton.setElementCssClass("o_sel_repo_launch_button"); - - backLink = LinkFactory.createLinkBack(main, this); - backLink.setElementCssClass("o_sel_repo_back_button"); - loginLink = LinkFactory.createLink("repo.login", main, this); - loginLink.setElementCssClass("o_sel_repo_login_button"); - - putInitialPanel(main); - } - - /** - * @param ureq - */ - private void checkSecurity(UserRequest ureq) { - if (ureq.getUserSession().getRoles().isOLATAdmin()) { - isOwner = true; - isAuthor = true; - isOlatAdmin = true; - } else { - // load repositoryEntry again because the hibenate object is 'detached'.Otherwise you become an exception when you check owner-group. - Identity identity = ureq.getIdentity(); - Roles roles = ureq.getUserSession().getRoles(); - boolean isInstitutionalResourceManager = !roles.isGuestOnly() - && RepositoryManager.getInstance().isInstitutionalRessourceManagerFor(identity, roles, repositoryEntry); - isOwner = repositoryService.hasRole(ureq.getIdentity(), repositoryEntry, GroupRoles.owner.name()) - | isInstitutionalResourceManager; - isAuthor = roles.isAuthor() | isInstitutionalResourceManager; - isGuestOnly = roles.isGuestOnly(); - isOlatAdmin = false; - } - } - - /** - * @param ureq - */ - private void updateRepositoryEntryView(UserRequest ureq) { - - main.contextPut("isOwner", new Boolean(isOwner)); - main.contextPut("isAuthor", new Boolean(isAuthor)); - main.contextPut("isOlatAdmin", new Boolean(isOlatAdmin)); - main.contextPut("launchableTyp", new Boolean(checkIsRepositoryEntryTypeLaunchable())); - String url = Settings.getServerContextPathURI() + "/url/RepositoryEntry/" + repositoryEntry.getKey(); - main.contextPut("extlink", url); - - String displayName = getDisplayName(ureq.getLocale()); - main.contextPut("title", displayName); - - boolean isLaunchable = checkIsRepositoryEntryLaunchable(ureq); - launchButton.setEnabled(isLaunchable); - launchButton.setTextReasonForDisabling(translate("launch.noaccess")); - downloadButton.setEnabled(repositoryEntry.getCanDownload()); - downloadButton.setTextReasonForDisabling(translate("disabledexportreason")); - - //reset cycle datas - main.contextPut("lfStart", null); - main.contextPut("lfEnd", null); - main.contextPut("lfLabel", null); - main.contextPut("lfSoftKey", null); - main.contextPut("showLf", Boolean.FALSE); - - //fill cycle datas if needed - RepositoryEntryLifecycle cycle = repositoryEntry.getLifecycle(); - if(cycle != null) { - Formatter format = Formatter.getInstance(getLocale()); - if(cycle.getValidFrom() != null) { - main.contextPut("lfStart", format.formatDate(cycle.getValidFrom())); - } - if(cycle.getValidTo() != null) { - main.contextPut("lfEnd", format.formatDate(cycle.getValidTo())); - } - if(!cycle.isPrivateCycle()) { - String label = cycle.getLabel(); - String softKey = cycle.getSoftKey(); - main.contextPut("lfLabel", label); - main.contextPut("lfSoftKey", softKey); - } - main.contextPut("showLf", Boolean.TRUE); - } else if("CourseModule".equals(repositoryEntry.getOlatResource().getResourceableTypeName())) { - main.contextPut("showLf", Boolean.TRUE); - } - - if (repositoryEntry.getDescription() != null) { - String description = repositoryEntry.getDescription(); - - RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry); - VFSContainer mediaContainer = handler.getMediaContainer(repositoryEntry); - if(mediaContainer != null) { - String basePath = registerMapper(ureq, new VFSContainerMapper(mediaContainer.getParentContainer())); - description = FilterFactory.getBaseURLToMediaRelativeURLFilter(basePath) - .filter(description); - } - main.contextPut("description", Formatter.formatLatexFormulas(description)); - } - - VFSLeaf image = repositoryService.getIntroductionImage(repositoryEntry); - if (image != null) { - // display only within 600x300 - everything else looks ugly - ImageComponent ic = new ImageComponent(ureq.getUserSession(), "image"); - ic.setMedia(image); - ic.setMaxWithAndHeightToFitWithin(600, 300); - main.put("image", ic); - main.contextPut("hasImage", Boolean.TRUE); - } else { - main.contextPut("hasImage", Boolean.FALSE); - } - - VFSLeaf video = repositoryService.getIntroductionMovie(repositoryEntry); - if (video != null) { - // display only within 600x300 - everything else looks ugly - ImageComponent ic = new ImageComponent(ureq.getUserSession(), "video"); - ic.setMedia(video); - ic.setMaxWithAndHeightToFitWithin(600, 300); - main.put("video", ic); - main.contextPut("hasVideo", Boolean.TRUE); - } else { - main.contextPut("hasVideo", Boolean.FALSE); - } - - main.contextPut("id", repositoryEntry.getResourceableId()); - main.contextPut("ores_id", repositoryEntry.getOlatResource().getResourceableId()); - main.contextPut("softkey", repositoryEntry.getSoftkey()); - - boolean managed = StringHelper.containsNonWhitespace(repositoryEntry.getExternalId()) - || StringHelper.containsNonWhitespace(repositoryEntry.getExternalRef()) - || repositoryEntry.getManagedFlags().length > 0; - - if(managed) { - main.contextPut("externalId", - repositoryEntry.getExternalId() == null ? "" : repositoryEntry.getExternalId()); - main.contextPut("externalRef", - repositoryEntry.getExternalRef() == null ? "" : repositoryEntry.getExternalRef()); - } - - //add the list of owners - List<Identity> authors = repositoryService.getMembers(repositoryEntry, GroupRoles.owner.name()); - List<String> authorLinkNames = new ArrayList<String>(authors.size()); - int counter = 0; - for(Identity author:authors) { - String authorName = userManager.getUserDisplayName(author); - Link authorLink = LinkFactory.createLink("author_" + counter++, main, this); - authorLink.setCustomDisplayText(StringHelper.escapeHtml(authorName)); - authorLink.setUserObject(author); - authorLinkNames.add(authorLink.getComponentName()); - } - main.contextPut("authorlinknames", authorLinkNames); - - //add the initial author - String initialAuthorName = repositoryEntry.getInitialAuthor(); - List<IdentityShort> initialAuthors = securityManager.findShortIdentitiesByName(Collections.singletonList(initialAuthorName)); - if(!initialAuthors.isEmpty()) { - String authorName = userManager.getUserDisplayName(initialAuthors.get(0)); - Link authorLink = LinkFactory.createLink("author_" + counter++, main, this); - authorLink.setCustomDisplayText(StringHelper.escapeHtml(authorName)); - authorLink.setUserObject(initialAuthors.get(0)); - main.contextPut("initialauthorlinkename", authorLink.getComponentName()); - } - - main.contextPut("userlang", I18nManager.getInstance().getLocaleKey(ureq.getLocale())); - main.contextPut("isGuestAllowed", (repositoryEntry.getAccess() >= RepositoryEntry.ACC_USERS_GUESTS ? Boolean.TRUE : Boolean.FALSE)); - main.contextPut("isGuest", Boolean.valueOf(ureq.getUserSession().getRoles().isGuestOnly())); - - String typeName = repositoryEntry.getOlatResource().getResourceableTypeName(); - StringBuilder typeDisplayText = new StringBuilder(100); - if (typeName != null) { // add image and typename code - typeDisplayText.append("<span class=\"b_with_small_icon_left "); - typeDisplayText.append(RepositoyUIFactory.getIconCssClass(repositoryEntry)); - typeDisplayText.append("\">"); - String tName = ControllerFactory.translateResourceableTypeName(typeName, getLocale()); - typeDisplayText.append(tName); - if (repositoryEntry != null && RepositoryManager.getInstance().createRepositoryEntryStatus(repositoryEntry.getStatusCode()).isClosed()) { - Translator pT = Util.createPackageTranslator(RepositoryEntryStatus.class, ureq.getLocale()); - typeDisplayText.append(" " + "(" + pT.translate("title.prefix.closed") + ")"); - } - typeDisplayText.append("</span>"); - } else { - typeDisplayText.append(translate("cif.type.na")); - } - main.contextPut("type", typeDisplayText.toString()); - - VelocityContainer infopanelVC = createVelocityContainer("infopanel"); - // use fallback translator from REST admin package to import managed flags context help strings - infopanelVC.setTranslator(Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale(), Util.createPackageTranslator(RestapiAdminController.class, ureq.getLocale()))); - // show how many users are currently using this resource - String numUsers; - OLATResourceable ores = repositoryEntry.getOlatResource(); - int cnt = 0; - OLATResourceable courseRunOres = OresHelper.createOLATResourceableInstance(RunMainController.ORES_TYPE_COURSE_RUN, repositoryEntry.getOlatResource().getResourceableId()); - if (ores != null) cnt = CoordinatorManager.getInstance().getCoordinator().getEventBus().getListeningIdentityCntFor(courseRunOres); - numUsers = String.valueOf(cnt); - infopanelVC.contextPut("numUsers", numUsers); - - removeAsListenerAndDispose(displayInfoForm); - displayInfoForm = new DisplayInfoForm(ureq, getWindowControl(), repositoryEntry); - listenTo(displayInfoForm); - main.put("displayform", displayInfoForm.getInitialComponent()); - - infopanelVC.contextPut("isAuthor", Boolean.valueOf(isAuthor)); - infopanelVC.contextPut("isOwner", Boolean.valueOf(isOwner)); - // init handler details - RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry); - infopanelVC.contextPut("iscourse", new Boolean(handler instanceof CourseHandler)); - main.contextPut("iscourse", new Boolean(handler instanceof CourseHandler)); - //brasato:: review why such a type check was necessary - - setCorrupted(false); - if (handler instanceof CourseHandler) { - try { - removeAsListenerAndDispose(courseInfoForm); - courseInfoForm = new DisplayCourseInfoForm(ureq, getWindowControl(), CourseFactory.loadCourse(repositoryEntry.getOlatResource())); - listenTo(courseInfoForm); - infopanelVC.put("CourseInfoForm", courseInfoForm.getInitialComponent()); - } catch(CorruptedCourseException e) { - log.error("", e); - setCorrupted(true); - } - } - - if(managed && StringHelper.containsNonWhitespace(repositoryEntry.getManagedFlagsString())) { - infopanelVC.contextPut("managedflags", repositoryEntry.getManagedFlagsString().trim().split(",")); - } - - removeAsListenerAndDispose(detailsForm); - detailsForm = handler.createDetailsForm(ureq, getWindowControl(), repositoryEntry.getOlatResource()); - if (detailsForm != null) { // push handler specific details view - listenTo(detailsForm); - infopanelVC.contextPut("hasHandlerDetails", Boolean.valueOf("true")); - infopanelVC.put("handlerDetails", detailsForm.getInitialComponent()); - } else { - infopanelVC.contextRemove("hasHandlerDetails"); - } - // init reference usage - // Where is it in use - String referenceDetails = ReferenceManager.getInstance().getReferencesToSummary(repositoryEntry.getOlatResource(), ureq.getLocale()); - if (referenceDetails != null) { - infopanelVC.contextPut("referenceDetails", referenceDetails); - } else { - infopanelVC.contextRemove("referenceDetails"); - } - - // Number of launches - String numLaunches = String.valueOf(repositoryEntry.getStatistics().getLaunchCounter()); - infopanelVC.contextPut("numLaunches", numLaunches); - - // Number of downloads - String numDownloads; - if (repositoryEntry.getCanDownload()) { - numDownloads = String.valueOf(repositoryEntry.getStatistics().getDownloadCounter()); - } else { - numDownloads = translate("cif.canDownload.na"); - } - - infopanelVC.contextPut("numDownloads", numDownloads); - - if (repositoryEntry.getStatistics().getLastUsage() != null) { - infopanelVC.contextPut("lastUsage", repositoryEntry.getStatistics().getLastUsage()); - } else { - infopanelVC.contextPut("lastUsage", translate("cif.lastUsage.na")); - } - - main.put(infopanelVC.getComponentName(), infopanelVC); - - removeAsListenerAndDispose(groupController); - Group group = repositoryService.getDefaultGroup(repositoryEntry); - groupController = new GroupController(ureq, getWindowControl(), false, true, false, false, true, false, group, GroupRoles.owner.name()); - listenTo(groupController); - - main.put("ownertable", groupController.getInitialComponent()); - } - - public void setCorrupted(boolean corrupted) { - this.corrupted = corrupted; - downloadButton.setEnabled(!corrupted); - launchButton.setEnabled(!corrupted); - main.contextPut("corrupted", new Boolean(corrupted)); - } - - /** - * @param ureq - * @param newToolController - */ - private void updateView(UserRequest ureq) { - checkSecurity(ureq); - updateRepositoryEntryView(ureq); - updateDetailsToolC(ureq); - updateCategoriesTableC(ureq); - } - - - private void updateCategoriesTableC(UserRequest ureq) { - // load category links - removeAsListenerAndDispose(repoEntryCategoriesTableController); - repoEntryCategoriesTableController = new RepoEntryCategoriesTableController(ureq, getWindowControl(), this.repositoryEntry, (isOlatAdmin || isOwner)); - listenTo(repoEntryCategoriesTableController); - main.put("repoEntryCategoriesTable", repoEntryCategoriesTableController.getInitialComponent()); - } - /** - * @param newToolController - */ - private void updateDetailsToolC(UserRequest ureq) { - boolean isNewController = false; - if (detailsToolC == null) { - detailsToolC = ToolFactory.createToolController(getWindowControl()); - listenTo(detailsToolC); - isNewController = true; - } - // init handler details - RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry); - if (isNewController) { - detailsToolC.addHeader(translate("tools.details.header")); - detailsToolC.addLink(ACTION_LAUNCH, translate("details.launch"), TOOL_LAUNCH, null, "o_sel_repo_launch", false); - } - detailsToolC.setEnabled(TOOL_LAUNCH, checkIsRepositoryEntryLaunchable(ureq) && !corrupted); - if (!isGuestOnly) { - if (isNewController) { - //mark as download link - detailsToolC.addLink(ACTION_DOWNLOAD, translate("details.download"), TOOL_DOWNLOAD, null, "o_sel_repo_download", true); - detailsToolC.addLink(ACTION_DOWNLOAD_BACKWARD_COMPAT, translate("details.download.compatible"), TOOL_DOWNLOAD_BACKWARD_COMPAT, - null, "o_sel_repo_download_backward", true); - //bookmark - boolean marked = markManager.isMarked(repositoryEntry, getIdentity(), null); - String css = marked ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE; - detailsToolC.addLink(ACTION_BOOKMARK, translate("details.bookmark"), TOOL_BOOKMARK, css); - } - boolean canDownload = repositoryEntry.getCanDownload() && handler.supportsDownload(repositoryEntry); - // disable download for courses if not author or owner - if (repositoryEntry.getOlatResource().getResourceableTypeName().equals(CourseModule.getCourseTypeName()) - && !(isOwner || isAuthor)) canDownload = false; - // always enable download for owners - if (isOwner && handler.supportsDownload(repositoryEntry)) { - canDownload = true; - } - detailsToolC.setEnabled(TOOL_DOWNLOAD, canDownload && !corrupted); - detailsToolC.setEnabled(TOOL_DOWNLOAD_BACKWARD_COMPAT, canDownload && !corrupted - && "CourseModule".equals(repositoryEntry.getOlatResource().getResourceableTypeName())); - detailsToolC.setEnabled(TOOL_BOOKMARK, !corrupted); - } - //fxdiff VCRP-1 : moved some things around here to split large toolbox into smaller pieces - if (isNewController) - detailsToolC.addLink(ACTION_CLOSE, translate("details.close"), null, "b_toolbox_close"); - - if (isAuthor || isOwner) { - if (isNewController) { - detailsToolC.addHeader(translate("edit")); - } - boolean canCopy = repositoryEntry.getCanCopy(); - if (isOwner) { - if (isNewController) { - detailsToolC.addLink(ACTION_EDIT, translate("details.openeditor"), TOOL_EDIT, null, "o_sel_repo_open_editor", false); - detailsToolC.addLink(ACTION_EDITDESC, translate("details.chdesc"), TOOL_CHDESC, null, "o_sel_repo_edit_descritpion", false); - detailsToolC.addLink(ACTION_EDITPROP, translate("details.chprop"), TOOL_CHPROP, null, "o_sel_repor_edit_properties", false); - if(repositoryModule.isCatalogEnabled()) { - detailsToolC.addLink(ACTION_ADD_CATALOG, translate("details.catadd"), TOOL_CATALOG, null, "o_sel_repo_add_to_catalog", false); - } - detailsToolC.addHeader(translate("table.action")); - - boolean closeManaged = RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.close); - if ((OresHelper.isOfType(repositoryEntry.getOlatResource(), CourseModule.class)) - && !closeManaged - && (!RepositoryManager.getInstance().createRepositoryEntryStatus(repositoryEntry.getStatusCode()).isClosed())) { - detailsToolC.addLink(ACTION_CLOSE_RESSOURCE, translate("details.close.ressoure"), TOOL_CLOSE_RESSOURCE, null, "o_sel_repo_close_resource", false); - if(corrupted) { - detailsToolC.setEnabled(TOOL_CLOSE_RESSOURCE, false); - } - } - } - // update catalog link - if(repositoryModule.isCatalogEnabled()) { - boolean addCatalogEnabled = !corrupted && - (repositoryEntry.getAccess() >= RepositoryEntry.ACC_USERS || - repositoryEntry.isMembersOnly()); - detailsToolC.setEnabled(TOOL_CATALOG, addCatalogEnabled); - } - } - if (isNewController) { - if(isAuthor) { - detailsToolC.addLink(ACTION_COPY, translate("details.copy"), TOOL_COPY, null, "o_sel_repo_copy", false); - } - } - if (isOwner) { - if (isNewController) { - detailsToolC.addLink(ACTION_DELETE, translate("details.delete"), TOOL_DELETE, null, "o_sel_repo_delete", false); - detailsToolC.addHeader(translate("details.members")); - detailsToolC.addLink(ACTION_MEMBERS, translate("details.members"), null, null, "o_sel_repo_members", false); - detailsToolC.addLink(ACTION_ORDERS, translate("details.orders"), TOOL_ORDERS, null, "o_sel_repo_booking", false); - } - - if(detailsToolC.hasTool(TOOL_DELETE)) { - boolean deleteManaged = RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.delete); - detailsToolC.setEnabled(TOOL_DELETE, !deleteManaged); - } - - if(detailsToolC.hasTool(TOOL_ORDERS)) { - boolean booking = acService.isResourceAccessControled(repositoryEntry.getOlatResource(), null); - detailsToolC.setEnabled(TOOL_ORDERS, booking); - } - - // enable - boolean editManaged = RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.editcontent); - detailsToolC.setEnabled(TOOL_EDIT, handler.supportsEdit(repositoryEntry) && !corrupted && !editManaged); - detailsToolC.setEnabled(TOOL_CHDESC, !corrupted); - detailsToolC.setEnabled(TOOL_CHPROP, !corrupted); - - canCopy = true; - } - if(isAuthor) { - boolean copyManaged = RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.copy); - detailsToolC.setEnabled(TOOL_COPY, canCopy && !corrupted && !copyManaged); - } - } - } - - /** - * Sets a repository entry for this details controller. Returns a - * corresponding tools controller - * - * @param entry - * @param ureq - * @return A tool controller representing available tools for the given entry. - */ - public ToolController setEntry(RepositoryEntry entry, UserRequest ureq) { - this.corrupted = false;//reset the flag - if (repositoryEntry != null) { - // The controller has already a repository-entry => do de-register it - CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, repositoryEntry); - } - repositoryEntry = entry; - CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), repositoryEntry); - checkSecurity(ureq); - removeAsListenerAndDispose(detailsToolC); - detailsToolC = null; // force recreation of tool controller - updateView(ureq); - return detailsToolC; - } - - /** - * @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) - */ - public void event(UserRequest ureq, Component source, Event event) { - String cmd = event.getCommand(); - - if (source == main) { - if (cmd.equals(ACTION_DETAILSEDIT)) { - // detailsForm.setDisplayOnly(false); - main.contextPut("enableEdit", Boolean.valueOf(false)); // disable edit - } else if (cmd.equals(ACTION_CLOSE)) { // close details - doCloseDetailView(ureq); - } else if (cmd.equals(ACTION_LAUNCH)) { // launch resource - - } - } else if (source instanceof Link) { - Link sourceLink = (Link)source; - if (sourceLink == backLink){ - doCloseDetailView(ureq); - return; - } else if (sourceLink == downloadButton){ - doDownload(ureq, repositoryEntry, false); - } else if (sourceLink == launchButton){ - doLaunch(ureq, repositoryEntry); - } else if (sourceLink == loginLink){ - DispatcherModule.redirectToDefaultDispatcher(ureq.getHttpResp()); - } else if (sourceLink.getUserObject() instanceof IdentityShort) { - IdentityShort author = (IdentityShort)sourceLink.getUserObject(); - String businessPath = "[Identity:" + author.getKey() + "]"; - NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl()); - } - } - } - - @Override - public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { - if(entries == null || entries.isEmpty()) return; - - } - - private void doCloseDetailView(UserRequest ureq) { - doLaunch(ureq, repositoryEntry); - } - - void deleteRepositoryEntry(UserRequest ureq, WindowControl wControl, RepositoryEntry entry) { - if (RepositoryManager.getInstance().deleteRepositoryEntryWithAllData( ureq, wControl, repositoryEntry ) ) { - fireEvent(ureq, new EntryChangedEvent(entry, EntryChangedEvent.DELETED)); - showInfo("info.entry.deleted"); - } else { - showInfo("info.could.not.delete.entry"); - } - } - - /** - * Get displayname of a repository entry. If repository entry a course - * and is this course closed then add a prefix to the title. - */ - private String getDisplayName(Locale locale) { - // load repositoryEntry again because the hibernate object is 'detached'. - // Otherwise you become an exception when you check owner-group. - repositoryEntry = (RepositoryEntry) DBFactory.getInstance().loadObject(repositoryEntry); - String displayName = repositoryEntry.getDisplayname(); - if (repositoryEntry != null && RepositoryManager.getInstance().createRepositoryEntryStatus(repositoryEntry.getStatusCode()).isClosed()) { - Translator pT = Util.createPackageTranslator(RepositoryEntryStatus.class, locale); - displayName = "[" + pT.translate("title.prefix.closed") + "] ".concat(displayName); - } - - return displayName; - } - - /** - * Also used by RepositoryMainController - * - * @param ureq - */ - boolean doLaunch(UserRequest ureq, RepositoryEntry re) { - RepositoryHandler typeToLaunch = RepositoryHandlerFactory.getInstance().getRepositoryHandler(re); - if (typeToLaunch == null){ - StringBuilder sb = new StringBuilder(translate("error.launch")); - sb.append(": No launcher for repository entry: "); - sb.append(re.getKey()); - throw new OLATRuntimeException(RepositoryDetailsController.class,sb.toString(), null); - } - if (RepositoryManager.getInstance().lookupRepositoryEntry(re.getKey()) == null) { - showInfo("info.entry.deleted"); - return false; - } - - try { - String businessPath = "[RepositoryEntry:" + re.getKey() + "]"; - boolean ok = NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl()); - if(ok) { - fireEvent(ureq, LAUNCHED_EVENT); - } - return ok; - } catch (CorruptedCourseException e) { - logError("Corrupted course: " + re, e); - return false; - } - } - - private boolean checkIsRepositoryEntryLaunchable(UserRequest ureq) { - RepositoryHandler type = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry); - RepositoryManager rm = RepositoryManager.getInstance(); - - if (rm.isAllowedToLaunch(ureq, repositoryEntry) || (type.supportsLaunch(repositoryEntry) && ureq.getUserSession().getRoles().isOLATAdmin())) { - return true; - } - return false; - } - - private boolean checkIsRepositoryEntryTypeLaunchable() { - RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry); - return handler.supportsLaunch(repositoryEntry); - } - - /** - * Activates the closeableModalController with the input controller's component, if not null - * @param ureq - * @param contentController - */ - private void doEditSettings(UserRequest ureq, Controller contentController, String title) { - if (!isAuthor && !isOwner) { - throw new OLATSecurityException("Trying to edit properties , but user is not author: user = " + ureq.getIdentity()); - } - - Component component = contentController.getInitialComponent(); - - if(component!=null) { - removeAsListenerAndDispose(settingsCloseableModalController); - settingsCloseableModalController = new CloseableModalController(getWindowControl(), translate("close"), - contentController.getInitialComponent(), true, title); - listenTo(settingsCloseableModalController); - - settingsCloseableModalController.activate(); - } - return; - } - - /** - * Also used by RepositoryMainController - * - * @param ureq - */ - void doDownload(UserRequest ureq, RepositoryEntry re, boolean backwardsCompatible) { - RepositoryHandler typeToDownload = RepositoryHandlerFactory.getInstance().getRepositoryHandler(re); - - if (typeToDownload == null){ - StringBuilder sb = new StringBuilder(translate("error.download")); - sb.append(": No download handler for repository entry: "); - sb.append(re.getKey()); - throw new OLATRuntimeException(RepositoryDetailsController.class, sb.toString(), null); - } - OLATResource ores = OLATResourceManager.getInstance().findResourceable(re.getOlatResource()); - if (ores == null) { - showError("error.download"); - return; - } - boolean isAlreadyLocked = typeToDownload.isLocked(ores); - try { - lockResult = typeToDownload.acquireLock(ores, ureq.getIdentity()); - if(lockResult==null || (lockResult!=null && lockResult.isSuccess() && !isAlreadyLocked)) { - MediaResource mr = typeToDownload.getAsMediaResource(ores, backwardsCompatible); - if(mr!=null) { - repositoryService.incrementDownloadCounter(re); - ureq.getDispatchResult().setResultingMediaResource(mr); - } else { - showError("error.export"); - fireEvent(ureq, Event.FAILED_EVENT); - } - } else if(lockResult!=null && lockResult.isSuccess() && isAlreadyLocked) { - String fullName = userManager.getUserDisplayName(lockResult.getOwner()); - showInfo("warning.course.alreadylocked.bySameUser", fullName); - lockResult = null; //invalid lock, it was already locked - } else { - String fullName = userManager.getUserDisplayName(lockResult.getOwner()); - showInfo("warning.course.alreadylocked", fullName); - } - } - finally { - if((lockResult!=null && lockResult.isSuccess() && !isAlreadyLocked)) { - typeToDownload.releaseLock(lockResult); - lockResult = null; - } - } - } - - - /** - * Also used by RepositoryMainController - * - * @param ureq - */ - void doEdit(UserRequest ureq) { - if (!isOwner) throw new OLATSecurityException("Trying to launch editor, but not allowed: user = " + ureq.getIdentity()); - doEdit(ureq, repositoryEntry); - } - - public static void doEdit(UserRequest ureq, RepositoryEntry re) { - RepositoryHandler typeToEdit = RepositoryHandlerFactory.getInstance().getRepositoryHandler(re); - if (!typeToEdit.supportsEdit(re)){ - throw new AssertException("Trying to edit repository entry which has no assoiciated editor: "+ typeToEdit); - } - - OLATResourceable ores = re.getOlatResource(); - BusinessControlFactory bcFactory = BusinessControlFactory.getInstance(); - - //was brasato:: DTabs dts = getWindowControl().getDTabs(); - DTabs dts = Windows.getWindows(ureq).getWindow(ureq).getDTabs(); - DTab dt = dts.getDTab(ores); - if (dt == null) { - // does not yet exist -> create and add - dt = dts.createDTab(ores, re, re.getDisplayname()); - if (dt == null){ - //null means DTabs are full -> warning is shown - return; - } - //user activity logger is set by course factory - ContextEntry entry = bcFactory.createContextEntry(re); - WindowControl swControl = bcFactory.createBusinessWindowControl(entry, dt.getWindowControl()); - Controller editorController = typeToEdit.createEditorController(re, ureq, swControl); - if(editorController == null){ - //editor could not be created -> warning is shown - return; - } - dt.setController(editorController); - dts.addDTab(ureq, dt); - } - List<ContextEntry> entries = bcFactory.createCEListFromResourceType(RepositoryDetailsController.ACTIVATE_EDITOR); - dts.activate(ureq, dt, entries); - } - - - /** - * Internal helper to initiate the add to catalog workflow - * @param ureq - */ - private void doAddCatalog(UserRequest ureq) { - removeAsListenerAndDispose(catalogAdddController); - removeAsListenerAndDispose(closeableModalController); - - catalogAdddController = new CatalogEntryAddController(ureq, getWindowControl(), - repositoryEntry, true, false); - listenTo(catalogAdddController); - closeableModalController = new CloseableModalController(getWindowControl(), "close", - catalogAdddController.getInitialComponent(), true, translate("details.catadd")); - listenTo(closeableModalController); - closeableModalController.activate(); - } - - /** - * @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) - */ - public void event(UserRequest ureq, Controller source, Event event) { - if (repositoryEntry != null) { - repositoryEntry = RepositoryManager.getInstance().lookupRepositoryEntry(repositoryEntry.getKey()); - } - String cmd = event.getCommand(); - if (source == ordersController) { - // - } else if (source == detailsToolC) { - if (cmd.equals(ACTION_DOWNLOAD)) { // download - doDownload(ureq, repositoryEntry, false); - return; - } else if (cmd.equals(ACTION_DOWNLOAD_BACKWARD_COMPAT)) { - doDownload(ureq, repositoryEntry, true); - } else if (cmd.equals(ACTION_LAUNCH)) { // launch resource - doLaunch(ureq, repositoryEntry); - return; - } else if (cmd.equals(ACTION_EDIT)) { // start editor - doEdit(ureq); - return; - } else if (cmd.equals(ACTION_EDITDESC)) { // change description - removeAsListenerAndDispose(repositoryEditDescriptionController); - repositoryEditDescriptionController = new RepositoryEditDescriptionController(ureq, getWindowControl(), repositoryEntry, false); - listenTo(repositoryEditDescriptionController); - String title = translate("properties.for", new String[]{ repositoryEntry.getDisplayname() }); - doEditSettings(ureq, repositoryEditDescriptionController, title); - return; - } else if (cmd.equals(ACTION_ADD_CATALOG)) { // start add to catalog workflow - if(repositoryModule.isCatalogEnabled()) { - doAddCatalog(ureq); - } - return; - } else if (cmd.equals(ACTION_CLOSE)) { - doCloseDetailView(ureq); - return; - } else if (cmd.equals(ACTION_BOOKMARK)) { - boolean marked = markManager.isMarked(repositoryEntry, getIdentity(), null); - if(marked) { - markManager.removeMark(repositoryEntry, getIdentity(), null); - } else { - String businessPath = "[RepositoryEntry:" + repositoryEntry.getKey() + "]"; - markManager.setMark(repositoryEntry, getIdentity(), null, businessPath); - } - String css = marked ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE; - detailsToolC.setCssClass(TOOL_BOOKMARK, css); - } else if (cmd.equals(ACTION_MEMBERS)) { // membership - if (!isOwner) throw new OLATSecurityException("Trying to access groupmanagement, but not allowed: user = " + ureq.getIdentity()); - removeAsListenerAndDispose(cmc); - removeAsListenerAndDispose(membersEditController); - - membersEditController = new RepositoryMembersController(ureq, getWindowControl(), repositoryEntry); - listenTo(membersEditController); - CloseableModalController cmc = new CloseableModalController(getWindowControl(), translate("close"), - membersEditController.getInitialComponent(), true, translate("details.members")); - listenTo(cmc); - cmc.activate(); - return; - } else if (cmd.equals(ACTION_ORDERS)) { - doOrders(ureq); - return; - } else if (cmd.equals(ACTION_CLOSE_RESSOURCE)) { - doCloseResource(ureq); - return; - } else if (cmd.equals(ACTION_DELETE)) { // delete - if (!isOwner) throw new OLATSecurityException("Trying to delete, but not allowed: user = " + ureq.getIdentity()); - doDelete(ureq); - return; - } - } else if (source == wc) { - if (event == Event.CANCELLED_EVENT) { - cmc.deactivate(); - - } else if (event == Event.DONE_EVENT) { - cmc.deactivate(); - - removeAsListenerAndDispose(detailsToolC); - detailsToolC = null; // force recreation of tool controller - repositoryEntry = RepositoryManager.getInstance().lookupRepositoryEntry(repositoryEntry.getKey()); - - updateView(ureq); - fireEvent(ureq, Event.CHANGED_EVENT); - } - } else if (source == repositoryEditDescriptionController) { - if (event == Event.CHANGED_EVENT || event == Event.DONE_EVENT) { - // RepositoryEntry changed - RepositoryEntry re = repositoryEditDescriptionController.getRepositoryEntry(); - repositoryEntry = RepositoryManager.getInstance().setDescriptionAndName(repositoryEntry, - re.getDisplayname(), re.getAuthors(), re.getDescription(), - re.getObjectives(), re.getRequirements(), re.getCredits(), - re.getMainLanguage(), re.getExpenditureOfWork(), re.getLifecycle()); - // do not close upon save/upload image closeableModalController.deactivate(); - updateView(ureq); - } else if (event == Event.CANCELLED_EVENT) { - removeAsListenerAndDispose(repositoryEditDescriptionController); - repositoryEntry = repositoryEditDescriptionController.getRepositoryEntry(); - } - settingsCloseableModalController.deactivate(); - } else if (source == deleteDialogController){ - if (DialogBoxUIFactory.isYesEvent(event)){ - deleteRepositoryEntry(ureq, getWindowControl(), this.repositoryEntry); - } - } else if (source == catalogAdddController) { - // finish modal dialog and reload categories list controller - closeableModalController.deactivate(); - updateCategoriesTableC(ureq); - } - } - - private void doOrders(UserRequest ureq) { - removeAsListenerAndDispose(ordersController); - - ordersController = new OrdersAdminController(ureq, getWindowControl(), repositoryEntry.getOlatResource()); - listenTo(ordersController); - - removeAsListenerAndDispose(cmc); - CloseableModalController cmc = new CloseableModalController(getWindowControl(), translate("close"), ordersController.getInitialComponent()); - listenTo(cmc); - - cmc.activate(); - } - - /** - * @param ureq - */ - private void doCloseResource(UserRequest ureq) { - RepositoryHandler repoHandler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry); - - removeAsListenerAndDispose(wc); - wc = repoHandler.createCloseResourceController(ureq, getWindowControl(), repositoryEntry); - listenTo(wc); - - wc.startWorkflow(); - - removeAsListenerAndDispose(cmc); - cmc = new CloseableModalController(getWindowControl(), translate("close"), wc.getInitialComponent()); - listenTo(cmc); - - cmc.activate(); - } - - private void doDelete(UserRequest ureq) { - //show how many users are currently using this resource - - String dialogTitle = translate("del.header", repositoryEntry.getDisplayname()); - OLATResourceable courseRunOres = OresHelper.createOLATResourceableInstance(RunMainController.ORES_TYPE_COURSE_RUN, repositoryEntry.getOlatResource().getResourceableId()); - int cnt = CoordinatorManager.getInstance().getCoordinator().getEventBus().getListeningIdentityCntFor(courseRunOres); - - String dialogText = translate(corrupted ? "del.confirm.corrupted" : "del.confirm", String.valueOf(cnt)); - deleteDialogController = activateYesNoDialog(ureq, dialogTitle, dialogText, deleteDialogController); - } - - /** - * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) - */ - protected void doDispose() { - if(lockResult!=null) { - //the lock it is assumed to be released after export/copy operation, but release it anyway in case it failed to release - if (repositoryEntry != null) { - RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry).releaseLock(lockResult); - } - lockResult = null; - } - if (repositoryEntry != null) { - CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, repositoryEntry); - } - if(copyCloseableModalController!=null) { - copyCloseableModalController.dispose(); - copyCloseableModalController = null; - } - if(settingsCloseableModalController!=null) { - settingsCloseableModalController.dispose(); - settingsCloseableModalController = null; - } - } - - public void event(Event event) { - if (event instanceof EntryChangedEvent) { - repositoryEntry = RepositoryManager.getInstance().lookupRepositoryEntry(repositoryEntry.getKey()); - } - } - - /** - * - * @return - */ - public ToolController getDetailsToolController() { - return detailsToolC; - } - -} \ No newline at end of file diff --git a/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java b/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java index 7f9c7fc3427ab4518ec0b4e98e2a531bcc66b373..4a5fabb5da2bf276614ac8ad44d8110925835b91 100644 --- a/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java +++ b/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java @@ -32,7 +32,7 @@ import java.util.List; import java.util.Set; import java.util.UUID; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.core.CoreSpringFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; @@ -163,7 +163,7 @@ public class RepositoryEditDescriptionController extends FormBasicController { typeDisplayText.append("<span class=\"b_with_small_icon_left "); typeDisplayText.append(RepositoyUIFactory.getIconCssClass(repositoryEntry)); typeDisplayText.append("\">"); - String tName = ControllerFactory.translateResourceableTypeName(typeName, getLocale()); + String tName = NewControllerFactory.translateResourceableTypeName(typeName, getLocale()); typeDisplayText.append(tName); typeDisplayText.append("</span>"); } else { diff --git a/src/main/java/org/olat/repository/handlers/WikiHandler.java b/src/main/java/org/olat/repository/handlers/WikiHandler.java index c24e37a3e07eb1027b3944996e028f92047ed1ed..7c3e6b66e787c40ee52d0988cd935cf6738fa44e 100644 --- a/src/main/java/org/olat/repository/handlers/WikiHandler.java +++ b/src/main/java/org/olat/repository/handlers/WikiHandler.java @@ -219,7 +219,7 @@ public class WikiHandler implements RepositoryHandler { @Override public boolean supportsEdit(RepositoryEntry repoEntry) { - return false; + return true; } @Override @@ -281,8 +281,7 @@ public class WikiHandler implements RepositoryHandler { @Override public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) { - //edit is always part of a wiki - return null; + return createLaunchController(re, ureq, wControl); } @Override diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java index cf8f2f32dba67e240b3289d4cfa7360ed16e5bac..872adee214a39c735cc60948b54667d930eba549 100644 --- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java +++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java @@ -26,7 +26,6 @@ import org.olat.NewControllerFactory; import org.olat.basesecurity.GroupRoles; import org.olat.catalog.CatalogEntry; import org.olat.catalog.CatalogManager; -import org.olat.catalog.ui.CatalogEntryAddController; import org.olat.core.commons.services.commentAndRating.CommentAndRatingDefaultSecurityCallback; import org.olat.core.commons.services.commentAndRating.CommentAndRatingSecurityCallback; import org.olat.core.commons.services.commentAndRating.ui.UserCommentsController; @@ -116,11 +115,11 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme private CloseableModalController cmc; private WizardCloseResourceController wc; private OrdersAdminController ordersCtlr; - private Controller catalogAdddController; private UserCommentsController commentsCtrl; private DialogBoxController deleteDialogCtrl; - private AuthoringEditEntrySettingsController editCtrl; + private CatalogSettingsController catalogCtlr; private CopyRepositoryEntryController copyCtrl; + private AuthoringEditEntrySettingsController editCtrl; private RepositoryMembersController membersEditController; private final TooledStackedPanel stackPanel; @@ -225,7 +224,7 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme editSettingsLink.setEnabled(!corrupted); if(repositoryModule.isCatalogEnabled()) { - catalogLink = LinkFactory.createToolLink("cat", translate("details.catadd"), this, "o_sel_repo_add_to_catalog"); + catalogLink = LinkFactory.createToolLink("cat", translate("details.categoriesheader"), this, "o_sel_repo_add_to_catalog"); catalogLink.setEnabled(!corrupted && (entry.getAccess() >= RepositoryEntry.ACC_USERS || entry.isMembersOnly())); } @@ -454,9 +453,6 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme if (DialogBoxUIFactory.isYesEvent(event)){ deleteRepositoryEntry(ureq, getWindowControl()); } - } else if (source == catalogAdddController) { - // finish modal dialog and reload categories list controller - cmc.deactivate(); } else if(copyCtrl == source) { cmc.deactivate(); if (event == Event.DONE_EVENT) { @@ -501,17 +497,17 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme } private void cleanUp() { - removeAsListenerAndDispose(catalogAdddController); removeAsListenerAndDispose(membersEditController); removeAsListenerAndDispose(deleteDialogCtrl); removeAsListenerAndDispose(commentsCtrl); + removeAsListenerAndDispose(catalogCtlr); removeAsListenerAndDispose(ordersCtlr); removeAsListenerAndDispose(editCtrl); removeAsListenerAndDispose(cmc); removeAsListenerAndDispose(wc); - catalogAdddController = null; deleteDialogCtrl = null; commentsCtrl = null; + catalogCtlr = null; ordersCtlr = null; editCtrl = null; cmc = null; @@ -696,14 +692,8 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme * @param ureq */ private void doAddCatalog(UserRequest ureq) { - if(catalogAdddController != null) return; - - catalogAdddController = new CatalogEntryAddController(ureq, getWindowControl(), entry, true, false); - listenTo(catalogAdddController); - cmc = new CloseableModalController(getWindowControl(), "close", - catalogAdddController.getInitialComponent(), true, translate("details.catadd")); - listenTo(cmc); - cmc.activate(); + catalogCtlr = new CatalogSettingsController(ureq, getWindowControl(), stackPanel, entry); + listenTo(catalogCtlr); } private void deleteRepositoryEntry(UserRequest ureq, WindowControl wControl) { diff --git a/src/main/java/org/olat/repository/ui/author/CatalogSettingsController.java b/src/main/java/org/olat/repository/ui/author/CatalogSettingsController.java new file mode 100644 index 0000000000000000000000000000000000000000..f83e1013e90fff92e6e7ba9248f2857dfa6b00e6 --- /dev/null +++ b/src/main/java/org/olat/repository/ui/author/CatalogSettingsController.java @@ -0,0 +1,129 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.repository.ui.author; + +import org.olat.catalog.ui.CatalogEntryAddController; +import org.olat.core.gui.UserRequest; +import org.olat.core.gui.components.Component; +import org.olat.core.gui.components.form.flexible.FormItemContainer; +import org.olat.core.gui.components.form.flexible.impl.FormBasicController; +import org.olat.core.gui.components.link.Link; +import org.olat.core.gui.components.link.LinkFactory; +import org.olat.core.gui.components.stack.TooledStackedPanel; +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.closablewrapper.CloseableModalController; +import org.olat.core.util.Util; +import org.olat.repository.RepositoryEntry; +import org.olat.repository.RepositoryService; + +/** + * + * Initial date: 09.05.2014<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class CatalogSettingsController extends FormBasicController { + + private Link addToCatalogLink; + + private CloseableModalController cmc; + private Controller catalogAdddController; + + private RepositoryEntry entry; + + public CatalogSettingsController(UserRequest ureq, WindowControl wControl, + TooledStackedPanel stackPanel, RepositoryEntry entry) { + super(ureq, wControl); + setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator())); + this.entry = entry; + + initForm(ureq); + + stackPanel.pushController(translate("details.categoriesheader"), this); + addToCatalogLink = LinkFactory.createToolLink("addtocat", "", this); + + addToCatalogLink = LinkFactory.createToolLink("cat", translate("details.catadd"), this, "o_sel_repo_add_to_catalog"); + addToCatalogLink.setEnabled((entry.getAccess() >= RepositoryEntry.ACC_USERS || entry.isMembersOnly())); + stackPanel.addTool(addToCatalogLink); + } + + @Override + protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { + // + } + + @Override + protected void doDispose() { + // + } + + @Override + public void event(UserRequest ureq, Component source, Event event) { + if(addToCatalogLink == source) { + doAddCatalog(ureq); + } + super.event(ureq, source, event); + } + + @Override + protected void event(UserRequest ureq, Controller source, Event event) { + if(cmc == source) { + cleanUp(); + } else if(catalogAdddController == source) { + cmc.deactivate(); + + cleanUp(); + } + super.event(ureq, source, event); + } + + private void cleanUp() { + removeAsListenerAndDispose(catalogAdddController); + removeAsListenerAndDispose(cmc); + catalogAdddController = null; + cmc = null; + } + + @Override + protected void formOK(UserRequest ureq) { + // + } + + /** + * Internal helper to initiate the add to catalog workflow + * @param ureq + */ + private void doAddCatalog(UserRequest ureq) { + removeAsListenerAndDispose(catalogAdddController); + removeAsListenerAndDispose(cmc); + + catalogAdddController = new CatalogEntryAddController(ureq, getWindowControl(), entry, true, false); + listenTo(catalogAdddController); + cmc = new CloseableModalController(getWindowControl(), "close", + catalogAdddController.getInitialComponent(), true, translate("details.catadd")); + listenTo(cmc); + cmc.activate(); + } + + + +} diff --git a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java index b4a372b8971bed86533a1637be65e67f5c2a8fea..9b300111dfac7c551ddba2937993e2cbaa2d623e 100644 --- a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java +++ b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java @@ -19,7 +19,7 @@ */ package org.olat.repository.ui.author; -import org.olat.ControllerFactory; +import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; @@ -95,7 +95,7 @@ public class CreateRepositoryEntryController extends FormBasicController { typeDisplayText.append("<span class=\"b_with_small_icon_left "); typeDisplayText.append(RepositoyUIFactory.getIconCssClass(type)); typeDisplayText.append("\">"); - String tName = ControllerFactory.translateResourceableTypeName(type, getLocale()); + String tName = NewControllerFactory.translateResourceableTypeName(type, getLocale()); typeDisplayText.append(tName); typeDisplayText.append("</span>"); } else { diff --git a/src/main/java/org/olat/user/HomePageContextEntryControllerCreator.java b/src/main/java/org/olat/user/HomePageContextEntryControllerCreator.java index 3c853851e6f13bbe9943793c507a92c0ab9a8942..52e3cf97b8197fe3955987dcf19ee3fa99fdf9bc 100644 --- a/src/main/java/org/olat/user/HomePageContextEntryControllerCreator.java +++ b/src/main/java/org/olat/user/HomePageContextEntryControllerCreator.java @@ -19,6 +19,8 @@ */ package org.olat.user; +import java.util.List; + import org.olat.basesecurity.BaseSecurityManager; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; @@ -56,16 +58,10 @@ public class HomePageContextEntryControllerCreator extends DefaultContextEntryCo * org.olat.core.gui.control.WindowControl) */ @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - Identity identity = extractIdentity(ce); + public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) { + Identity identity = extractIdentity(ces.get(0)); if (identity == null) return null; - UserInfoMainController uimc = new UserInfoMainController(ureq, wControl, identity); - return uimc; - } - - @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { - return null; + return new UserInfoMainController(ureq, wControl, identity); } /** diff --git a/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java b/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java index 0e6cac31526467bf44f17eaba8e91d60caa00ad6..0eeb4a1ce8a8e56a4132acd097271fe2a211df70 100644 --- a/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java +++ b/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java @@ -19,6 +19,8 @@ */ package org.olat.user; +import java.util.List; + import org.olat.basesecurity.BaseSecurityManager; import org.olat.core.gui.UserRequest; import org.olat.core.gui.control.Controller; @@ -58,16 +60,15 @@ public class IdentityContextEntryControllerCreator extends DefaultContextEntryCo * org.olat.core.gui.control.WindowControl) */ @Override - public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) { - Identity identity = getIdentity(ce); + public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) { + Identity identity = getIdentity(ces.get(0)); if (identity == null) return null; - UserInfoMainController uimc = new UserInfoMainController(ureq, wControl, identity); - return uimc; + return new UserInfoMainController(ureq, wControl, identity); } @Override - public String getSiteClassName(ContextEntry ce, UserRequest ureq) { - Long resId = ce.getOLATResourceable().getResourceableId(); + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { + Long resId = ces.get(0).getOLATResourceable().getResourceableId(); if(resId != null && resId.equals(ureq.getIdentity().getKey())) { return HomeSite.class.getName(); } diff --git a/src/main/java/org/olat/user/UserModule.java b/src/main/java/org/olat/user/UserModule.java index 2d301c45a0242f93cd151891f92a916b38b673dd..f6fb888a296b2208e9a96ffdf4b7aa55a12b5852 100644 --- a/src/main/java/org/olat/user/UserModule.java +++ b/src/main/java/org/olat/user/UserModule.java @@ -192,21 +192,19 @@ public class UserModule extends AbstractOLATModule { // Append AfterLoginControllers if any configured - if (afterLoginConfig != null) { - afterLoginInterceptionManager.addAfterLoginControllerConfig(afterLoginConfig); - } + if (afterLoginConfig != null) { + afterLoginInterceptionManager.addAfterLoginControllerConfig(afterLoginConfig); + } } @Override protected void initDefaultProperties() { - // TODO Auto-generated method stub - + // } @Override protected void initFromChangedProperties() { - // TODO Auto-generated method stub - + // } private void checkMandatoryUserProperty(String userPropertyIdentifyer) {