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());