You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by ap...@apache.org on 2010/08/27 20:43:01 UTC

svn commit: r990227 - in /tiles/framework/trunk/tiles-core/src: main/java/org/apache/tiles/definition/dao/ test/java/org/apache/tiles/config/ test/java/org/apache/tiles/definition/dao/

Author: apetrelli
Date: Fri Aug 27 18:43:00 2010
New Revision: 990227

URL: http://svn.apache.org/viewvc?rev=990227&view=rev
Log:
TILES-513
Fixed by putting the definition map only for the selected locale.
Postponed inheritance resolution, storing definition patterns at the end of the definitions loading for the needed locale.
Un-deprecated a method in CachingLocaleUrlDefinitionDAO.

Added:
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/config/defs-tiles-513.xml   (with props)
Modified:
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAO.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java?rev=990227&r1=990226&r2=990227&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java Fri Aug 27 18:43:00 2010
@@ -230,6 +230,23 @@ public class CachingLocaleUrlDefinitionD
      * @since 2.1.0
      */
     protected Map<String, Definition> loadDefinitionsFromURLs(Locale customizationKey) {
+        Map<String, Definition> localeDefsMap = loadRawDefinitionsFromURLs(customizationKey);
+        Map<String, Definition> defsMap = definitionResolver
+                .storeDefinitionPatterns(copyDefinitionMap(localeDefsMap),
+                        customizationKey);
+        locale2definitionMap.put(customizationKey, defsMap);
+        return localeDefsMap;
+    }
+
+    /**
+     * Loads the raw definitions from the URLs associated with a locale.
+     *
+     * @param customizationKey The locale to use when loading URLs.
+     * @return The loaded definitions.
+     * @since 2.1.3
+     */
+    protected Map<String, Definition> loadRawDefinitionsFromURLs(
+            Locale customizationKey) {
         Map<String, Definition> localeDefsMap;
 
         String postfix = LocaleUtil.calculatePostfix(customizationKey);
@@ -257,27 +274,10 @@ public class CachingLocaleUrlDefinitionD
                         + newPath, e);
             }
         }
-        Map<String, Definition> defsMap = definitionResolver
-                .storeDefinitionPatterns(copyDefinitionMap(localeDefsMap),
-                        customizationKey);
-        locale2definitionMap.put(customizationKey, defsMap);
         return localeDefsMap;
     }
 
     /**
-     * Loads the raw definitions from the URLs associated with a locale.
-     *
-     * @param customizationKey The locale to use when loading URLs.
-     * @return The loaded definitions.
-     * @since 2.1.3
-     * @deprecated Use {@link #loadDefinitionsFromURLs(Locale)}.
-     */
-    protected Map<String, Definition> loadRawDefinitionsFromURLs(
-            Locale customizationKey) {
-        return loadDefinitionsFromURLs(customizationKey);
-    }
-
-    /**
      * Loads parent definitions, i.e. definitions mapped to a parent locale.
      *
      * @param parentLocale The locale to use when loading URLs.

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAO.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAO.java?rev=990227&r1=990226&r2=990227&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAO.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAO.java Fri Aug 27 18:43:00 2010
@@ -55,17 +55,18 @@ public class ResolvingLocaleUrlDefinitio
     /** {@inheritDoc} */
     @Override
     protected Map<String, Definition> loadParentDefinitions(Locale parentLocale) {
-        return loadDefinitionsFromURLs(parentLocale);
+        return loadRawDefinitionsFromURLs(parentLocale);
     }
 
-    /** {@inheritDoc} */
     @Override
-    protected Map<String, Definition> loadDefinitionsFromURLs(
-            Locale customizationKey) {
-        Map<String, Definition> retValue = super.loadDefinitionsFromURLs(customizationKey);
-        Map<String, Definition> defsMap = locale2definitionMap.get(customizationKey);
+    protected Map<String, Definition> loadDefinitions(Locale customizationKey) {
+        Map<String, Definition> localeDefsMap = super.loadDefinitions(customizationKey);
+        Map<String, Definition> defsMap = definitionResolver
+                .storeDefinitionPatterns(copyDefinitionMap(localeDefsMap),
+                        customizationKey);
         resolveInheritances(defsMap, customizationKey);
-        return retValue;
+        locale2definitionMap.put(customizationKey, defsMap);
+        return defsMap;
     }
 
     /** {@inheritDoc} */

Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/config/defs-tiles-513.xml
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/config/defs-tiles-513.xml?rev=990227&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/config/defs-tiles-513.xml (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/config/defs-tiles-513.xml Fri Aug 27 18:43:00 2010
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!-- /* * $Id:tiles-defs-2.1.xml 628334 2008-02-16 16:01:46Z apetrelli $
+  * * 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. */ -->
+
+ <!DOCTYPE tiles-definitions PUBLIC
+       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
+       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
+
+<!-- Definitions for Tiles documentation -->
+
+<tiles-definitions>
+  <!-- Authentication Layout -->
+  <definition name="test.anonymous.base" template="/layout.jsp">
+    <put-attribute name="header">
+      <definition template="/header.jsp" />
+    </put-attribute>
+    <put-attribute name="menu">
+      <definition template="/localnav.jsp" />
+    </put-attribute>
+    <put-attribute name="footer">
+      <definition template="/footer.jsp" />
+    </put-attribute>
+  </definition>
+
+  <!-- index page -->
+  <definition name="test.anonymous" extends="test.anonymous.base">
+    <put-attribute name="title" value="page.title.security.login" />
+    <put-attribute name="body" value="/body.jsp" />
+  </definition>
+</tiles-definitions>

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/config/defs-tiles-513.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/config/defs-tiles-513.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java?rev=990227&r1=990226&r2=990227&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/ResolvingLocaleUrlDefinitionDAOTest.java Fri Aug 27 18:43:00 2010
@@ -744,4 +744,37 @@ public class ResolvingLocaleUrlDefinitio
         assertEquals("/layout.ftl", definition.getTemplateAttribute().getValue());
         assertEquals("freemarker", definition.getTemplateAttribute().getRenderer());
     }
+
+    /**
+     * Tests
+     * {@link ResolvingLocaleUrlDefinitionDAO#getDefinition(String, Locale)}
+     * to solve the TILES-513 issue.
+     *
+     * @throws IOException If something goes wrong.
+     */
+    public void testTiles513() throws IOException {
+        URL url = this.getClass().getClassLoader().getResource(
+                "org/apache/tiles/config/defs-tiles-513.xml");
+        definitionDao.addSourceURL(url);
+        TilesApplicationContext applicationContext = EasyMock
+                .createMock(TilesApplicationContext.class);
+        definitionDao.setReader(new DigesterDefinitionsReader());
+        EasyMock.replay(applicationContext);
+
+        Definition definition = definitionDao.getDefinition(
+                "test.anonymous", null);
+        definitionDao.getDefinition(
+                "test.anonymous", new Locale("es", "CO"));
+        definitionDao.getDefinition(
+                "test.anonymous", new Locale("en", "CA"));
+        Attribute attribute = definition.getAttribute("header");
+        Definition child = definitionDao.getDefinition((String) attribute.getValue(), null);
+        assertNotNull(child);
+        attribute = definition.getAttribute("menu");
+        child = definitionDao.getDefinition((String) attribute.getValue(), null);
+        assertNotNull(child);
+        attribute = definition.getAttribute("footer");
+        child = definitionDao.getDefinition((String) attribute.getValue(), null);
+        assertNotNull(child);
+    }
 }