Author: mck
Date: Wed Nov 6 16:24:13 2013
New Revision: 1539385
URL: http://svn.apache.org/r1539385
Log:
TILES-573 – Tiles.xml definitions not reloaded when using expressions
Contribution from Eric B.
Modified:
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternDefinitionResolver.java
tiles/framework/branches/TILES_3_0_X/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java
Modified:
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java
URL:
http://svn.apache.org/viewvc/tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java?rev=1539385&r1=1539384&r2=1539385&view=diff
==============================================================================
---
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java
(original)
+++
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAO.java
Wed Nov 6 16:24:13 2013
@@ -166,10 +166,10 @@ public class CachingLocaleUrlDefinitionD
* @return The loaded definitions.
* @since 2.1.0
*/
- protected synchronized Map<String, Definition> checkAndloadDefinitions(
- Locale customizationKey) {
+ protected synchronized Map<String, Definition>
checkAndloadDefinitions(Locale customizationKey) {
if (checkRefresh && refreshRequired()) {
locale2definitionMap.clear();
+ definitionResolver.clearPatternPaths(customizationKey);
}
loadDefinitions(customizationKey);
return locale2definitionMap.get(customizationKey);
Modified:
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java
URL:
http://svn.apache.org/viewvc/tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java?rev=1539385&r1=1539384&r2=1539385&view=diff
==============================================================================
---
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java
(original)
+++
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java
Wed Nov 6 16:24:13 2013
@@ -106,4 +106,17 @@ public abstract class AbstractPatternDef
return d;
}
+
+
+ /**
+ * Used to clear all entries in the localePatternPaths for a specific
locale. Necessary when reloading definition
+ * files to ensure that the list is cleared first
+ *
+ * @param customizationKey
+ */
+ @Override
+ public void clearPatternPaths(T customizationKey) {
+ if (localePatternPaths.get(customizationKey) != null)
+ localePatternPaths.get(customizationKey).clear();
+ }
}
Modified:
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternDefinitionResolver.java
URL:
http://svn.apache.org/viewvc/tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternDefinitionResolver.java?rev=1539385&r1=1539384&r2=1539385&view=diff
==============================================================================
---
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternDefinitionResolver.java
(original)
+++
tiles/framework/branches/TILES_3_0_X/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternDefinitionResolver.java
Wed Nov 6 16:24:13 2013
@@ -57,4 +57,12 @@ public interface PatternDefinitionResolv
* @since 2.2.0
*/
Definition resolveDefinition(String name, T customizationKey);
+
+ /**
+ * Used to clear all entries in the localePatternPaths for a specific
locale. Necessary when reloading definition
+ * files to ensure that the list is cleared first
+ *
+ * @param customizationKey
+ */
+ public void clearPatternPaths(T customizationKey);
}
Modified:
tiles/framework/branches/TILES_3_0_X/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java
URL:
http://svn.apache.org/viewvc/tiles/framework/branches/TILES_3_0_X/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java?rev=1539385&r1=1539384&r2=1539385&view=diff
==============================================================================
---
tiles/framework/branches/TILES_3_0_X/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java
(original)
+++
tiles/framework/branches/TILES_3_0_X/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java
Wed Nov 6 16:24:13 2013
@@ -40,60 +40,70 @@ import org.junit.Test;
*/
public class AbstractPatternDefinitionResolverTest {
+ private DefinitionPatternMatcher firstMatcher;
+ private DefinitionPatternMatcher thirdMatcher;
+
+ private final PatternDefinitionResolver<Integer> resolver = new
AbstractPatternDefinitionResolver<Integer>() {
+ @Override
+ protected Map<String, Definition> addDefinitionsAsPatternMatchers(
+ List<DefinitionPatternMatcher> matchers,
+ Map<String, Definition> defsMap) {
+
+ if (defsMap.containsKey("first")) {
+ matchers.add(firstMatcher);
+ }
+ if (defsMap.containsKey("third")) {
+ matchers.add(thirdMatcher);
+ }
+ Map<String, Definition> retValue = new HashMap<String,
Definition>(defsMap);
+ retValue.remove("first");
+ retValue.remove("third");
+ return retValue;
+ }
+ };
+
/**
* Test method for
* {@link BasicPatternDefinitionResolver#resolveDefinition(String,
Object)}.
*/
@Test
public void testResolveDefinition() {
- final DefinitionPatternMatcher firstMatcher =
createMock(DefinitionPatternMatcher.class);
- final DefinitionPatternMatcher thirdMatcher =
createMock(DefinitionPatternMatcher.class);
+ testResolveDefinitionImpl();
+ }
+
+ /**
+ * Test method for
+ * {@link BasicPatternDefinitionResolver#clearPatternPaths(Object)}.
+ */
+ @Test
+ public void testClearPatternPaths() {
+ testResolveDefinitionImpl();
+ resolver.clearPatternPaths(1);
+ resolver.clearPatternPaths(2);
+ testResolveDefinitionImpl();
+ }
- Definition firstDefinition = new Definition("first", (Attribute) null,
- null);
- Definition secondDefinition = new Definition("second",
- (Attribute) null, null);
- Definition thirdDefinition = new Definition("third", (Attribute) null,
- null);
-
- Definition firstTransformedDefinition = new Definition(
- "firstTransformed", (Attribute) null, null);
- Definition thirdTransformedDefinition = new Definition(
- "thirdTransformed", (Attribute) null, null);
-
- expect(firstMatcher.createDefinition("firstTransformed")).andReturn(
- firstTransformedDefinition);
- expect(firstMatcher.createDefinition("secondTransformed")).andReturn(
- null);
- expect(firstMatcher.createDefinition("thirdTransformed")).andReturn(
- null);
- expect(thirdMatcher.createDefinition("thirdTransformed")).andReturn(
- thirdTransformedDefinition).times(2);
- expect(thirdMatcher.createDefinition("firstTransformed")).andReturn(
- null);
- expect(thirdMatcher.createDefinition("secondTransformed")).andReturn(
- null).times(2);
+ private void testResolveDefinitionImpl() {
- replay(firstMatcher, thirdMatcher);
- PatternDefinitionResolver<Integer> resolver = new
AbstractPatternDefinitionResolver<Integer>() {
+ firstMatcher = createMock(DefinitionPatternMatcher.class);
+ thirdMatcher = createMock(DefinitionPatternMatcher.class);
- @Override
- protected Map<String, Definition> addDefinitionsAsPatternMatchers(
- List<DefinitionPatternMatcher> matchers,
- Map<String, Definition> defsMap) {
- if (defsMap.containsKey("first")) {
- matchers.add(firstMatcher);
- }
- if (defsMap.containsKey("third")) {
- matchers.add(thirdMatcher);
- }
- Map<String, Definition> retValue = new HashMap<String,
Definition>(defsMap);
- retValue.remove("first");
- retValue.remove("third");
- return retValue;
- }
+ Definition firstDefinition = new Definition("first", (Attribute) null,
null);
+ Definition secondDefinition = new Definition("second", (Attribute)
null, null);
+ Definition thirdDefinition = new Definition("third", (Attribute) null,
null);
+
+ Definition firstTransformedDefinition = new
Definition("firstTransformed", (Attribute) null, null);
+ Definition thirdTransformedDefinition = new
Definition("thirdTransformed", (Attribute) null, null);
+
+
expect(firstMatcher.createDefinition("firstTransformed")).andReturn(firstTransformedDefinition);
+
expect(firstMatcher.createDefinition("secondTransformed")).andReturn(null);
+
expect(firstMatcher.createDefinition("thirdTransformed")).andReturn(null);
+
expect(thirdMatcher.createDefinition("thirdTransformed")).andReturn(thirdTransformedDefinition).times(2);
+
expect(thirdMatcher.createDefinition("firstTransformed")).andReturn(null);
+
expect(thirdMatcher.createDefinition("secondTransformed")).andReturn(null).times(2);
+
+ replay(firstMatcher, thirdMatcher);
- };
Map<String, Definition> localeDefsMap = new LinkedHashMap<String,
Definition>();
localeDefsMap.put("first", firstDefinition);
localeDefsMap.put("second", secondDefinition);