dgraham 2004/01/10 13:29:12 Modified: src/share/org/apache/struts/util WildcardHelper.java src/share/org/apache/struts/config ActionConfigMatcher.java Log: Changed WildcardHelper methods from statics to instance methods to allow subclasses to override and customize behavior. Changed WildcardHelper.match() to accept a generic Map parameter rather than HashMap. Revision Changes Path 1.4 +19 -16 jakarta-struts/src/share/org/apache/struts/util/WildcardHelper.java Index: WildcardHelper.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/util/WildcardHelper.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- WildcardHelper.java 10 Jan 2004 21:20:48 -0000 1.3 +++ WildcardHelper.java 10 Jan 2004 21:29:12 -0000 1.4 @@ -61,25 +61,29 @@ package org.apache.struts.util; -import java.util.HashMap; +import java.util.Map; /** * This class is an utility class that perform wilcard-patterns matching and * isolation taken from Apache Cocoon. * - * (Apache Software Foundation) + * @since Struts 1.2 * @version CVS $Id$ */ public class WildcardHelper { /** The int representing '*' in the pattern <code>int []</code>. */ protected static final int MATCH_FILE = -1; + /** The int representing '**' in the pattern <code>int []</code>. */ protected static final int MATCH_PATH = -2; + /** The int representing begin in the pattern <code>int []</code>. */ protected static final int MATCH_BEGIN = -4; + /** The int representing end in pattern <code>int []</code>. */ protected static final int MATCH_THEEND = -5; + /** The int value that terminates the pattern <code>int []</code>. */ protected static final int MATCH_END = -3; @@ -117,8 +121,7 @@ * value (don't consider the array length). * @exception NullPointerException If data is null. */ - public static int[] compilePattern(String data) - throws NullPointerException { + public int[] compilePattern(String data) { // Prepare the arrays int expr[] = new int[data.length() + 2]; @@ -182,8 +185,7 @@ * @return True if a match * @throws NullPointerException If any parameters are null */ - public static boolean match (HashMap map, String data, - int[] expr) throws NullPointerException { + public boolean match(Map map, String data, int[] expr) { if (map == null) { throw new NullPointerException ("No map provided"); } @@ -315,7 +317,7 @@ } } - /** + /** * Get the offset of a part of an int array within a char array. * <br> * This method return the index in d of the first occurrence after dpos of @@ -330,8 +332,9 @@ * @return The offset in d of the part of r matched in d or -1 if that was * not found. */ - protected static int indexOfArray (int r[], int rpos, int rend, + protected int indexOfArray (int r[], int rpos, int rend, char d[], int dpos) { + // Check if pos and len are legal if (rend < rpos) { throw new IllegalArgumentException ("rend < rpos"); @@ -372,7 +375,7 @@ return (-1); } - /** + /** * Get the offset of a last occurance of an int array within a char array. * <br> * This method return the index in d of the last occurrence after dpos of @@ -387,7 +390,7 @@ * @return The offset in d of the last part of r matched in d or -1 if * that was not found. */ - protected static int lastIndexOfArray (int r[], int rpos, int rend, + protected int lastIndexOfArray (int r[], int rpos, int rend, char d[], int dpos) { // Check if pos and len are legal if (rend < rpos) { @@ -432,7 +435,7 @@ return (-1); } - /** + /** * Matches elements of array r from rpos to rend with array d, starting * from dpos. * <br> @@ -446,7 +449,7 @@ * @param dpos The starting offset in d for the matching. * @return true if array d starts from portion of array r. */ - protected static boolean matchArray (int r[], int rpos, int rend, + protected boolean matchArray (int r[], int rpos, int rend, char d[], int dpos) { if (d.length - dpos < rend - rpos) { return (false); 1.7 +17 -12 jakarta-struts/src/share/org/apache/struts/config/ActionConfigMatcher.java Index: ActionConfigMatcher.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ActionConfigMatcher.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ActionConfigMatcher.java 10 Jan 2004 21:03:33 -0000 1.6 +++ ActionConfigMatcher.java 10 Jan 2004 21:29:12 -0000 1.7 @@ -77,10 +77,11 @@ import org.apache.struts.util.WildcardHelper; /** - * Matches paths against pre-compiled wildcard expressions pulled from - * action configs. It uses the wildcard matcher from the Apache - * Cocoon project. + * Matches paths against pre-compiled wildcard expressions pulled from + * action configs. It uses the wildcard matcher from the Apache + * Cocoon project. * + * @since Struts 1.2 */ public class ActionConfigMatcher implements Serializable { @@ -89,6 +90,11 @@ */ private static final Log log = LogFactory.getLog(ActionConfigMatcher.class); + + /** + * Handles all wildcard pattern matching. + */ + private static final WildcardHelper wildcard = new WildcardHelper(); /** * The compiled paths and their associated ActionConfig's @@ -117,18 +123,17 @@ if (log.isDebugEnabled()) { log.debug("Compiling action config path '" + path + "'"); } - pattern = WildcardHelper.compilePattern(path); + pattern = wildcard.compilePattern(path); compiledPaths.add(new Mapping(pattern, configs[x])); } } } /** - * Matches the path against the compiled wildcard patterns. + * Matches the path against the compiled wildcard patterns. * - * @param path The portion of the request URI for selecting a - * config - * @return The action config if matched, else null + * @param path The portion of the request URI for selecting a config. + * @return The action config if matched, else null */ public ActionConfig match(String path) { @@ -145,7 +150,7 @@ HashMap vars = new HashMap(); for (Iterator i = compiledPaths.iterator(); i.hasNext();) { m = (Mapping) i.next(); - if (WildcardHelper.match(vars, path, m.getPattern())) { + if (wildcard.match(vars, path, m.getPattern())) { config = convertActionConfig( path, (ActionConfig) m.getActionConfig(),
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]