This project has retired. For details please refer to its Attic page.
RegexpDefinitionPatternMatcher xref
View Javadoc

1   /*
2    * $Id: RegexpDefinitionPatternMatcher.java 795343 2009-07-18 11:26:09Z apetrelli $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   * http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  package org.apache.tiles.definition.pattern.regexp;
23  
24  import java.util.regex.Matcher;
25  import java.util.regex.Pattern;
26  
27  import org.apache.tiles.Definition;
28  import org.apache.tiles.definition.pattern.DefinitionPatternMatcher;
29  import org.apache.tiles.definition.pattern.PatternUtil;
30  
31  /**
32   * Matches regular expression patterns in definitions.
33   *
34   * @version $Rev: 795343 $ $Date: 2009-07-18 21:26:09 +1000 (Sat, 18 Jul 2009) $
35   * @since 2.2.0
36   */
37  public class RegexpDefinitionPatternMatcher implements DefinitionPatternMatcher {
38  
39      /**
40       * The pattern to match.
41       */
42      private Pattern pattern;
43  
44      /**
45       * The definition to use as a basis.
46       */
47      private Definition definition;
48  
49      /**
50       * Constructor.
51       *
52       * @param pattern The pattern to use, in string form.
53       * @param definition The definition to use as a basis.
54       * @since 2.2.0
55       */
56      public RegexpDefinitionPatternMatcher(String pattern, Definition definition) {
57          this.pattern = Pattern.compile(pattern);
58          this.definition = definition;
59      }
60  
61      /** {@inheritDoc} */
62      public Definition createDefinition(String definitionName) {
63          Definition retValue = null;
64          Matcher matcher = pattern.matcher(definitionName);
65          if (matcher.matches()) {
66              int groupCount = matcher.groupCount() + 1;
67              Object[] vars = new Object[groupCount];
68              for (int i = 0; i < groupCount; i++) {
69                  vars[i] = matcher.group(i);
70              }
71              retValue = PatternUtil.replacePlaceholders(definition,
72                      definitionName, vars);
73          }
74          return retValue;
75      }
76  }