Author: apetrelli
Date: Thu Mar  1 01:41:03 2007
New Revision: 513238

URL: http://svn.apache.org/viewvc?view=rev&rev=513238
Log:
TILES-123
Added support for a basic Locale resolution.

Added:
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/LocaleResolver.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/impl/
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java
Modified:
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/DefinitionsFactory.java
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/UrlDefinitionsFactory.java

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/DefinitionsFactory.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/DefinitionsFactory.java?view=diff&rev=513238&r1=513237&r2=513238
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/DefinitionsFactory.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/DefinitionsFactory.java
 Thu Mar  1 01:41:03 2007
@@ -50,6 +50,9 @@
      */
     public static final String DEFINITIONS_IMPL_PROPERTY =
         "org.apache.tiles.definition.ComponentDefinitions";
+    
+    public static final String LOCALE_RESOLVER_IMPL_PROPERTY =
+        "org.apache.tiles.locale.LocaleResolver";
 
     /**
      * Initializes the DefinitionsFactory and its subcomponents.

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/UrlDefinitionsFactory.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/UrlDefinitionsFactory.java?view=diff&rev=513238&r1=513237&r2=513238
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/UrlDefinitionsFactory.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/UrlDefinitionsFactory.java
 Thu Mar  1 01:41:03 2007
@@ -26,6 +26,8 @@
 import org.apache.tiles.TilesException;
 import org.apache.tiles.context.TilesRequestContext;
 import org.apache.tiles.definition.digester.DigesterDefinitionsReader;
+import org.apache.tiles.locale.LocaleResolver;
+import org.apache.tiles.locale.impl.DefaultLocaleResolver;
 import org.apache.tiles.util.ClassUtil;
 
 import java.io.FileNotFoundException;
@@ -79,6 +81,8 @@
 
 
     private ComponentDefinitions definitions;
+    
+    private LocaleResolver localeResolver;
 
     /**
      * Creates a new instance of UrlDefinitionsFactory
@@ -108,6 +112,15 @@
             reader = new DigesterDefinitionsReader();
         }
         reader.init(params);
+        
+        String resolverClassName = params
+                .get(DefinitionsFactory.LOCALE_RESOLVER_IMPL_PROPERTY);
+        if (resolverClassName != null) {
+            localeResolver = (LocaleResolver) 
ClassUtil.instantiate(resolverClassName);
+        } else {
+            localeResolver = new DefaultLocaleResolver();
+        }
+        localeResolver.init(params);
     }
 
     private ComponentDefinitions getComponentDefinitions()
@@ -137,7 +150,7 @@
         Locale locale = null;
 
         if (tilesContext != null) {
-            locale = tilesContext.getRequestLocale();
+            locale = localeResolver.resolveLocale(tilesContext);
             if (!isContextProcessed(tilesContext)) {
                 synchronized (definitions) {
                     addDefinitions(definitions, tilesContext);
@@ -189,7 +202,7 @@
                                   TilesRequestContext tilesContext)
         throws DefinitionsFactoryException {
 
-        Locale locale = tilesContext.getRequestLocale();
+        Locale locale = localeResolver.resolveLocale(tilesContext);
 
         if (isContextProcessed(tilesContext)) {
             return;
@@ -233,8 +246,8 @@
         
         // At the end of definitions loading, they can be assigned to
         // ComponentDefinitions implementation, to allow inheritance 
resolution.
-        definitions.addDefinitions(localeDefsMap,
-                       tilesContext.getRequestLocale());
+        definitions.addDefinitions(localeDefsMap, localeResolver
+                .resolveLocale(tilesContext));
     }
 
     /**
@@ -275,7 +288,8 @@
      * @return true if the given context has been processed and false 
otherwise.
      */
     protected boolean isContextProcessed(TilesRequestContext tilesContext) {
-        return processedLocales.contains(tilesContext.getRequestLocale());
+        return processedLocales.contains(localeResolver
+                .resolveLocale(tilesContext));
     }
 
     /**

Added: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/LocaleResolver.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/LocaleResolver.java?view=auto&rev=513238
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/LocaleResolver.java
 (added)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/LocaleResolver.java
 Thu Mar  1 01:41:03 2007
@@ -0,0 +1,48 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.tiles.locale;
+
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.tiles.TilesException;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.definition.DefinitionsFactoryException;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public interface LocaleResolver {
+    
+    /**
+     * Initializes the <code>LocaleResolver</code> object. <p/> This method
+     * must be called before the [EMAIL PROTECTED] 
#resolveLocale(TilesRequestContext)}
+     * method is called.
+     *
+     * @param params A map of properties used to set up the resolver.
+     * @throws DefinitionsFactoryException if required properties are not 
passed
+     * in or the initialization fails.
+     */
+    public void init(Map<String, String> params) throws TilesException;
+
+    public Locale resolveLocale(TilesRequestContext request);
+}

Added: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java?view=auto&rev=513238
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java
 (added)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/locale/impl/DefaultLocaleResolver.java
 Thu Mar  1 01:41:03 2007
@@ -0,0 +1,54 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.tiles.locale.impl;
+
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.tiles.TilesException;
+import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.locale.LocaleResolver;
+import org.apache.tiles.taglib.ComponentConstants;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class DefaultLocaleResolver implements LocaleResolver {
+
+    public void init(Map<String, String> params)
+            throws TilesException {
+        // Does nothing.
+    }
+
+    public Locale resolveLocale(TilesRequestContext request) {
+        Locale retValue = null;
+        Map session = request.getSessionScope();
+        if (session != null) {
+            retValue = (Locale) session.get(ComponentConstants.LOCALE_KEY);
+        }
+        if (retValue == null) {
+            retValue = request.getRequestLocale();
+        }
+        
+        return retValue;
+    }
+}


Reply via email to