Author: apetrelli
Date: Sun Jul 19 19:35:19 2009
New Revision: 795602

URL: http://svn.apache.org/viewvc?rev=795602&view=rev
Log:
TILES-433
Refactored BasicPatternDefinitionResolver to extract an abstract class.
Added the class PrefixedPatternDefinitionResolver.
Added tests for everything.

Added:
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java
   (with props)
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolver.java
   (with props)
    
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java
   (with props)
    
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolverTest.java
   (with props)
Modified:
    
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolver.java
    
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolverTest.java

Added: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java?rev=795602&view=auto
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java
 (added)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java
 Sun Jul 19 19:35:19 2009
@@ -0,0 +1,106 @@
+/*
+ * $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.definition.pattern;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tiles.Definition;
+
+/**
+ * A pattern definition resolver that stores {...@link 
DefinitionPatternMatcher}
+ * separated by customization key. <br>
+ * Implementations should provide a way to translate a definition to a
+ * {...@link DefinitionPatternMatcher}.
+ *
+ * @param <T> The type of the customization key.
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public abstract class AbstractPatternDefinitionResolver<T> implements
+        PatternDefinitionResolver<T> {
+
+    /**
+     * Stores patterns depending on the locale they refer to.
+     */
+    private Map<T, List<DefinitionPatternMatcher>> localePatternPaths =
+        new HashMap<T, List<DefinitionPatternMatcher>>();
+
+    /** {...@inheritdoc} */
+    public Definition resolveDefinition(String name, T customizationKey) {
+        Definition retValue = null;
+        if (localePatternPaths.containsKey(customizationKey)) {
+            retValue = searchAndResolveDefinition(localePatternPaths
+                    .get(customizationKey), name);
+        }
+        return retValue;
+    }
+
+    /** {...@inheritdoc} */
+    public void storeDefinitionPatterns(Map<String, Definition> localeDefsMap,
+            T customizationKey) {
+        List<DefinitionPatternMatcher> lpaths = localePatternPaths
+                .get(customizationKey);
+        if (lpaths == null) {
+            lpaths = new ArrayList<DefinitionPatternMatcher>();
+            localePatternPaths.put(customizationKey, lpaths);
+        }
+
+        addDefinitionsAsPatternMatchers(lpaths, localeDefsMap);
+    }
+
+    /**
+     * Adds definitions, filtering and adding them to the list of definition
+     * pattern matchers. Only a subset of definitions will be transformed into
+     * definition pattern matchers.
+     *
+     * @param matchers The list containing the currently stored definition 
pattern
+     * matchers.
+     * @param defsMap The definition map to parse.
+     * @since 2.2.0
+     */
+    protected abstract void 
addDefinitionsAsPatternMatchers(List<DefinitionPatternMatcher> matchers,
+            Map<String, Definition> defsMap);
+
+    /**
+     * Try to resolve a definition by iterating all pattern matchers.
+     *
+     * @param paths The list containing the currently stored paths.
+     * @param name The name of the definition to resolve.
+     * @return A definition, if found, or <code>null</code> if not.
+     */
+    private Definition searchAndResolveDefinition(
+            List<DefinitionPatternMatcher> paths, String name) {
+        Definition d = null;
+
+        for (DefinitionPatternMatcher wm : paths) {
+            d = wm.createDefinition(name);
+            if (d != null) {
+                break;
+            }
+        }
+
+        return d;
+    }
+}

Propchange: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolver.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolver.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolver.java?rev=795602&r1=795601&r2=795602&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolver.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolver.java
 Sun Jul 19 19:35:19 2009
@@ -21,28 +21,24 @@
 
 package org.apache.tiles.definition.pattern;
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.tiles.Definition;
 
 /**
- * Uses wildcards syntax to match definition names and its parameters.
+ * A pattern definition resolver that stores {...@link 
DefinitionPatternMatcher}
+ * separated by customization key. <br>
+ * It delegates creation of definition pattern matchers to a
+ * {...@link DefinitionPatternMatcherFactory} and recgnizes patterns through 
the
+ * use of a {...@link PatternRecognizer}.
  *
  * @param <T> The type of the customization key.
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class BasicPatternDefinitionResolver<T> implements
-        PatternDefinitionResolver<T> {
-
-    /**
-     * Stores patterns depending on the locale they refer to.
-     */
-    private Map<T, List<DefinitionPatternMatcher>> localePatternPaths =
-        new HashMap<T, List<DefinitionPatternMatcher>>();
+public class BasicPatternDefinitionResolver<T> extends
+        AbstractPatternDefinitionResolver<T> {
 
     /**
      * The factory of pattern matchers.
@@ -66,64 +62,24 @@
         this.patternRecognizer = patternRecognizer;
     }
 
-    /** {...@inheritdoc} */
-    public Definition resolveDefinition(String name, T customizationKey) {
-        Definition retValue = null;
-        if (localePatternPaths.containsKey(customizationKey)) {
-            retValue = searchAndResolveDefinition(localePatternPaths
-                    .get(customizationKey), name);
-        }
-        return retValue;
-    }
-
-    /** {...@inheritdoc} */
-    public void storeDefinitionPatterns(Map<String, Definition> localeDefsMap,
-            T customizationKey) {
-        List<DefinitionPatternMatcher> lpaths = localePatternPaths
-                .get(customizationKey);
-        if (lpaths == null) {
-            lpaths = new ArrayList<DefinitionPatternMatcher>();
-            localePatternPaths.put(customizationKey, lpaths);
-        }
-
-        addWildcardPaths(lpaths, localeDefsMap);
-    }
-
     /**
-     * Adds wildcard paths that are stored inside a normal definition map.
+     * Adds definitions, filtering and adding them to the list of definition
+     * pattern matchers. Only a subset of definitions will be transformed into
+     * definition pattern matchers.
      *
-     * @param paths The list containing the currently stored paths.
+     * @param matchers The list containing the currently stored definition 
pattern
+     * matchers.
      * @param defsMap The definition map to parse.
+     * @since 2.2.0
      */
-    private void addWildcardPaths(List<DefinitionPatternMatcher> paths,
+    protected void 
addDefinitionsAsPatternMatchers(List<DefinitionPatternMatcher> matchers,
             Map<String, Definition> defsMap) {
         for (Map.Entry<String, Definition> de : defsMap.entrySet()) {
             if (patternRecognizer.isPatternRecognized(de.getKey())) {
-                paths.add(definitionPatternMatcherFactory
+                matchers.add(definitionPatternMatcherFactory
                         .createDefinitionPatternMatcher(de.getKey(), de
                                 .getValue()));
             }
         }
     }
-
-    /**
-     * Try to resolve a definition by iterating all pattern matchers.
-     *
-     * @param paths The list containing the currently stored paths.
-     * @param name The name of the definition to resolve.
-     * @return A definition, if found, or <code>null</code> if not.
-     */
-    private Definition searchAndResolveDefinition(
-            List<DefinitionPatternMatcher> paths, String name) {
-        Definition d = null;
-
-        for (DefinitionPatternMatcher wm : paths) {
-            d = wm.createDefinition(name);
-            if (d != null) {
-                break;
-            }
-        }
-
-        return d;
-    }
 }

Added: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolver.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolver.java?rev=795602&view=auto
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolver.java
 (added)
+++ 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolver.java
 Sun Jul 19 19:35:19 2009
@@ -0,0 +1,104 @@
+/*
+ * $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.definition.pattern;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tiles.Definition;
+import org.apache.tiles.Expression;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This resolver allows the use of multiple pattern matching languages. The
+ * syntax of definition names must be <code>LANGUAGENAME:expression</code>.<br>
+ * The different languages must be registered through the use of
+ * {...@link #registerDefinitionPatternMatcherFactory(String, 
DefinitionPatternMatcherFactory)}
+ * method before using this resolver.
+ *
+ * @param <T> The type of the customization key.
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class PrefixedPatternDefinitionResolver<T> extends
+        AbstractPatternDefinitionResolver<T> {
+
+    /**
+     * The logging object.
+     */
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    /**
+     * Matches languages names to the corresponding
+     * {...@link DefinitionPatternMatcherFactory}.
+     */
+    private Map<String, DefinitionPatternMatcherFactory> 
language2matcherFactory;
+
+    /**
+     * Constructor.
+     *
+     * @since 2.2.0
+     */
+    public PrefixedPatternDefinitionResolver() {
+        language2matcherFactory = new HashMap<String, 
DefinitionPatternMatcherFactory>();
+    }
+
+    /**
+     * Registers a {...@link DefinitionPatternMatcherFactory} connected to a
+     * particular language.
+     *
+     * @param language The name of the language.
+     * @param factory The pattern matcher factory to register.
+     * @since 2.2.0
+     */
+    public void registerDefinitionPatternMatcherFactory(String language,
+            DefinitionPatternMatcherFactory factory) {
+        language2matcherFactory.put(language, factory);
+    }
+
+    /** {...@inheritdoc} */
+    @Override
+    protected void addDefinitionsAsPatternMatchers(
+            List<DefinitionPatternMatcher> matchers,
+            Map<String, Definition> defsMap) {
+        for (Map.Entry<String, Definition> entry : defsMap.entrySet()) {
+            Expression expression = Expression
+                    .createExpressionFromDescribedExpression(entry.getKey());
+            if (expression.getLanguage() != null) {
+                DefinitionPatternMatcherFactory factory = 
language2matcherFactory
+                        .get(expression.getLanguage());
+                if (factory != null) {
+                    DefinitionPatternMatcher matcher = factory
+                            .createDefinitionPatternMatcher(expression
+                                    .getExpression(), entry.getValue());
+                    matchers.add(matcher);
+                } else {
+                    logger
+                            .warn("Cannot find a 
DefinitionPatternMatcherFactory for expression '"
+                                    + entry.getKey() + "'");
+                }
+            }
+        }
+    }
+}

Propchange: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolver.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java?rev=795602&view=auto
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java
 (added)
+++ 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java
 Sun Jul 19 19:35:19 2009
@@ -0,0 +1,111 @@
+/*
+ * $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.definition.pattern;
+
+import static org.junit.Assert.*;
+import static org.easymock.EasyMock.*;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Definition;
+import org.junit.Test;
+
+/**
+ * Tests {...@link AbstractPatternDefinitionResolver}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class AbstractPatternDefinitionResolverTest {
+
+    /**
+     * Test method for
+     * {...@link BasicPatternDefinitionResolver#resolveDefinition(String, 
Object)}.
+     */
+    @Test
+    public void testResolveDefinition() {
+        final DefinitionPatternMatcher firstMatcher = 
createMock(DefinitionPatternMatcher.class);
+        final DefinitionPatternMatcher thirdMatcher = 
createMock(DefinitionPatternMatcher.class);
+
+        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);
+        PatternDefinitionResolver<Integer> resolver = new 
AbstractPatternDefinitionResolver<Integer>() {
+
+            @Override
+            protected void 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> localeDefsMap = new LinkedHashMap<String, 
Definition>();
+        localeDefsMap.put("first", firstDefinition);
+        localeDefsMap.put("second", secondDefinition);
+        localeDefsMap.put("third", thirdDefinition);
+        resolver.storeDefinitionPatterns(localeDefsMap, 1);
+        localeDefsMap = new LinkedHashMap<String, Definition>();
+        localeDefsMap.put("third", thirdDefinition);
+        resolver.storeDefinitionPatterns(localeDefsMap, 2);
+        assertEquals(firstTransformedDefinition, resolver.resolveDefinition(
+                "firstTransformed", 1));
+        assertNull(resolver.resolveDefinition("secondTransformed", 1));
+        assertEquals(thirdTransformedDefinition, resolver.resolveDefinition(
+                "thirdTransformed", 1));
+        assertNull(resolver.resolveDefinition("firstTransformed", 2));
+        assertNull(resolver.resolveDefinition("secondTransformed", 2));
+        assertEquals(thirdTransformedDefinition, resolver.resolveDefinition(
+                "thirdTransformed", 2));
+        verify(firstMatcher, thirdMatcher);
+    }
+}

Propchange: 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/AbstractPatternDefinitionResolverTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolverTest.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolverTest.java?rev=795602&r1=795601&r2=795602&view=diff
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolverTest.java
 (original)
+++ 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolverTest.java
 Sun Jul 19 19:35:19 2009
@@ -24,7 +24,9 @@
 import static org.junit.Assert.*;
 import static org.easymock.EasyMock.*;
 
+import java.util.ArrayList;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.tiles.Attribute;
@@ -40,10 +42,10 @@
 
     /**
      * Test method for
-     * {...@link BasicPatternDefinitionResolver#resolveDefinition(String, 
Object)}.
+     * {...@link 
BasicPatternDefinitionResolver#addDefinitionsAsPatternMatchers(java.util.List, 
Map)}.
      */
     @Test
-    public void testResolveDefinition() {
+    public void testAddDefinitionsAsPatternMatchers() {
         DefinitionPatternMatcherFactory factory = 
createMock(DefinitionPatternMatcherFactory.class);
         PatternRecognizer recognizer = createMock(PatternRecognizer.class);
         DefinitionPatternMatcher firstMatcher = 
createMock(DefinitionPatternMatcher.class);
@@ -51,8 +53,7 @@
 
         expect(recognizer.isPatternRecognized("first")).andReturn(true);
         expect(recognizer.isPatternRecognized("second")).andReturn(false);
-        expect(recognizer.isPatternRecognized("third")).andReturn(true)
-                .times(2);
+        expect(recognizer.isPatternRecognized("third")).andReturn(true);
 
         Definition firstDefinition = new Definition("first", (Attribute) null,
                 null);
@@ -61,48 +62,23 @@
         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(factory.createDefinitionPatternMatcher("first", 
firstDefinition))
                 .andReturn(firstMatcher);
         expect(factory.createDefinitionPatternMatcher("third", 
thirdDefinition))
-                .andReturn(thirdMatcher).times(2);
-        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);
+                .andReturn(thirdMatcher);
 
         replay(factory, recognizer, firstMatcher, thirdMatcher);
-        PatternDefinitionResolver<Integer> resolver = new 
BasicPatternDefinitionResolver<Integer>(
+        BasicPatternDefinitionResolver<Integer> resolver = new 
BasicPatternDefinitionResolver<Integer>(
                 factory, recognizer);
         Map<String, Definition> localeDefsMap = new LinkedHashMap<String, 
Definition>();
         localeDefsMap.put("first", firstDefinition);
         localeDefsMap.put("second", secondDefinition);
         localeDefsMap.put("third", thirdDefinition);
-        resolver.storeDefinitionPatterns(localeDefsMap, 1);
-        localeDefsMap = new LinkedHashMap<String, Definition>();
-        localeDefsMap.put("third", thirdDefinition);
-        resolver.storeDefinitionPatterns(localeDefsMap, 2);
-        assertEquals(firstTransformedDefinition, resolver.resolveDefinition(
-                "firstTransformed", 1));
-        assertNull(resolver.resolveDefinition("secondTransformed", 1));
-        assertEquals(thirdTransformedDefinition, resolver.resolveDefinition(
-                "thirdTransformed", 1));
-        assertNull(resolver.resolveDefinition("firstTransformed", 2));
-        assertNull(resolver.resolveDefinition("secondTransformed", 2));
-        assertEquals(thirdTransformedDefinition, resolver.resolveDefinition(
-                "thirdTransformed", 2));
+        List<DefinitionPatternMatcher> matchers = new 
ArrayList<DefinitionPatternMatcher>();
+        resolver.addDefinitionsAsPatternMatchers(matchers, localeDefsMap);
+        assertEquals(2, matchers.size());
+        assertEquals(firstMatcher, matchers.get(0));
+        assertEquals(thirdMatcher, matchers.get(1));
         verify(factory, recognizer, firstMatcher, thirdMatcher);
     }
 }

Added: 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolverTest.java
URL: 
http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolverTest.java?rev=795602&view=auto
==============================================================================
--- 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolverTest.java
 (added)
+++ 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolverTest.java
 Sun Jul 19 19:35:19 2009
@@ -0,0 +1,78 @@
+/*
+ * $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.definition.pattern;
+
+import static org.junit.Assert.*;
+import static org.easymock.EasyMock.*;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Definition;
+import org.junit.Test;
+
+/**
+ * Tests {...@link PrefixedPatternDefinitionResolver}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class PrefixedPatternDefinitionResolverTest {
+
+    /**
+     * Test method for {...@link 
PrefixedPatternDefinitionResolver#addDefinitionsAsPatternMatchers(List, Map)}.
+     */
+    @Test
+    public void testAddDefinitionsAsPatternMatchers() {
+        DefinitionPatternMatcherFactory factory1 = 
createMock(DefinitionPatternMatcherFactory.class);
+        DefinitionPatternMatcherFactory factory2 = 
createMock(DefinitionPatternMatcherFactory.class);
+        DefinitionPatternMatcher matcher1 = 
createMock(DefinitionPatternMatcher.class);
+        DefinitionPatternMatcher matcher2 = 
createMock(DefinitionPatternMatcher.class);
+        Definition definition1 = new Definition("DF1:definition1", (Attribute) 
null, null);
+        Definition definition2 = new Definition("DF2:definition2", (Attribute) 
null, null);
+        Definition definition3 = new Definition("noLanguageHere", (Attribute) 
null, null);
+
+        expect(factory1.createDefinitionPatternMatcher("definition1", 
definition1)).andReturn(matcher1);
+        expect(factory2.createDefinitionPatternMatcher("definition2", 
definition2)).andReturn(matcher2);
+
+        replay(factory1, factory2, matcher1, matcher2);
+
+        PrefixedPatternDefinitionResolver<Integer> resolver = new 
PrefixedPatternDefinitionResolver<Integer>();
+        resolver.registerDefinitionPatternMatcherFactory("DF1", factory1);
+        resolver.registerDefinitionPatternMatcherFactory("DF2", factory2);
+        List<DefinitionPatternMatcher> matchers = new 
ArrayList<DefinitionPatternMatcher>();
+        Map<String, Definition> definitions = new LinkedHashMap<String, 
Definition>();
+        definitions.put("DF1:definition1", definition1);
+        definitions.put("DF2:definition2", definition2);
+        definitions.put("noLanguageHere", definition3);
+
+        resolver.addDefinitionsAsPatternMatchers(matchers, definitions);
+
+        assertEquals(2, matchers.size());
+        assertEquals(matcher1, matchers.get(0));
+        assertEquals(matcher2, matchers.get(1));
+
+        verify(factory1, factory2, matcher1, matcher2);
+    }
+}

Propchange: 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolverTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/PrefixedPatternDefinitionResolverTest.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL


Reply via email to