diff --git a/src/main/java/org/olat/core/extensions/ExtManager.java b/src/main/java/org/olat/core/extensions/ExtManager.java index cd0a4e2ddb2f0d5eb7b499a46aead84df9fdc946..8a12c841805286a92a26195c302b9a74a4aa390b 100644 --- a/src/main/java/org/olat/core/extensions/ExtManager.java +++ b/src/main/java/org/olat/core/extensions/ExtManager.java @@ -32,6 +32,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; import org.olat.core.CoreSpringFactory; import org.olat.core.extensions.action.GenericActionExtension; @@ -153,7 +154,7 @@ public class ExtManager extends LogDelegator { int count_disabled = 0; int count_duplid = 0; - int count_duplnavkey = 0; + AtomicInteger count_duplnavkey = new AtomicInteger(0); // first build ordered list for (Extension extension : extensionValues) { @@ -190,13 +191,13 @@ public class ExtManager extends LogDelegator { List<String>extensionPoints = gAE.getExtensionPoints(); for(String extensionPoint:extensionPoints) { ExtensionPointKeyPair key = new ExtensionPointKeyPair(extensionPoint, gAE.getNavigationKey()); - if (navKeyGAExtensionlookup.containsKey(key)) { - count_duplnavkey++; - logInfo( - "Devel-Info :: duplicate navigation-key for extension :: " + gAE.getNavigationKey() + " [ [" + idExtensionlookup.get(uid) - + "] and [" + extension + "] ]", null); - } else { - navKeyGAExtensionlookup.put(key, gAE); + append(key, gAE, count_duplnavkey); + List<String> alternativeNavigationKeys = gAE.getAlternativeNavigationKeys(); + if(alternativeNavigationKeys != null && alternativeNavigationKeys.size() > 0) { + for(String alternativeNavigationKey:alternativeNavigationKeys) { + ExtensionPointKeyPair altKey = new ExtensionPointKeyPair(extensionPoint, alternativeNavigationKey); + append(altKey, gAE, count_duplnavkey); + } } } } @@ -209,7 +210,16 @@ public class ExtManager extends LogDelegator { return extensionsList; } - private class ExtensionPointKeyPair { + private void append(ExtensionPointKeyPair key, GenericActionExtension gAE, AtomicInteger countDuplicate) { + if (navKeyGAExtensionlookup.containsKey(key)) { + logInfo("Devel-Info :: duplicate navigation-key for extension :: " + key.navigationKey, null); + countDuplicate.incrementAndGet(); + } else { + navKeyGAExtensionlookup.put(key, gAE); + } + } + + private static class ExtensionPointKeyPair { private String extensionPoint; private String navigationKey; diff --git a/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java b/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java index 5fe02632488e9b2a17f17b47b30ada88b0a2b75a..435e02a33f45adf5c5156df996b0da3513751801 100644 --- a/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java +++ b/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java @@ -19,6 +19,7 @@ */ package org.olat.core.extensions.action; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -36,6 +37,7 @@ import org.olat.core.gui.translator.PackageTranslator; import org.olat.core.gui.translator.Translator; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.core.util.StringHelper; import org.olat.core.util.i18n.I18nManager; /** @@ -55,10 +57,11 @@ public class GenericActionExtension extends AbstractExtension implements ActionE private String i18nActionKey; private String i18nDescriptionKey; /* - * fxdiff : we use this navigationKey to find the correct actionExtension in a + * We use this navigationKey to find the correct actionExtension in a * genericMainController. (to select the correct tree-entry...) */ private String navigationKey; + private List<String> alternativeNavigationKeys; private List<String> extensionPoints; private String translationPackageName; private String translationPackageNameDerived; @@ -104,7 +107,9 @@ public class GenericActionExtension extends AbstractExtension implements ActionE if(getActionController() instanceof AutoCreator){ sb.append(((AutoCreator) getActionController()).getClassName()).append(":"); } - sb.append(getActionText(I18nManager.getInstance().getLocaleOrDefault(null))).append(":").append(getOrder()).append(":").append(getNavigationKey()); + sb.append(getActionText(I18nManager.getInstance().getLocaleOrDefault(null))) + .append(":").append(getOrder()) + .append(":").append(getNavigationKey()); return sb.toString(); } @@ -140,17 +145,19 @@ public class GenericActionExtension extends AbstractExtension implements ActionE return translator.translate(i18nDescriptionKey); } - public String getNavigationKey(){ + public String getNavigationKey() { return navigationKey; } - - //fxdiff + + public List<String> getAlternativeNavigationKeys() { + return alternativeNavigationKeys; + } + public String getClassNameOfCorrespondingController(){ if(contentControllerClassName == null) return ""; return contentControllerClassName.substring(contentControllerClassName.lastIndexOf(".")+1); } - // fxdiff private Translator createPackageTranslator(Locale loc){ if (translationPackageName==null){ translationPackageName = translationPackageNameDerived; @@ -203,6 +210,15 @@ public class GenericActionExtension extends AbstractExtension implements ActionE this.navigationKey = navKey; } + public void setAlternativeNavigationKeys(String keys) { + if(StringHelper.containsNonWhitespace(keys)) { + alternativeNavigationKeys = new ArrayList<>(); + for(String key:keys.split(",")) { + alternativeNavigationKeys.add(key); + } + } + } + public List<String> getExtensionPoints() { return extensionPoints; } diff --git a/src/main/java/org/olat/core/servlets/OpenOLATServlet.java b/src/main/java/org/olat/core/servlets/OpenOLATServlet.java index 32426a0175dcf320f6d1598e2a99e50326c59be8..d087d167cbee31790a017eb3a0812c611f14872b 100644 --- a/src/main/java/org/olat/core/servlets/OpenOLATServlet.java +++ b/src/main/java/org/olat/core/servlets/OpenOLATServlet.java @@ -122,7 +122,7 @@ public class OpenOLATServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - log.info(req.getMethod() + " :: " + req.getPathInfo()); + //log.info(req.getMethod() + " :: " + req.getPathInfo()); GUIInterna.begin(req); Tracing.setUreq(req); diff --git a/src/main/java/org/olat/core/util/mail/_spring/mailContext.xml b/src/main/java/org/olat/core/util/mail/_spring/mailContext.xml index f7edfd5eaa4f305ddc13775e407cb4b5d93e3731..1444bdfbd03ce3e3ebe1b794bd2640afd6a95b48 100644 --- a/src/main/java/org/olat/core/util/mail/_spring/mailContext.xml +++ b/src/main/java/org/olat/core/util/mail/_spring/mailContext.xml @@ -75,6 +75,7 @@ <bean class="org.olat.core.extensions.action.GenericActionExtension" name="mailBox" init-method="initExtensionPoints" > <property name="order" value="404" /> <property name="navigationKey" value="Mail" /> + <property name="alternativeNavigationKeys" value="Inbox,Outbox" /> <property name="iconCssClass" value="o_icon o_icon-fw o_icon_mail" /> <property name="actionController"> <bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype"> diff --git a/src/main/java/org/olat/home/HomeModule.java b/src/main/java/org/olat/home/HomeModule.java index 4373705dc355c6a7c37714dc8a058950a47f31ad..b6d68d07f073457d745bc6a71659592edfeda128 100644 --- a/src/main/java/org/olat/home/HomeModule.java +++ b/src/main/java/org/olat/home/HomeModule.java @@ -23,7 +23,6 @@ package org.olat.home; import org.olat.NewControllerFactory; import org.olat.core.configuration.AbstractOLATModule; import org.olat.core.configuration.PersistedProperties; -import org.olat.core.id.context.SiteContextEntryControllerCreator; import org.olat.home.controllerCreators.GuestHomeCEControllerCreator; /** @@ -40,7 +39,7 @@ public class HomeModule extends AbstractOLATModule { @Override public void init() { NewControllerFactory.getInstance().addContextEntryControllerCreator(HomeSite.class.getSimpleName(), - new SiteContextEntryControllerCreator(HomeSite.class)); + new HomeSiteContextEntryControllerCreator()); NewControllerFactory.getInstance().addContextEntryControllerCreator("Guest", new GuestHomeCEControllerCreator()); } diff --git a/src/main/java/org/olat/home/HomeSiteContextEntryControllerCreator.java b/src/main/java/org/olat/home/HomeSiteContextEntryControllerCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..b1705d5825131aeb799768f999094935a474ebb2 --- /dev/null +++ b/src/main/java/org/olat/home/HomeSiteContextEntryControllerCreator.java @@ -0,0 +1,46 @@ +/** + * <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.home; + +import java.util.List; + +import org.olat.core.gui.UserRequest; +import org.olat.core.id.context.ContextEntry; +import org.olat.core.id.context.ContextEntryControllerCreator; +import org.olat.core.id.context.DefaultContextEntryControllerCreator; + +/** + * + * Initial date: 16.07.2014<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class HomeSiteContextEntryControllerCreator extends DefaultContextEntryControllerCreator { + + @Override + public ContextEntryControllerCreator clone() { + return this; + } + + @Override + public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) { + return HomeSite.class.getName(); + } +} \ No newline at end of file