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 2009/07/18 13:26:10 UTC

svn commit: r795343 - in /tiles/framework/trunk/tiles-core/src: main/java/org/apache/tiles/definition/dao/ main/java/org/apache/tiles/definition/pattern/ main/java/org/apache/tiles/definition/pattern/regexp/ main/java/org/apache/tiles/definition/patter...

Author: apetrelli
Date: Sat Jul 18 11:26:09 2009
New Revision: 795343

URL: http://svn.apache.org/viewvc?rev=795343&view=rev
Log:
TILES-433
First refactoring to allow the use of multiple pattern matching techniques.

Added:
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolver.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/DefinitionPatternMatcher.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/DefinitionPatternMatcherFactory.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternRecognizer.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcher.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherFactory.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/package.html   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcher.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherFactory.java   (with props)
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/package.html   (with props)
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolverTest.java   (with props)
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/regexp/
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherFactoryTest.java   (with props)
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherTest.java
      - copied, changed from r788728, tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/RegexpPatternDefinitionResolverTest.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/wildcard/
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherFactoryTest.java   (with props)
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherTest.java
      - copied, changed from r788728, tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java
Removed:
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/RegexpPatternDefinitionResolverTest.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java
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/pattern/PatternDefinitionResolverAware.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolver.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/package.html
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
    tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/util/WildcardHelper.java
    tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAOTest.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=795343&r1=795342&r2=795343&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 Sat Jul 18 11:26:09 2009
@@ -32,9 +32,10 @@
 import org.apache.tiles.definition.DefinitionsFactoryException;
 import org.apache.tiles.definition.NoSuchDefinitionException;
 import org.apache.tiles.definition.Refreshable;
+import org.apache.tiles.definition.pattern.BasicPatternDefinitionResolver;
 import org.apache.tiles.definition.pattern.PatternDefinitionResolver;
 import org.apache.tiles.definition.pattern.PatternDefinitionResolverAware;
-import org.apache.tiles.definition.pattern.WildcardPatternDefinitionResolver;
+import org.apache.tiles.definition.pattern.wildcard.WildcardDefinitionPatternMatcherFactory;
 import org.apache.tiles.util.LocaleUtil;
 
 /**
@@ -100,7 +101,11 @@
 
         String param = params.get(CHECK_REFRESH_INIT_PARAMETER);
         checkRefresh = "true".equals(param);
-        definitionResolver = new WildcardPatternDefinitionResolver<Locale>();
+        WildcardDefinitionPatternMatcherFactory definitionPatternMatcherFactory =
+            new WildcardDefinitionPatternMatcherFactory();
+        definitionResolver = new BasicPatternDefinitionResolver<Locale>(
+                definitionPatternMatcherFactory,
+                definitionPatternMatcherFactory);
     }
 
     /** {@inheritDoc} */

Added: 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=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolver.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolver.java Sat Jul 18 11:26:09 2009
@@ -0,0 +1,129 @@
+/*
+ * $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;
+
+/**
+ * Uses wildcards syntax to match definition names and its parameters.
+ *
+ * @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>>();
+
+    /**
+     * The factory of pattern matchers.
+     */
+    private DefinitionPatternMatcherFactory definitionPatternMatcherFactory;
+
+    /**
+     * The pattern recognizer.
+     */
+    private PatternRecognizer patternRecognizer;
+
+    /**
+     * Constructor.
+     *
+     * @param definitionPatternMatcherFactory The definition pattern matcher factory.
+     * @param patternRecognizer The pattern recognizer.
+     */
+    public BasicPatternDefinitionResolver(DefinitionPatternMatcherFactory definitionPatternMatcherFactory,
+            PatternRecognizer patternRecognizer) {
+        this.definitionPatternMatcherFactory = definitionPatternMatcherFactory;
+        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.
+     *
+     * @param paths The list containing the currently stored paths.
+     * @param defsMap The definition map to parse.
+     */
+    private void addWildcardPaths(List<DefinitionPatternMatcher> paths,
+            Map<String, Definition> defsMap) {
+        for (Map.Entry<String, Definition> de : defsMap.entrySet()) {
+            if (patternRecognizer.isPatternRecognized(de.getKey())) {
+                paths.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;
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/DefinitionPatternMatcher.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/DefinitionPatternMatcher.java?rev=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/DefinitionPatternMatcher.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/DefinitionPatternMatcher.java Sat Jul 18 11:26:09 2009
@@ -0,0 +1,45 @@
+/*
+ * $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 org.apache.tiles.Definition;
+
+/**
+ * Matches a definition name to a definition, through pattern-matching. The
+ * matched pattern should be a single one.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public interface DefinitionPatternMatcher {
+
+    /**
+     * Creates a definition, given the definition name, through the use of
+     * pattern matching.
+     *
+     * @param definitionName The definition name to match.
+     * @return The created definition, if matched, or <code>null</code> if not
+     * matched.
+     * @since 2.2.0
+     */
+    Definition createDefinition(String definitionName);
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/DefinitionPatternMatcherFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/DefinitionPatternMatcherFactory.java?rev=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/DefinitionPatternMatcherFactory.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/DefinitionPatternMatcherFactory.java Sat Jul 18 11:26:09 2009
@@ -0,0 +1,47 @@
+/*
+ * $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 org.apache.tiles.Definition;
+
+/**
+ * Creates a new definition pattern matcher for the given pattern and the given
+ * base definition with pattern expressions.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public interface DefinitionPatternMatcherFactory {
+
+    /**
+     * Creates a new definition pattern matcher.
+     *
+     * @param pattern The pattern to be matched.
+     * @param definition The base definition. Created definitions by
+     * {@link DefinitionPatternMatcher#createDefinition(String)} will created
+     * with this one as a basis.
+     * @return The definition pattern matcher.
+     * @since 2.2.0
+     */
+    DefinitionPatternMatcher createDefinitionPatternMatcher(String pattern,
+            Definition definition);
+}

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

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

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternDefinitionResolverAware.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternDefinitionResolverAware.java?rev=795343&r1=795342&r2=795343&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternDefinitionResolverAware.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternDefinitionResolverAware.java Sat Jul 18 11:26:09 2009
@@ -31,8 +31,7 @@
 public interface PatternDefinitionResolverAware<T> {
 
     /**
-     * Sets the pattern definition resolver to use. If not set, the
-     * {@link WildcardPatternDefinitionResolver} will be used.
+     * Sets the pattern definition resolver to use.
      *
      * @param definitionResolver The pattern definition resolver.
      * @since 2.2.0

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternRecognizer.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternRecognizer.java?rev=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternRecognizer.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/PatternRecognizer.java Sat Jul 18 11:26:09 2009
@@ -0,0 +1,40 @@
+/*
+ * $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;
+
+/**
+ * Checks if a pattern (or a candidate one) is recognized as a pattern.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public interface PatternRecognizer {
+
+    /**
+     * Checks if a pattern is recognized as a pattern.
+     *
+     * @param candidatePattern The pattern to check.
+     * @return <code>true</code> if the pattern has been recognized.
+     * @since 2.2.0
+     */
+    boolean isPatternRecognized(String candidatePattern);
+}

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

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

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolver.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolver.java?rev=795343&r1=795342&r2=795343&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolver.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolver.java Sat Jul 18 11:26:09 2009
@@ -102,15 +102,13 @@
      */
     private Definition resolveWildcardDefinition(
             List<WildcardMapping> paths, String name) {
-        List<String> vars = new ArrayList<String>();
         Definition d = null;
 
         for (WildcardMapping wm : paths) {
-            if (wildcardHelper.match(vars, name, wm.getPattern())) {
+            List<String> vars = wildcardHelper.match(name, wm.getPattern());
+            if (vars != null) {
                 d = PatternUtil.replacePlaceholders(wm.getDefinition(), name, vars.toArray());
                 break;
-            } else {
-                vars.clear();
             }
         }
 

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/package.html?rev=795343&r1=795342&r2=795343&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/package.html (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/package.html Sat Jul 18 11:26:09 2009
@@ -22,9 +22,9 @@
 -->
 <html>
 <head>
-    <title>Tiles support to wildcard patterns</title>
+    <title>Tiles support to definition pattern matching</title>
 </head>
 <body>
-In Tiles it is possible to use wildcard patterns thanks to this package.
+Classes to manage pattern matching in definition names, and substitution in attributes.
 </body>
 </html>
\ No newline at end of file

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcher.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcher.java?rev=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcher.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcher.java Sat Jul 18 11:26:09 2009
@@ -0,0 +1,76 @@
+/*
+ * $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.regexp;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.tiles.Definition;
+import org.apache.tiles.definition.pattern.DefinitionPatternMatcher;
+import org.apache.tiles.definition.pattern.PatternUtil;
+
+/**
+ * Matches regular expression patterns in definitions.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class RegexpDefinitionPatternMatcher implements DefinitionPatternMatcher {
+
+    /**
+     * The pattern to match.
+     */
+    private Pattern pattern;
+
+    /**
+     * The definition to use as a basis.
+     */
+    private Definition definition;
+
+    /**
+     * Constructor.
+     *
+     * @param pattern The pattern to use, in string form.
+     * @param definition The definition to use as a basis.
+     * @since 2.2.0
+     */
+    public RegexpDefinitionPatternMatcher(String pattern, Definition definition) {
+        this.pattern = Pattern.compile(pattern);
+        this.definition = definition;
+    }
+
+    /** {@inheritDoc} */
+    public Definition createDefinition(String definitionName) {
+        Definition retValue = null;
+        Matcher matcher = pattern.matcher(definitionName);
+        if (matcher.matches()) {
+            int groupCount = matcher.groupCount() + 1;
+            Object[] vars = new Object[groupCount];
+            for (int i = 0; i < groupCount; i++) {
+                vars[i] = matcher.group(i);
+            }
+            retValue = PatternUtil.replacePlaceholders(definition,
+                    definitionName, vars);
+        }
+        return retValue;
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherFactory.java?rev=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherFactory.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherFactory.java Sat Jul 18 11:26:09 2009
@@ -0,0 +1,41 @@
+/*
+ * $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.regexp;
+
+import org.apache.tiles.Definition;
+import org.apache.tiles.definition.pattern.DefinitionPatternMatcher;
+import org.apache.tiles.definition.pattern.DefinitionPatternMatcherFactory;
+
+/**
+ * Creates instances of {@link RegexpDefinitionPatternMatcher}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class RegexpDefinitionPatternMatcherFactory implements
+        DefinitionPatternMatcherFactory {
+
+    /** {@inheritDoc} */
+    public DefinitionPatternMatcher createDefinitionPatternMatcher(
+            String pattern, Definition definition) {
+        return new RegexpDefinitionPatternMatcher(pattern, definition);
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/package.html?rev=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/package.html (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/regexp/package.html Sat Jul 18 11:26:09 2009
@@ -0,0 +1,30 @@
+<!--
+/*
+ * $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.
+ */
+-->
+<html>
+<head>
+    <title>Tiles support to regular expression patterns</title>
+</head>
+<body>
+In Tiles it is possible to use regular expression patterns thanks to this package.
+</body>
+</html>
\ No newline at end of file

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcher.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcher.java?rev=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcher.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcher.java Sat Jul 18 11:26:09 2009
@@ -0,0 +1,84 @@
+/*
+ * $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.wildcard;
+
+import java.util.List;
+
+import org.apache.tiles.Definition;
+import org.apache.tiles.definition.pattern.DefinitionPatternMatcher;
+import org.apache.tiles.definition.pattern.PatternUtil;
+import org.apache.tiles.util.WildcardHelper;
+
+/**
+ * Matches wildcard patterns in definitions.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class WildcardDefinitionPatternMatcher implements
+        DefinitionPatternMatcher {
+
+    /**
+     * Allows to parse wildcard expressions and to recognize substitution
+     * variables.
+     */
+    private WildcardHelper wildcardHelper;
+
+    /**
+     * The definition to use as a basis.
+     */
+    private Definition definition;
+
+    /**
+     * The pattern to use.
+     */
+    private int[] pattern;
+
+    /**
+     * Constructor.
+     *
+     * @param pattern The pattern to use, in string form.
+     * @param definition The definition to use as a basis.
+     * @param wildcardHelper The object that parses wildcard expressions and
+     * recognized substitution variables.
+     * @since 2.2.0
+     */
+    public WildcardDefinitionPatternMatcher(String pattern,
+            Definition definition, WildcardHelper wildcardHelper) {
+        this.wildcardHelper = wildcardHelper;
+        this.definition = definition;
+        this.pattern = wildcardHelper.compilePattern(pattern);
+    }
+
+    /** {@inheritDoc} */
+    public Definition createDefinition(String definitionName) {
+        List<String> vars = wildcardHelper.match(definitionName, pattern);
+        Definition d = null;
+
+        if (vars != null) {
+            d = PatternUtil.replacePlaceholders(definition, definitionName,
+                    vars.toArray());
+        }
+
+        return d;
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherFactory.java?rev=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherFactory.java (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherFactory.java Sat Jul 18 11:26:09 2009
@@ -0,0 +1,55 @@
+/*
+ * $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.wildcard;
+
+import org.apache.tiles.Definition;
+import org.apache.tiles.definition.pattern.DefinitionPatternMatcher;
+import org.apache.tiles.definition.pattern.DefinitionPatternMatcherFactory;
+import org.apache.tiles.definition.pattern.PatternRecognizer;
+import org.apache.tiles.util.WildcardHelper;
+
+/**
+ * Creates instances of {@link WildcardDefinitionPatternMatcher}.
+ *
+ * @version $Rev$ $Date$
+ * @since 2.2.0
+ */
+public class WildcardDefinitionPatternMatcherFactory implements
+        DefinitionPatternMatcherFactory, PatternRecognizer {
+
+    /**
+     * Allows to parse wildcard expressions and to recognize substitution
+     * variables.
+     */
+    private WildcardHelper wildcardHelper = new WildcardHelper();
+
+    /** {@inheritDoc} */
+    public DefinitionPatternMatcher createDefinitionPatternMatcher(
+            String pattern, Definition definition) {
+        return new WildcardDefinitionPatternMatcher(pattern, definition, wildcardHelper);
+    }
+
+    /** {@inheritDoc} */
+    public boolean isPatternRecognized(String candidatePattern) {
+        return candidatePattern.indexOf('*') >= 0;
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/package.html
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/package.html?rev=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/package.html (added)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/definition/pattern/wildcard/package.html Sat Jul 18 11:26:09 2009
@@ -0,0 +1,30 @@
+<!--
+/*
+ * $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.
+ */
+-->
+<html>
+<head>
+    <title>Tiles support to wildcard patterns</title>
+</head>
+<body>
+In Tiles it is possible to use wildcard patterns thanks to this package.
+</body>
+</html>
\ No newline at end of file

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

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

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java?rev=795343&r1=795342&r2=795343&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/factory/BasicTilesContainerFactory.java Sat Jul 18 11:26:09 2009
@@ -40,9 +40,10 @@
 import org.apache.tiles.definition.dao.DefinitionDAO;
 import org.apache.tiles.definition.dao.ResolvingLocaleUrlDefinitionDAO;
 import org.apache.tiles.definition.digester.DigesterDefinitionsReader;
+import org.apache.tiles.definition.pattern.BasicPatternDefinitionResolver;
 import org.apache.tiles.definition.pattern.PatternDefinitionResolver;
 import org.apache.tiles.definition.pattern.PatternDefinitionResolverAware;
-import org.apache.tiles.definition.pattern.WildcardPatternDefinitionResolver;
+import org.apache.tiles.definition.pattern.wildcard.WildcardDefinitionPatternMatcherFactory;
 import org.apache.tiles.evaluator.AttributeEvaluatorFactory;
 import org.apache.tiles.evaluator.BasicAttributeEvaluatorFactory;
 import org.apache.tiles.evaluator.impl.DirectAttributeEvaluator;
@@ -411,7 +412,9 @@
 
     /**
      * Creates a new pattern definition resolver. By default, it instantiate a
-     * {@link WildcardPatternDefinitionResolver}.
+     * {@link BasicPatternDefinitionResolver} with
+     * {@link WildcardDefinitionPatternMatcherFactory} to manage wildcard
+     * substitution.
      *
      * @param <T> The type of the customization key.
      * @param customizationKeyClass The customization key class.
@@ -420,7 +423,11 @@
      */
     protected <T> PatternDefinitionResolver<T> createPatternDefinitionResolver(
             Class<T> customizationKeyClass) {
-        return new WildcardPatternDefinitionResolver<T>();
+        WildcardDefinitionPatternMatcherFactory definitionPatternMatcherFactory =
+            new WildcardDefinitionPatternMatcherFactory();
+        return new BasicPatternDefinitionResolver<T>(
+                definitionPatternMatcherFactory,
+                definitionPatternMatcherFactory);
     }
 
     /**

Modified: tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/util/WildcardHelper.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/util/WildcardHelper.java?rev=795343&r1=795342&r2=795343&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/util/WildcardHelper.java (original)
+++ tiles/framework/trunk/tiles-core/src/main/java/org/apache/tiles/util/WildcardHelper.java Sat Jul 18 11:26:09 2009
@@ -185,31 +185,27 @@
         if (map == null) {
             throw new NullPointerException("No map provided");
         }
-        List<String> varsValues = new ArrayList<String>();
-        boolean retValue = match(varsValues, data, expr);
+        List<String> varsValues = match(data, expr);
         int i = 0;
         for (String value : varsValues) {
             map.put(i, value);
             i++;
         }
-        return retValue;
+        return varsValues != null;
     }
 
     /**
      * Match a pattern agains a string and isolates wildcard replacement into a
      * <code>Stack</code>.
      *
-     * @param varsValues The list to store matched values into.
      * @param data The string to match
      * @param expr The compiled wildcard expression
-     * @return True if a match
+     * @return The list of matched variables, or <code>null</code> if it does not match.
      * @throws NullPointerException If any parameters are null
      * @since 2.2.0
      */
-    public boolean match(List<String> varsValues, String data, int[] expr) {
-        if (varsValues == null) {
-            throw new NullPointerException("No value list provided");
-        }
+    public List<String> match(String data, int[] expr) {
+        List<String> varsValues = null;
 
         if (data == null) {
             throw new NullPointerException("No data provided");
@@ -234,9 +230,6 @@
         int rsltpos = 0;
         int offset = -1;
 
-        // We want the complete data be in {0}
-        varsValues.add(data);
-
         // First check for MATCH_BEGIN
         boolean matchBegin = false;
 
@@ -259,7 +252,7 @@
             // expression character matches the data in the input buffer
             if (matchBegin) {
                 if (!matchArray(expr, exprpos, charpos, buff, buffpos)) {
-                    return (false);
+                    return null;
                 }
 
                 matchBegin = false;
@@ -267,14 +260,14 @@
                 offset = indexOfArray(expr, exprpos, charpos, buff, buffpos);
 
                 if (offset < 0) {
-                    return (false);
+                    return null;
                 }
             }
 
             // Check for MATCH_BEGIN
             if (matchBegin) {
                 if (offset != 0) {
-                    return (false);
+                    return null;
                 }
 
                 matchBegin = false;
@@ -286,18 +279,25 @@
             // Check for END's
             if (exprchr == MATCH_END) {
                 if (rsltpos > 0) {
-                    varsValues.add(new String(rslt, 0, rsltpos));
+                    varsValues = addAndCreateList(varsValues, new String(rslt,
+                            0, rsltpos));
                 }
 
                 // Don't care about rest of input buffer
-                return (true);
+                varsValues = addElementOnTop(varsValues, data);
+                return varsValues;
             } else if (exprchr == MATCH_THEEND) {
                 if (rsltpos > 0) {
-                    varsValues.add(new String(rslt, 0, rsltpos));
+                    varsValues = addAndCreateList(varsValues, new String(rslt,
+                            0, rsltpos));
                 }
 
                 // Check that we reach buffer's end
-                return (buffpos == buff.length);
+                if (buffpos == buff.length) {
+                    addElementOnTop(varsValues, data);
+                    return varsValues;
+                }
+                return null;
             }
 
             // Search the next expression character
@@ -317,7 +317,7 @@
                     charpos, buff, buffpos);
 
             if (offset < 0) {
-                return (false);
+                return null;
             }
 
             // Copy the data from the source buffer into the result buffer
@@ -330,14 +330,15 @@
                 // Matching file, don't copy '/'
                 while (buffpos < offset) {
                     if (buff[buffpos] == '/') {
-                        return (false);
+                        return null;
                     }
 
                     rslt[rsltpos++] = buff[buffpos++];
                 }
             }
 
-            varsValues.add(new String(rslt, 0, rsltpos));
+            varsValues = addAndCreateList(varsValues, new String(rslt, 0,
+                    rsltpos));
             rsltpos = 0;
         }
     }
@@ -537,4 +538,36 @@
 
         return ret.toString();
     }
+
+    /**
+     * Adds and object to a list. If the list is null, it creates it.
+     *
+     * @param <T> The type of the element.
+     * @param list The list.
+     * @param data The data to add.
+     * @return The list itself, or a new one if it is <code>null</code>.
+     */
+    private <T> List<T> addAndCreateList(List<T> list, T data) {
+        if (list == null) {
+            list = new ArrayList<T>();
+        }
+        list.add(data);
+        return list;
+    }
+
+    /**
+     * Adds and object on top of a list. If the list is null, it creates it.
+     *
+     * @param <T> The type of the element.
+     * @param list The list.
+     * @param data The data to add.
+     * @return The list itself, or a new one if it is <code>null</code>.
+     */
+    private <T> List<T> addElementOnTop(List<T> list, T data) {
+        if (list == null) {
+            list = new ArrayList<T>();
+        }
+        list.add(0, data);
+        return list;
+    }
 }

Modified: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAOTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAOTest.java?rev=795343&r1=795342&r2=795343&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAOTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/dao/CachingLocaleUrlDefinitionDAOTest.java Sat Jul 18 11:26:09 2009
@@ -48,7 +48,9 @@
 import org.apache.tiles.definition.MockDefinitionsReader;
 import org.apache.tiles.definition.RefreshMonitor;
 import org.apache.tiles.definition.digester.DigesterDefinitionsReader;
-import org.apache.tiles.definition.pattern.WildcardPatternDefinitionResolver;
+import org.apache.tiles.definition.pattern.BasicPatternDefinitionResolver;
+import org.apache.tiles.definition.pattern.PatternDefinitionResolver;
+import org.apache.tiles.definition.pattern.wildcard.WildcardDefinitionPatternMatcherFactory;
 import org.easymock.EasyMock;
 
 /**
@@ -74,7 +76,12 @@
     protected void setUp() throws Exception {
         super.setUp();
         definitionDao = new CachingLocaleUrlDefinitionDAO();
-        definitionDao.setPatternDefinitionResolver(new WildcardPatternDefinitionResolver<Locale>());
+        WildcardDefinitionPatternMatcherFactory definitionPatternMatcherFactory =
+            new WildcardDefinitionPatternMatcherFactory();
+        PatternDefinitionResolver<Locale> definitionResolver = new BasicPatternDefinitionResolver<Locale>(
+                definitionPatternMatcherFactory,
+                definitionPatternMatcherFactory);
+        definitionDao.setPatternDefinitionResolver(definitionResolver);
     }
 
     /**

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=795343&r1=795342&r2=795343&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 Sat Jul 18 11:26:09 2009
@@ -37,6 +37,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import junit.framework.TestCase;
+
 import org.apache.tiles.Attribute;
 import org.apache.tiles.Definition;
 import org.apache.tiles.ListAttribute;
@@ -48,11 +50,11 @@
 import org.apache.tiles.definition.MockDefinitionsReader;
 import org.apache.tiles.definition.RefreshMonitor;
 import org.apache.tiles.definition.digester.DigesterDefinitionsReader;
-import org.apache.tiles.definition.pattern.WildcardPatternDefinitionResolver;
+import org.apache.tiles.definition.pattern.BasicPatternDefinitionResolver;
+import org.apache.tiles.definition.pattern.PatternDefinitionResolver;
+import org.apache.tiles.definition.pattern.wildcard.WildcardDefinitionPatternMatcherFactory;
 import org.easymock.EasyMock;
 
-import junit.framework.TestCase;
-
 /**
  * Tests {@link ResolvingLocaleUrlDefinitionDAO}.
  *
@@ -76,7 +78,12 @@
     protected void setUp() throws Exception {
         super.setUp();
         definitionDao = new ResolvingLocaleUrlDefinitionDAO();
-        definitionDao.setPatternDefinitionResolver(new WildcardPatternDefinitionResolver<Locale>());
+        WildcardDefinitionPatternMatcherFactory definitionPatternMatcherFactory =
+            new WildcardDefinitionPatternMatcherFactory();
+        PatternDefinitionResolver<Locale> definitionResolver = new BasicPatternDefinitionResolver<Locale>(
+                definitionPatternMatcherFactory,
+                definitionPatternMatcherFactory);
+        definitionDao.setPatternDefinitionResolver(definitionResolver);
     }
 
     /**

Added: 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=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolverTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/BasicPatternDefinitionResolverTest.java Sat Jul 18 11:26:09 2009
@@ -0,0 +1,108 @@
+/*
+ * $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.Map;
+
+import org.apache.tiles.Attribute;
+import org.apache.tiles.Definition;
+import org.junit.Test;
+
+/**
+ * Tests {@link BasicPatternDefinitionResolver}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class BasicPatternDefinitionResolverTest {
+
+    /**
+     * Test method for
+     * {@link BasicPatternDefinitionResolver#resolveDefinition(String, Object)}.
+     */
+    @Test
+    public void testResolveDefinition() {
+        DefinitionPatternMatcherFactory factory = createMock(DefinitionPatternMatcherFactory.class);
+        PatternRecognizer recognizer = createMock(PatternRecognizer.class);
+        DefinitionPatternMatcher firstMatcher = createMock(DefinitionPatternMatcher.class);
+        DefinitionPatternMatcher thirdMatcher = createMock(DefinitionPatternMatcher.class);
+
+        expect(recognizer.isPatternRecognized("first")).andReturn(true);
+        expect(recognizer.isPatternRecognized("second")).andReturn(false);
+        expect(recognizer.isPatternRecognized("third")).andReturn(true)
+                .times(2);
+
+        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(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);
+
+        replay(factory, recognizer, firstMatcher, thirdMatcher);
+        PatternDefinitionResolver<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));
+        verify(factory, recognizer, firstMatcher, thirdMatcher);
+    }
+}

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

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

Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherFactoryTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherFactoryTest.java?rev=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherFactoryTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherFactoryTest.java Sat Jul 18 11:26:09 2009
@@ -0,0 +1,60 @@
+/*
+ * $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.regexp;
+
+import static org.junit.Assert.*;
+
+import org.apache.tiles.Definition;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests {@link RegexpDefinitionPatternMatcherFactory}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class RegexpDefinitionPatternMatcherFactoryTest {
+
+    /**
+     * The object to test.
+     */
+    private RegexpDefinitionPatternMatcherFactory factory;
+
+    /**
+     * Sets up the object to test.
+     */
+    @Before
+    public void setUp() {
+        factory = new RegexpDefinitionPatternMatcherFactory();
+    }
+
+    /**
+     * Test method for
+     * {@link RegexpDefinitionPatternMatcherFactory#createDefinitionPatternMatcher(String, Definition)}
+     * .
+     */
+    @Test
+    public void testCreateDefinitionPatternMatcher() {
+        assertTrue(factory.createDefinitionPatternMatcher("myPattern",
+                new Definition()) instanceof RegexpDefinitionPatternMatcher);
+    }
+}

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

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

Copied: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherTest.java (from r788728, tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/RegexpPatternDefinitionResolverTest.java)
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherTest.java?p2=tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherTest.java&p1=tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/RegexpPatternDefinitionResolverTest.java&r1=788728&r2=795343&rev=795343&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/RegexpPatternDefinitionResolverTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/regexp/RegexpDefinitionPatternMatcherTest.java Sat Jul 18 11:26:09 2009
@@ -19,38 +19,22 @@
  * under the License.
  */
 
-package org.apache.tiles.definition.pattern;
+package org.apache.tiles.definition.pattern.regexp;
 
 import static org.junit.Assert.*;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.tiles.Attribute;
 import org.apache.tiles.Definition;
-import org.junit.Before;
+import org.apache.tiles.definition.pattern.DefinitionPatternMatcher;
 import org.junit.Test;
 
 /**
- * Tests {@link RegexpPatternDefinitionResolver}.
+ * Tests {@link RegexpDefinitionPatternMatcher}.
  *
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class RegexpPatternDefinitionResolverTest {
-
-    /**
-     * The resolver to test.
-     */
-    private RegexpPatternDefinitionResolver<Integer> resolver;
-
-    /**
-     * Sets up the resolver.
-     */
-    @Before
-    public void setUp() {
-        resolver = new RegexpPatternDefinitionResolver<Integer>();
-    }
+public class RegexpDefinitionPatternMatcherTest {
 
     /**
      * Test method for
@@ -59,15 +43,12 @@
      */
     @Test
     public void testResolveDefinition() {
-        Integer key = 1;
-        Map<String, Definition> defsMap = new HashMap<String, Definition>();
         Definition def = new Definition();
-        def.setName("~testDef(.*)\\.message(.*)");
+        def.setName("testDef(.*)\\.message(.*)");
         def.setTemplateAttribute(Attribute.createTemplateAttribute("/test{1}.jsp"));
         def.putAttribute("body", new Attribute("message{2}"));
-        defsMap.put("~testDef(.*)\\.message(.*)", def);
-        resolver.storeDefinitionPatterns(defsMap, key);
-        Definition result = resolver.resolveDefinition("testDefOne.messageTwo", key);
+        DefinitionPatternMatcher patternMatcher = new RegexpDefinitionPatternMatcher("testDef(.*)\\.message(.*)", def);
+        Definition result = patternMatcher.createDefinition("testDefOne.messageTwo");
         assertNotNull(result);
         assertEquals("testDefOne.messageTwo", result.getName());
         assertEquals("/testOne.jsp", result.getTemplateAttribute().getValue());

Added: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherFactoryTest.java
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherFactoryTest.java?rev=795343&view=auto
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherFactoryTest.java (added)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherFactoryTest.java Sat Jul 18 11:26:09 2009
@@ -0,0 +1,70 @@
+/*
+ * $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.wildcard;
+
+import static org.junit.Assert.*;
+
+import org.apache.tiles.Definition;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests {@link WildcardDefinitionPatternMatcherFactory}.
+ *
+ * @version $Rev$ $Date$
+ */
+public class WildcardDefinitionPatternMatcherFactoryTest {
+
+    /**
+     * The object to test.
+     */
+    private WildcardDefinitionPatternMatcherFactory factory;
+
+    /**
+     * Sets up the object to test.
+     */
+    @Before
+    public void setUp() {
+        factory = new WildcardDefinitionPatternMatcherFactory();
+    }
+
+    /**
+     * Test method for
+     * {@link WildcardDefinitionPatternMatcherFactory#createDefinitionPatternMatcher(String, Definition)}
+     * .
+     */
+    @Test
+    public void testCreateDefinitionPatternMatcher() {
+        assertTrue(factory.createDefinitionPatternMatcher("myPattern",
+                new Definition()) instanceof WildcardDefinitionPatternMatcher);
+    }
+
+    /**
+     * Test method for {@link WildcardDefinitionPatternMatcherFactory#isPatternRecognized(String)}.
+     */
+    @Test
+    public void testIsPatternRecognized() {
+        assertTrue(factory.isPatternRecognized("my*pattern"));
+        assertFalse(factory.isPatternRecognized("mypattern"));
+    }
+
+}

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

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

Copied: tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherTest.java (from r788728, tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java)
URL: http://svn.apache.org/viewvc/tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherTest.java?p2=tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherTest.java&p1=tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java&r1=788728&r2=795343&rev=795343&view=diff
==============================================================================
--- tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/WildcardPatternDefinitionResolverTest.java (original)
+++ tiles/framework/trunk/tiles-core/src/test/java/org/apache/tiles/definition/pattern/wildcard/WildcardDefinitionPatternMatcherTest.java Sat Jul 18 11:26:09 2009
@@ -19,53 +19,36 @@
  * under the License.
  */
 
-package org.apache.tiles.definition.pattern;
+package org.apache.tiles.definition.pattern.wildcard;
 
 import static org.junit.Assert.*;
 
-import java.util.HashMap;
-import java.util.Map;
-
 import org.apache.tiles.Attribute;
 import org.apache.tiles.Definition;
-import org.junit.Before;
+import org.apache.tiles.definition.pattern.DefinitionPatternMatcher;
+import org.apache.tiles.util.WildcardHelper;
 import org.junit.Test;
 
 /**
- * Tests {@link WildcardPatternDefinitionResolver}.
+ * Tests {@link WildcardDefinitionPatternMatcher}.
  *
  * @version $Rev$ $Date$
  * @since 2.2.0
  */
-public class WildcardPatternDefinitionResolverTest {
-
-    /**
-     * The resolver to test.
-     */
-    private WildcardPatternDefinitionResolver<Integer> resolver;
-
-    /**
-     * Sets up the resolver.
-     */
-    @Before
-    public void setUp() {
-        resolver = new WildcardPatternDefinitionResolver<Integer>();
-    }
+public class WildcardDefinitionPatternMatcherTest {
 
     /**
-     * Test method for {@link WildcardPatternDefinitionResolver#resolveDefinition(String, Object)}.
+     * Test method for {@link WildcardDefinitionPatternMatcher#createDefinition(String)}.
      */
     @Test
     public void testResolveDefinition() {
-        Integer key = 1;
-        Map<String, Definition> defsMap = new HashMap<String, Definition>();
         Definition def = new Definition();
         def.setName("testDef*.message*");
         def.setTemplateAttribute(Attribute.createTemplateAttribute("/test{1}.jsp"));
         def.putAttribute("body", new Attribute("message{2}"));
-        defsMap.put("testDef*.message*", def);
-        resolver.storeDefinitionPatterns(defsMap, key);
-        Definition result = resolver.resolveDefinition("testDefOne.messageTwo", key);
+        DefinitionPatternMatcher patternMatcher = new WildcardDefinitionPatternMatcher(
+                "testDef*.message*", def, new WildcardHelper());
+        Definition result = patternMatcher.createDefinition("testDefOne.messageTwo");
         assertNotNull(result);
         assertEquals("testDefOne.messageTwo", result.getName());
         assertEquals("/testOne.jsp", result.getTemplateAttribute().getValue());