From 9b80ee7a9e822c9991e6d685ae0c806f74686bdc Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 25 Aug 2017 14:41:50 +0000 Subject: [PATCH] Redirect to URL with language extension for ccm-navigation git-svn-id: https://svn.libreccm.org/ccm/trunk@4920 8810af33-2d31-482b-a856-94f89814c4df --- .../arsdigita/web/ApplicationFileServlet.java | 5 +++ .../navigation/NavigationConfig.java | 11 ----- .../NavigationConfig_parameter.properties | 4 -- .../navigation/NavigationFileResolver.java | 45 ++++++++++++++++--- 4 files changed, 45 insertions(+), 20 deletions(-) diff --git a/ccm-core/src/com/arsdigita/web/ApplicationFileServlet.java b/ccm-core/src/com/arsdigita/web/ApplicationFileServlet.java index 4326a6aea..bb706e064 100755 --- a/ccm-core/src/com/arsdigita/web/ApplicationFileServlet.java +++ b/ccm-core/src/com/arsdigita/web/ApplicationFileServlet.java @@ -145,6 +145,7 @@ public class ApplicationFileServlet extends BaseApplicationServlet { * @throws ServletException * @throws IOException */ + @Override protected void doService(HttpServletRequest sreq, HttpServletResponse sresp, Application app) @@ -153,6 +154,10 @@ public class ApplicationFileServlet extends BaseApplicationServlet { RequestDispatcher rd = m_resolver.resolve(m_templatePath, sreq, sresp, app); + if (sresp.isCommitted()) { + return; + } + if (rd == null) { if (s_log.isDebugEnabled()) { s_log.debug("No template found, sending 404"); diff --git a/ccm-navigation/src/com/arsdigita/navigation/NavigationConfig.java b/ccm-navigation/src/com/arsdigita/navigation/NavigationConfig.java index dc2382c3f..52537f51c 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/NavigationConfig.java +++ b/ccm-navigation/src/com/arsdigita/navigation/NavigationConfig.java @@ -103,7 +103,6 @@ public final class NavigationConfig extends AbstractConfig { // Quasimodo: End private final Parameter m_dateOrderCategories; private final Parameter m_topLevelDateOrderCategories; - private final Parameter m_useLanguageExtension; /** * Class that provides categories included in menu for any categories that * do not have an alternative provider registered @@ -176,11 +175,6 @@ public final class NavigationConfig extends AbstractConfig { "com.arsdigita.navigation.default_menu_cat_provider", Parameter.OPTIONAL, null); - m_useLanguageExtension = new BooleanParameter( - "com.arsdigita.navigation.use_language_extension", - Parameter.OPTIONAL, - false); - register(m_indexPageCacheLifetime); register(m_generateItemURL); register(m_defaultTemplate); @@ -203,7 +197,6 @@ public final class NavigationConfig extends AbstractConfig { register(m_dateOrderCategories); register(m_topLevelDateOrderCategories); register(m_defaultMenuCatProvider); - register(m_useLanguageExtension); loadInfo(); // Quasimodo: Begin @@ -432,8 +425,4 @@ public final class NavigationConfig extends AbstractConfig { return m_treeCatProvider; } - public Boolean getUseLanguageExtension() { - return (Boolean) get(m_useLanguageExtension); - } - } diff --git a/ccm-navigation/src/com/arsdigita/navigation/NavigationConfig_parameter.properties b/ccm-navigation/src/com/arsdigita/navigation/NavigationConfig_parameter.properties index 916eb7b6b..3a5954bf8 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/NavigationConfig_parameter.properties +++ b/ccm-navigation/src/com/arsdigita/navigation/NavigationConfig_parameter.properties @@ -83,7 +83,3 @@ com.arsdigita.navigation.default_menu_cat_provider.purpose=Class that provides c com.arsdigita.navigation.default_menu_cat_provider.example=com.arsdigita.navigation.ui.category.TreeCatProviderImpl com.arsdigita.navigation.default_menu_cat_provider.format=[class] -com.arsdigita.navigation.use_language_extension.title=Use language extension -com.arsdigita.navigation.use_language_extension.purpose=Use language extension to distiguish language version. -com.arsdigita.navigation.use_language_extension.example=true -com.arsdigita.navigation.use_language_extension.format=[Boolean] \ No newline at end of file diff --git a/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java b/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java index b8bd30e41..3e7030cf0 100755 --- a/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java +++ b/ccm-navigation/src/com/arsdigita/navigation/NavigationFileResolver.java @@ -31,7 +31,9 @@ import org.apache.log4j.Logger; import com.arsdigita.categorization.Category; import com.arsdigita.categorization.CategoryCollection; +import com.arsdigita.cms.CMSConfig; import com.arsdigita.cms.TemplateContext; +import com.arsdigita.dispatcher.DispatcherHelper; import com.arsdigita.domain.DomainCollection; import com.arsdigita.london.terms.Domain; import com.arsdigita.persistence.DataCollection; @@ -45,6 +47,8 @@ import com.arsdigita.web.Web; import com.arsdigita.globalization.GlobalizationHelper; +import java.io.IOException; + /** * Manages the processing of URLs in the Navigation application. * @@ -54,7 +58,8 @@ public class NavigationFileResolver extends DefaultApplicationFileResolver { private static final Logger s_log = Logger.getLogger( NavigationFileResolver.class); private static final String CATEGORY_PATH_ATTR - = NavigationFileResolver.class + ".categoryPath"; + = NavigationFileResolver.class + + ".categoryPath"; // path is set in a cookie, which navigation models may use if they wish public static final String PATH_COOKIE_NAME = "ad_path"; public static final char PATH_COOKIE_SEPARATOR = '|'; @@ -73,12 +78,42 @@ public class NavigationFileResolver extends DefaultApplicationFileResolver { s_log.debug("Resolving " + path); } - if (Navigation.getConfig().getUseLanguageExtension() - && path.matches("(.*)/index\\.[a-zA-Z]{2}")) { - + if (CMSConfig.getInstanceOf().getUseLanguageExtension() + && path.matches("(.*)/index\\.[a-zA-Z]{2}")) { + final String lang = path.substring(path.length() - 2); path = path.substring(0, path.length() - "index.$$".length()); GlobalizationHelper.setSelectedLocale(lang); + } else { + + final String lang; + if (GlobalizationHelper.getSelectedLocale(sreq) == null) { + lang = GlobalizationHelper.getNegotiatedLocale().getLanguage(); + } else { + lang = GlobalizationHelper.getSelectedLocale(sreq).getLanguage(); + } + + final StringBuffer redirectTo = new StringBuffer(); + if (DispatcherHelper.getWebappContext() != null + && !DispatcherHelper.getWebappContext().trim().isEmpty()) { + redirectTo.append(DispatcherHelper.getWebappContext()); + } + + redirectTo + .append("/ccm") + .append(app.getPath()) + .append(path) + .append("index.") + .append(lang); + + + sresp.setHeader("Location", redirectTo.toString()); + try { + sresp.sendError(HttpServletResponse.SC_MOVED_PERMANENTLY); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + return null; } if (path.equals("/category.jsp")) { @@ -271,7 +306,7 @@ public class NavigationFileResolver extends DefaultApplicationFileResolver { // If there's an explicit use context which doesn't exist, give a 404 if (!Template.DEFAULT_USE_CONTEXT.equals(useContext) && null == template) { s_log.debug("No template found in context " + getTemplateContext() - + " for category " + cat.getID() + + " for category " + cat.getID() + " with use context " + useContext); return null; }