Author: ningjiang
Date: Mon May 31 01:54:53 2010
New Revision: 949645

URL: http://svn.apache.org/viewvc?rev=949645&view=rev
Log:
Fixed CS errors of camel-core-xml and camel-core-osgi

Modified:
    
camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiPackageScanClassResolver.java
    
camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/utils/BundleDelegatingClassLoader.java
    
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
    
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java
    
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/scan/AntPathMatcher.java

Modified: 
camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiPackageScanClassResolver.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiPackageScanClassResolver.java?rev=949645&r1=949644&r2=949645&view=diff
==============================================================================
--- 
camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiPackageScanClassResolver.java
 (original)
+++ 
camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiPackageScanClassResolver.java
 Mon May 31 01:54:53 2010
@@ -22,8 +22,8 @@ import java.util.Enumeration;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.camel.impl.DefaultPackageScanClassResolver;
 import org.apache.camel.core.osgi.utils.BundleDelegatingClassLoader;
+import org.apache.camel.impl.DefaultPackageScanClassResolver;
 import org.apache.camel.spi.PackageScanFilter;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;

Modified: 
camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/utils/BundleDelegatingClassLoader.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/utils/BundleDelegatingClassLoader.java?rev=949645&r1=949644&r2=949645&view=diff
==============================================================================
--- 
camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/utils/BundleDelegatingClassLoader.java
 (original)
+++ 
camel/trunk/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/utils/BundleDelegatingClassLoader.java
 Mon May 31 01:54:53 2010
@@ -1,20 +1,18 @@
-/*
- * 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
+/**
+ * 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
+ *      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.
+ * 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.camel.core.osgi.utils;
 
@@ -43,7 +41,7 @@ public class BundleDelegatingClassLoader
         this.classLoader = classLoader;
     }
 
-    protected Class findClass(String name) throws ClassNotFoundException {
+    protected Class<?> findClass(String name) throws ClassNotFoundException {
         return bundle.loadClass(name);
     }
 
@@ -59,12 +57,11 @@ public class BundleDelegatingClassLoader
         return bundle.getResources(name);
     }
 
-    protected Class loadClass(String name, boolean resolve) throws 
ClassNotFoundException {
+    protected Class<?> loadClass(String name, boolean resolve) throws 
ClassNotFoundException {
         Class clazz;
         try {
             clazz = findClass(name);
-        }
-        catch (ClassNotFoundException cnfe) {
+        } catch (ClassNotFoundException cnfe) {
             if (classLoader != null) {
                 try {
                     clazz = classLoader.loadClass(name);

Modified: 
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java?rev=949645&r1=949644&r2=949645&view=diff
==============================================================================
--- 
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
 (original)
+++ 
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
 Mon May 31 01:54:53 2010
@@ -21,10 +21,10 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlTransient;
-import javax.xml.bind.annotation.XmlType;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelException;
@@ -35,22 +35,48 @@ import org.apache.camel.builder.ErrorHan
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.properties.PropertiesComponent;
 import org.apache.camel.component.properties.PropertiesResolver;
+import org.apache.camel.core.xml.scan.PatternBasedPackageScanFilter;
 import org.apache.camel.management.DefaultManagementAgent;
 import org.apache.camel.management.DefaultManagementLifecycleStrategy;
 import org.apache.camel.management.DefaultManagementStrategy;
 import org.apache.camel.management.ManagedManagementStrategy;
-import org.apache.camel.model.*;
+import org.apache.camel.model.FromDefinition;
+import org.apache.camel.model.IdentifiedType;
+import org.apache.camel.model.InterceptDefinition;
+import org.apache.camel.model.InterceptFromDefinition;
+import org.apache.camel.model.InterceptSendToEndpointDefinition;
+import org.apache.camel.model.OnCompletionDefinition;
+import org.apache.camel.model.OnExceptionDefinition;
+import org.apache.camel.model.PackageScanDefinition;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.model.RouteBuilderDefinition;
+import org.apache.camel.model.RouteContainer;
+import org.apache.camel.model.RouteContextRefDefinition;
+import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.ThreadPoolProfileDefinition;
+import org.apache.camel.model.ToDefinition;
+import org.apache.camel.model.TransactedDefinition;
 import org.apache.camel.model.config.PropertiesDefinition;
 import org.apache.camel.model.dataformat.DataFormatsDefinition;
 import org.apache.camel.processor.interceptor.Delayer;
 import org.apache.camel.processor.interceptor.HandleFault;
 import org.apache.camel.processor.interceptor.TraceFormatter;
 import org.apache.camel.processor.interceptor.Tracer;
-import org.apache.camel.spi.*;
+import org.apache.camel.spi.ClassResolver;
+import org.apache.camel.spi.EventFactory;
+import org.apache.camel.spi.EventNotifier;
+import org.apache.camel.spi.ExecutorServiceStrategy;
+import org.apache.camel.spi.FactoryFinderResolver;
+import org.apache.camel.spi.InflightRepository;
+import org.apache.camel.spi.InterceptStrategy;
+import org.apache.camel.spi.LifecycleStrategy;
+import org.apache.camel.spi.ManagementStrategy;
+import org.apache.camel.spi.PackageScanClassResolver;
+import org.apache.camel.spi.ShutdownStrategy;
+import org.apache.camel.spi.ThreadPoolProfile;
 import org.apache.camel.util.CamelContextHelper;
 import org.apache.camel.util.EndpointHelper;
 import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.core.xml.scan.PatternBasedPackageScanFilter;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 

Modified: 
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java?rev=949645&r1=949644&r2=949645&view=diff
==============================================================================
--- 
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java
 (original)
+++ 
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelEndpointFactoryBean.java
 Mon May 31 01:54:53 2010
@@ -1,3 +1,19 @@
+/**
+ * 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.camel.core.xml;
 
 import javax.xml.bind.annotation.XmlAccessType;

Modified: 
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/scan/AntPathMatcher.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/scan/AntPathMatcher.java?rev=949645&r1=949644&r2=949645&view=diff
==============================================================================
--- 
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/scan/AntPathMatcher.java
 (original)
+++ 
camel/trunk/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/scan/AntPathMatcher.java
 Mon May 31 01:54:53 2010
@@ -1,9 +1,10 @@
-/*
- * Copyright 2002-2007 the original author or authors.
- *
- * Licensed 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
+/**
+ * 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
  *
@@ -21,20 +22,20 @@ import java.util.List;
 import java.util.StringTokenizer;
 
 /**
- * PathMatcher implementation for Ant-style path patterns.
- * Examples are provided below.
- *
- * <p>Part of this mapping code has been kindly borrowed from
- * <a href="http://ant.apache.org";>Apache Ant</a>.
- *
- * <p>The mapping matches URLs using the following rules:<br>
+ * PathMatcher implementation for Ant-style path patterns. Examples are 
provided
+ * below.
+ * <p>
+ * Part of this mapping code has been kindly borrowed from <a
+ * href="http://ant.apache.org";>Apache Ant</a>.
+ * <p>
+ * The mapping matches URLs using the following rules:<br>
  * <ul>
  * <li>? matches one character</li>
  * <li>* matches zero or more characters</li>
  * <li>** matches zero or more 'directories' in a path</li>
  * </ul>
- *
- * <p>Some examples:<br>
+ * <p>
+ * Some examples:<br>
  * <ul>
  * <li><code>com/t?st.jsp</code> - matches <code>com/test.jsp</code> but also
  * <code>com/tast.jsp</code> or <code>com/txst.jsp</code></li>
@@ -42,14 +43,14 @@ import java.util.StringTokenizer;
  * <code>com</code> directory</li>
  * <li><code>com/&#42;&#42;/test.jsp</code> - matches all <code>test.jsp</code>
  * files underneath the <code>com</code> path</li>
- * <li><code>org/springframework/&#42;&#42;/*.jsp</code> - matches all 
<code>.jsp</code>
- * files underneath the <code>org/springframework</code> path</li>
+ * <li><code>org/springframework/&#42;&#42;/*.jsp</code> - matches all
+ * <code>.jsp</code> files underneath the <code>org/springframework</code> 
path</li>
  * <li><code>org/&#42;&#42;/servlet/bla.jsp</code> - matches
  * <code>org/springframework/servlet/bla.jsp</code> but also
  * <code>org/springframework/testing/servlet/bla.jsp</code> and
  * <code>org/servlet/bla.jsp</code></li>
  * </ul>
- *
+ * 
  * @author Alef Arendsen
  * @author Juergen Hoeller
  * @author Rob Harrop
@@ -57,371 +58,383 @@ import java.util.StringTokenizer;
  */
 public class AntPathMatcher {
 
-       /** Default path separator: "/" */
-       public static final String DEFAULT_PATH_SEPARATOR = "/";
+    /** Default path separator: "/" */
+    public static final String DEFAULT_PATH_SEPARATOR = "/";
+
+    private String pathSeparator = DEFAULT_PATH_SEPARATOR;
+
+    /**
+     * Set the path separator to use for pattern parsing. Default is "/", as in
+     * Ant.
+     */
+    public void setPathSeparator(String pathSeparator) {
+        this.pathSeparator = pathSeparator != null ? pathSeparator : 
DEFAULT_PATH_SEPARATOR;
+    }
+
+    public boolean isPattern(String path) {
+        return path.indexOf('*') != -1 || path.indexOf('?') != -1;
+    }
+
+    public boolean match(String pattern, String path) {
+        return doMatch(pattern, path, true);
+    }
+
+    public boolean matchStart(String pattern, String path) {
+        return doMatch(pattern, path, false);
+    }
+
+    /**
+     * Actually match the given <code>path</code> against the given
+     * <code>pattern</code>.
+     * 
+     * @param pattern the pattern to match against
+     * @param path the path String to test
+     * @param fullMatch whether a full pattern match is required (else a 
pattern
+     *            match as far as the given base path goes is sufficient)
+     * @return <code>true</code> if the supplied <code>path</code> matched,
+     *         <code>false</code> if it didn't
+     */
+    protected boolean doMatch(String pattern, String path, boolean fullMatch) {
+        if (path.startsWith(this.pathSeparator) != 
pattern.startsWith(this.pathSeparator)) {
+            return false;
+        }
+
+        String[] pattDirs = tokenizeToStringArray(pattern, this.pathSeparator);
+        String[] pathDirs = tokenizeToStringArray(path, this.pathSeparator);
+
+        int pattIdxStart = 0;
+        int pattIdxEnd = pattDirs.length - 1;
+        int pathIdxStart = 0;
+        int pathIdxEnd = pathDirs.length - 1;
+
+        // Match all elements up to the first **
+        while (pattIdxStart <= pattIdxEnd && pathIdxStart <= pathIdxEnd) {
+            String patDir = pattDirs[pattIdxStart];
+            if ("**".equals(patDir)) {
+                break;
+            }
+            if (!matchStrings(patDir, pathDirs[pathIdxStart])) {
+                return false;
+            }
+            pattIdxStart++;
+            pathIdxStart++;
+        }
+
+        if (pathIdxStart > pathIdxEnd) {
+            // Path is exhausted, only match if rest of pattern is * or **'s
+            if (pattIdxStart > pattIdxEnd) {
+                return pattern.endsWith(this.pathSeparator) ? 
path.endsWith(this.pathSeparator) : !path
+                    .endsWith(this.pathSeparator);
+            }
+            if (!fullMatch) {
+                return true;
+            }
+            if (pattIdxStart == pattIdxEnd && 
pattDirs[pattIdxStart].equals("*")
+                && path.endsWith(this.pathSeparator)) {
+                return true;
+            }
+            for (int i = pattIdxStart; i <= pattIdxEnd; i++) {
+                if (!pattDirs[i].equals("**")) {
+                    return false;
+                }
+            }
+            return true;
+        } else if (pattIdxStart > pattIdxEnd) {
+            // String not exhausted, but pattern is. Failure.
+            return false;
+        } else if (!fullMatch && "**".equals(pattDirs[pattIdxStart])) {
+            // Path start definitely matches due to "**" part in pattern.
+            return true;
+        }
+
+        // up to last '**'
+        while (pattIdxStart <= pattIdxEnd && pathIdxStart <= pathIdxEnd) {
+            String patDir = pattDirs[pattIdxEnd];
+            if (patDir.equals("**")) {
+                break;
+            }
+            if (!matchStrings(patDir, pathDirs[pathIdxEnd])) {
+                return false;
+            }
+            pattIdxEnd--;
+            pathIdxEnd--;
+        }
+        if (pathIdxStart > pathIdxEnd) {
+            // String is exhausted
+            for (int i = pattIdxStart; i <= pattIdxEnd; i++) {
+                if (!pattDirs[i].equals("**")) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        while (pattIdxStart != pattIdxEnd && pathIdxStart <= pathIdxEnd) {
+            int patIdxTmp = -1;
+            for (int i = pattIdxStart + 1; i <= pattIdxEnd; i++) {
+                if (pattDirs[i].equals("**")) {
+                    patIdxTmp = i;
+                    break;
+                }
+            }
+            if (patIdxTmp == pattIdxStart + 1) {
+                // '**/**' situation, so skip one
+                pattIdxStart++;
+                continue;
+            }
+            // Find the pattern between padIdxStart & padIdxTmp in str between
+            // strIdxStart & strIdxEnd
+            int patLength = patIdxTmp - pattIdxStart - 1;
+            int strLength = pathIdxEnd - pathIdxStart + 1;
+            int foundIdx = -1;
+
+        strLoop:
+            for (int i = 0; i <= strLength - patLength; i++) {
+                for (int j = 0; j < patLength; j++) {
+                    String subPat = (String)pattDirs[pattIdxStart + j + 1];
+                    String subStr = (String)pathDirs[pathIdxStart + i + j];
+                    if (!matchStrings(subPat, subStr)) {
+                        continue strLoop;
+                    }
+                }
+                foundIdx = pathIdxStart + i;
+                break;
+            }
+
+            if (foundIdx == -1) {
+                return false;
+            }
+
+            pattIdxStart = patIdxTmp;
+            pathIdxStart = foundIdx + patLength;
+        }
+
+        for (int i = pattIdxStart; i <= pattIdxEnd; i++) {
+            if (!pattDirs[i].equals("**")) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Tests whether or not a string matches against a pattern. The pattern may
+     * contain two special characters:<br>
+     * '*' means zero or more characters<br>
+     * '?' means one and only one character
+     * 
+     * @param pattern pattern to match against. Must not be <code>null</code>.
+     * @param str string which must be matched against the pattern. Must not be
+     *            <code>null</code>.
+     * @return <code>true</code> if the string matches against the pattern, or
+     *         <code>false</code> otherwise.
+     */
+    private boolean matchStrings(String pattern, String str) {
+        char[] patArr = pattern.toCharArray();
+        char[] strArr = str.toCharArray();
+        int patIdxStart = 0;
+        int patIdxEnd = patArr.length - 1;
+        int strIdxStart = 0;
+        int strIdxEnd = strArr.length - 1;
+        char ch;
+
+        boolean containsStar = false;
+        for (int i = 0; i < patArr.length; i++) {
+            if (patArr[i] == '*') {
+                containsStar = true;
+                break;
+            }
+        }
+
+        if (!containsStar) {
+            // No '*'s, so we make a shortcut
+            if (patIdxEnd != strIdxEnd) {
+                return false; // Pattern and string do not have the same size
+            }
+            for (int i = 0; i <= patIdxEnd; i++) {
+                ch = patArr[i];
+                if (ch != '?') {
+                    if (ch != strArr[i]) {
+                        return false;
+                        // Character mismatch
+                    }
+                }
+            }
+            return true; // String matches against pattern
+        }
+
+        if (patIdxEnd == 0) {
+            return true; // Pattern contains only '*', which matches anything
+        }
+
+        // Process characters before first star
+        while ((ch = patArr[patIdxStart]) != '*' && strIdxStart <= strIdxEnd) {
+            if (ch != '?') {
+                if (ch != strArr[strIdxStart]) {
+                    return false;
+                    // Character mismatch
+                }
+            }
+            patIdxStart++;
+            strIdxStart++;
+        }
+        if (strIdxStart > strIdxEnd) {
+            // All characters in the string are used. Check if only '*'s are
+            // left in the pattern. If so, we succeeded. Otherwise failure.
+            for (int i = patIdxStart; i <= patIdxEnd; i++) {
+                if (patArr[i] != '*') {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        // Process characters after last star
+        while ((ch = patArr[patIdxEnd]) != '*' && strIdxStart <= strIdxEnd) {
+            if (ch != '?') {
+                if (ch != strArr[strIdxEnd]) {
+                    return false;
+                    // Character mismatch
+                }
+            }
+            patIdxEnd--;
+            strIdxEnd--;
+        }
+        if (strIdxStart > strIdxEnd) {
+            // All characters in the string are used. Check if only '*'s are
+            // left in the pattern. If so, we succeeded. Otherwise failure.
+            for (int i = patIdxStart; i <= patIdxEnd; i++) {
+                if (patArr[i] != '*') {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        // process pattern between stars. padIdxStart and patIdxEnd point
+        // always to a '*'.
+        while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) {
+            int patIdxTmp = -1;
+            for (int i = patIdxStart + 1; i <= patIdxEnd; i++) {
+                if (patArr[i] == '*') {
+                    patIdxTmp = i;
+                    break;
+                }
+            }
+            if (patIdxTmp == patIdxStart + 1) {
+                // Two stars next to each other, skip the first one.
+                patIdxStart++;
+                continue;
+            }
+            // Find the pattern between padIdxStart & padIdxTmp in str between
+            // strIdxStart & strIdxEnd
+            int patLength = patIdxTmp - patIdxStart - 1;
+            int strLength = strIdxEnd - strIdxStart + 1;
+            int foundIdx = -1;
+        strLoop: 
+            for (int i = 0; i <= strLength - patLength; i++) {
+                for (int j = 0; j < patLength; j++) {
+                    ch = patArr[patIdxStart + j + 1];
+                    if (ch != '?') {
+                        if (ch != strArr[strIdxStart + i + j]) {
+                            continue strLoop;
+                        }
+                    }
+                }
+
+                foundIdx = strIdxStart + i;
+                break;
+            }
 
-       private String pathSeparator = DEFAULT_PATH_SEPARATOR;
+            if (foundIdx == -1) {
+                return false;
+            }
 
+            patIdxStart = patIdxTmp;
+            strIdxStart = foundIdx + patLength;
+        }
 
-       /**
-        * Set the path separator to use for pattern parsing.
-        * Default is "/", as in Ant.
-        */
-       public void setPathSeparator(String pathSeparator) {
-               this.pathSeparator = (pathSeparator != null ? pathSeparator : 
DEFAULT_PATH_SEPARATOR);
-       }
-
-
-       public boolean isPattern(String path) {
-               return (path.indexOf('*') != -1 || path.indexOf('?') != -1);
-       }
-
-       public boolean match(String pattern, String path) {
-               return doMatch(pattern, path, true);
-       }
-
-       public boolean matchStart(String pattern, String path) {
-               return doMatch(pattern, path, false);
-       }
-
-
-       /**
-        * Actually match the given <code>path</code> against the given 
<code>pattern</code>.
-        * @param pattern the pattern to match against
-        * @param path the path String to test
-        * @param fullMatch whether a full pattern match is required
-        * (else a pattern match as far as the given base path goes is 
sufficient)
-        * @return <code>true</code> if the supplied <code>path</code> matched,
-        * <code>false</code> if it didn't
-        */
-       protected boolean doMatch(String pattern, String path, boolean 
fullMatch) {
-               if (path.startsWith(this.pathSeparator) != 
pattern.startsWith(this.pathSeparator)) {
-                       return false;
-               }
-
-               String[] pattDirs = tokenizeToStringArray(pattern, 
this.pathSeparator);
-               String[] pathDirs = tokenizeToStringArray(path, 
this.pathSeparator);
-
-               int pattIdxStart = 0;
-               int pattIdxEnd = pattDirs.length - 1;
-               int pathIdxStart = 0;
-               int pathIdxEnd = pathDirs.length - 1;
-
-               // Match all elements up to the first **
-               while (pattIdxStart <= pattIdxEnd && pathIdxStart <= 
pathIdxEnd) {
-                       String patDir = pattDirs[pattIdxStart];
-                       if ("**".equals(patDir)) {
-                               break;
-                       }
-                       if (!matchStrings(patDir, pathDirs[pathIdxStart])) {
-                               return false;
-                       }
-                       pattIdxStart++;
-                       pathIdxStart++;
-               }
-
-               if (pathIdxStart > pathIdxEnd) {
-                       // Path is exhausted, only match if rest of pattern is 
* or **'s
-                       if (pattIdxStart > pattIdxEnd) {
-                               return (pattern.endsWith(this.pathSeparator) ?
-                                               
path.endsWith(this.pathSeparator) : !path.endsWith(this.pathSeparator));
-                       }
-                       if (!fullMatch) {
-                               return true;
-                       }
-                       if (pattIdxStart == pattIdxEnd && 
pattDirs[pattIdxStart].equals("*") &&
-                                       path.endsWith(this.pathSeparator)) {
-                               return true;
-                       }
-                       for (int i = pattIdxStart; i <= pattIdxEnd; i++) {
-                               if (!pattDirs[i].equals("**")) {
-                                       return false;
-                               }
-                       }
-                       return true;
-               }
-               else if (pattIdxStart > pattIdxEnd) {
-                       // String not exhausted, but pattern is. Failure.
-                       return false;
-               }
-               else if (!fullMatch && "**".equals(pattDirs[pattIdxStart])) {
-                       // Path start definitely matches due to "**" part in 
pattern.
-                       return true;
-               }
-
-               // up to last '**'
-               while (pattIdxStart <= pattIdxEnd && pathIdxStart <= 
pathIdxEnd) {
-                       String patDir = pattDirs[pattIdxEnd];
-                       if (patDir.equals("**")) {
-                               break;
-                       }
-                       if (!matchStrings(patDir, pathDirs[pathIdxEnd])) {
-                               return false;
-                       }
-                       pattIdxEnd--;
-                       pathIdxEnd--;
-               }
-               if (pathIdxStart > pathIdxEnd) {
-                       // String is exhausted
-                       for (int i = pattIdxStart; i <= pattIdxEnd; i++) {
-                               if (!pattDirs[i].equals("**")) {
-                                       return false;
-                               }
-                       }
-                       return true;
-               }
-
-               while (pattIdxStart != pattIdxEnd && pathIdxStart <= 
pathIdxEnd) {
-                       int patIdxTmp = -1;
-                       for (int i = pattIdxStart + 1; i <= pattIdxEnd; i++) {
-                               if (pattDirs[i].equals("**")) {
-                                       patIdxTmp = i;
-                                       break;
-                               }
-                       }
-                       if (patIdxTmp == pattIdxStart + 1) {
-                               // '**/**' situation, so skip one
-                               pattIdxStart++;
-                               continue;
-                       }
-                       // Find the pattern between padIdxStart & padIdxTmp in 
str between
-                       // strIdxStart & strIdxEnd
-                       int patLength = (patIdxTmp - pattIdxStart - 1);
-                       int strLength = (pathIdxEnd - pathIdxStart + 1);
-                       int foundIdx = -1;
-
-                       strLoop:
-                           for (int i = 0; i <= strLength - patLength; i++) {
-                                   for (int j = 0; j < patLength; j++) {
-                                           String subPat = (String) 
pattDirs[pattIdxStart + j + 1];
-                                           String subStr = (String) 
pathDirs[pathIdxStart + i + j];
-                                           if (!matchStrings(subPat, subStr)) {
-                                                   continue strLoop;
-                                           }
-                                   }
-                                   foundIdx = pathIdxStart + i;
-                                   break;
-                           }
-
-                       if (foundIdx == -1) {
-                               return false;
-                       }
-
-                       pattIdxStart = patIdxTmp;
-                       pathIdxStart = foundIdx + patLength;
-               }
-
-               for (int i = pattIdxStart; i <= pattIdxEnd; i++) {
-                       if (!pattDirs[i].equals("**")) {
-                               return false;
-                       }
-               }
-
-               return true;
-       }
-
-       /**
-        * Tests whether or not a string matches against a pattern.
-        * The pattern may contain two special characters:<br>
-        * '*' means zero or more characters<br>
-        * '?' means one and only one character
-        * @param pattern pattern to match against.
-        * Must not be <code>null</code>.
-        * @param str string which must be matched against the pattern.
-        * Must not be <code>null</code>.
-        * @return <code>true</code> if the string matches against the
-        * pattern, or <code>false</code> otherwise.
-        */
-       private boolean matchStrings(String pattern, String str) {
-               char[] patArr = pattern.toCharArray();
-               char[] strArr = str.toCharArray();
-               int patIdxStart = 0;
-               int patIdxEnd = patArr.length - 1;
-               int strIdxStart = 0;
-               int strIdxEnd = strArr.length - 1;
-               char ch;
-
-               boolean containsStar = false;
-               for (int i = 0; i < patArr.length; i++) {
-                       if (patArr[i] == '*') {
-                               containsStar = true;
-                               break;
-                       }
-               }
-
-               if (!containsStar) {
-                       // No '*'s, so we make a shortcut
-                       if (patIdxEnd != strIdxEnd) {
-                               return false; // Pattern and string do not have 
the same size
-                       }
-                       for (int i = 0; i <= patIdxEnd; i++) {
-                               ch = patArr[i];
-                               if (ch != '?') {
-                                       if (ch != strArr[i]) {
-                                               return false;// Character 
mismatch
-                                       }
-                               }
-                       }
-                       return true; // String matches against pattern
-               }
-
-
-               if (patIdxEnd == 0) {
-                       return true; // Pattern contains only '*', which 
matches anything
-               }
-
-               // Process characters before first star
-               while ((ch = patArr[patIdxStart]) != '*' && strIdxStart <= 
strIdxEnd) {
-                       if (ch != '?') {
-                               if (ch != strArr[strIdxStart]) {
-                                       return false;// Character mismatch
-                               }
-                       }
-                       patIdxStart++;
-                       strIdxStart++;
-               }
-               if (strIdxStart > strIdxEnd) {
-                       // All characters in the string are used. Check if only 
'*'s are
-                       // left in the pattern. If so, we succeeded. Otherwise 
failure.
-                       for (int i = patIdxStart; i <= patIdxEnd; i++) {
-                               if (patArr[i] != '*') {
-                                       return false;
-                               }
-                       }
-                       return true;
-               }
-
-               // Process characters after last star
-               while ((ch = patArr[patIdxEnd]) != '*' && strIdxStart <= 
strIdxEnd) {
-                       if (ch != '?') {
-                               if (ch != strArr[strIdxEnd]) {
-                                       return false;// Character mismatch
-                               }
-                       }
-                       patIdxEnd--;
-                       strIdxEnd--;
-               }
-               if (strIdxStart > strIdxEnd) {
-                       // All characters in the string are used. Check if only 
'*'s are
-                       // left in the pattern. If so, we succeeded. Otherwise 
failure.
-                       for (int i = patIdxStart; i <= patIdxEnd; i++) {
-                               if (patArr[i] != '*') {
-                                       return false;
-                               }
-                       }
-                       return true;
-               }
-
-               // process pattern between stars. padIdxStart and patIdxEnd 
point
-               // always to a '*'.
-               while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) {
-                       int patIdxTmp = -1;
-                       for (int i = patIdxStart + 1; i <= patIdxEnd; i++) {
-                               if (patArr[i] == '*') {
-                                       patIdxTmp = i;
-                                       break;
-                               }
-                       }
-                       if (patIdxTmp == patIdxStart + 1) {
-                               // Two stars next to each other, skip the first 
one.
-                               patIdxStart++;
-                               continue;
-                       }
-                       // Find the pattern between padIdxStart & padIdxTmp in 
str between
-                       // strIdxStart & strIdxEnd
-                       int patLength = (patIdxTmp - patIdxStart - 1);
-                       int strLength = (strIdxEnd - strIdxStart + 1);
-                       int foundIdx = -1;
-                       strLoop:
-                       for (int i = 0; i <= strLength - patLength; i++) {
-                               for (int j = 0; j < patLength; j++) {
-                                       ch = patArr[patIdxStart + j + 1];
-                                       if (ch != '?') {
-                                               if (ch != strArr[strIdxStart + 
i + j]) {
-                                                       continue strLoop;
-                                               }
-                                       }
-                               }
-
-                               foundIdx = strIdxStart + i;
-                               break;
-                       }
-
-                       if (foundIdx == -1) {
-                               return false;
-                       }
-
-                       patIdxStart = patIdxTmp;
-                       strIdxStart = foundIdx + patLength;
-               }
-
-               // All characters in the string are used. Check if only '*'s 
are left
-               // in the pattern. If so, we succeeded. Otherwise failure.
-               for (int i = patIdxStart; i <= patIdxEnd; i++) {
-                       if (patArr[i] != '*') {
-                               return false;
-                       }
-               }
-
-               return true;
-       }
-
-       /**
-        * Given a pattern and a full path, determine the pattern-mapped part.
-        * <p>For example:
-        * <ul>
-        * <li>'<code>/docs/cvs/commit.html</code>' and 
'<code>/docs/cvs/commit.html</code> -> ''</li>
-        * <li>'<code>/docs/*</code>' and '<code>/docs/cvs/commit</code> -> 
'<code>cvs/commit</code>'</li>
-        * <li>'<code>/docs/cvs/*.html</code>' and 
'<code>/docs/cvs/commit.html</code> -> '<code>commit.html</code>'</li>
-        * <li>'<code>/docs/**</code>' and '<code>/docs/cvs/commit</code> -> 
'<code>cvs/commit</code>'</li>
-        * <li>'<code>/docs/**\/*.html</code>' and 
'<code>/docs/cvs/commit.html</code> -> '<code>cvs/commit.html</code>'</li>
-        * <li>'<code>/*.html</code>' and '<code>/docs/cvs/commit.html</code> 
-> '<code>docs/cvs/commit.html</code>'</li>
-        * <li>'<code>*.html</code>' and '<code>/docs/cvs/commit.html</code> -> 
'<code>/docs/cvs/commit.html</code>'</li>
-        * <li>'<code>*</code>' and '<code>/docs/cvs/commit.html</code> -> 
'<code>/docs/cvs/commit.html</code>'</li>
-        * </ul>
-        * <p>Assumes that {...@link #match} returns <code>true</code> for 
'<code>pattern</code>'
-        * and '<code>path</code>', but does <strong>not</strong> enforce this.
-        */
-       public String extractPathWithinPattern(String pattern, String path) {
-               String[] patternParts = tokenizeToStringArray(pattern, 
this.pathSeparator);
-               String[] pathParts = tokenizeToStringArray(path, 
this.pathSeparator);
-
-               StringBuffer buffer = new StringBuffer();
-
-               // Add any path parts that have a wildcarded pattern part.
-               int puts = 0;
-               for (int i = 0; i < patternParts.length; i++) {
-                       String patternPart = patternParts[i];
-                       if ((patternPart.indexOf('*') > -1 || 
patternPart.indexOf('?') > -1) && pathParts.length >= i + 1) {
-                               if (puts > 0 || (i == 0 && 
!pattern.startsWith(this.pathSeparator))) {
-                                       buffer.append(this.pathSeparator);
-                               }
-                               buffer.append(pathParts[i]);
-                               puts++;
-                       }
-               }
-
-               // Append any trailing path parts.
-               for (int i = patternParts.length; i < pathParts.length; i++) {
-                       if (puts > 0 || i > 0) {
-                               buffer.append(this.pathSeparator);
-                       }
-                       buffer.append(pathParts[i]);
-               }
+        // All characters in the string are used. Check if only '*'s are left
+        // in the pattern. If so, we succeeded. Otherwise failure.
+        for (int i = patIdxStart; i <= patIdxEnd; i++) {
+            if (patArr[i] != '*') {
+                return false;
+            }
+        }
 
-               return buffer.toString();
-       }
+        return true;
+    }
+
+    /**
+     * Given a pattern and a full path, determine the pattern-mapped part.
+     * <p>
+     * For example:
+     * <ul>
+     * <li>'<code>/docs/cvs/commit.html</code>' and '
+     * <code>/docs/cvs/commit.html</code> -> ''</li>
+     * <li>'<code>/docs/*</code>' and '<code>/docs/cvs/commit</code> -> '
+     * <code>cvs/commit</code>'</li>
+     * <li>'<code>/docs/cvs/*.html</code>' and '
+     * <code>/docs/cvs/commit.html</code> -> '<code>commit.html</code>'</li>
+     * <li>'<code>/docs/**</code>' and '<code>/docs/cvs/commit</code> -> '
+     * <code>cvs/commit</code>'</li>
+     * <li>'<code>/docs/**\/*.html</code>' and '
+     * <code>/docs/cvs/commit.html</code> -> 
'<code>cvs/commit.html</code>'</li>
+     * <li>'<code>/*.html</code>' and '<code>/docs/cvs/commit.html</code> -> '
+     * <code>docs/cvs/commit.html</code>'</li>
+     * <li>'<code>*.html</code>' and '<code>/docs/cvs/commit.html</code> -> '
+     * <code>/docs/cvs/commit.html</code>'</li>
+     * <li>'<code>*</code>' and '<code>/docs/cvs/commit.html</code> -> '
+     * <code>/docs/cvs/commit.html</code>'</li>
+     * </ul>
+     * <p>
+     * Assumes that {...@link #match} returns <code>true</code> for '
+     * <code>pattern</code>' and '<code>path</code>', but does
+     * <strong>not</strong> enforce this.
+     */
+    public String extractPathWithinPattern(String pattern, String path) {
+        String[] patternParts = tokenizeToStringArray(pattern, 
this.pathSeparator);
+        String[] pathParts = tokenizeToStringArray(path, this.pathSeparator);
+
+        StringBuffer buffer = new StringBuffer();
+
+        // Add any path parts that have a wildcarded pattern part.
+        int puts = 0;
+        for (int i = 0; i < patternParts.length; i++) {
+            String patternPart = patternParts[i];
+            if ((patternPart.indexOf('*') > -1 || patternPart.indexOf('?') > 
-1) && pathParts.length >= i + 1) {
+                if (puts > 0 || (i == 0 && 
!pattern.startsWith(this.pathSeparator))) {
+                    buffer.append(this.pathSeparator);
+                }
+                buffer.append(pathParts[i]);
+                puts++;
+            }
+        }
+
+        // Append any trailing path parts.
+        for (int i = patternParts.length; i < pathParts.length; i++) {
+            if (puts > 0 || i > 0) {
+                buffer.append(this.pathSeparator);
+            }
+            buffer.append(pathParts[i]);
+        }
+
+        return buffer.toString();
+    }
 
     /**
      * Tokenize the given String into a String array via a StringTokenizer.
      * Trims tokens and omits empty tokens.
-     * <p>The given delimiters string is supposed to consist of any number of
+     * <p>
+     * The given delimiters string is supposed to consist of any number of
      * delimiter characters. Each of those characters can be used to separate
      * tokens. A delimiter is always a single character; for multi-character
      * delimiters, consider using <code>delimitedListToStringArray</code>
+     * 
      * @param str the String to tokenize
-     * @param delimiters the delimiter characters, assembled as String
-     * (each of those characters is individually considered as delimiter).
+     * @param delimiters the delimiter characters, assembled as String (each of
+     *            those characters is individually considered as delimiter).
      * @return an array of the tokens
      * @see java.util.StringTokenizer
      * @see java.lang.String#trim()
@@ -431,7 +444,7 @@ public class AntPathMatcher {
             return null;
         }
         StringTokenizer st = new StringTokenizer(str, delimiters);
-        List tokens = new ArrayList();
+        List<String> tokens = new ArrayList<String>();
         while (st.hasMoreTokens()) {
             String token = st.nextToken();
             token = token.trim();
@@ -439,7 +452,7 @@ public class AntPathMatcher {
                 tokens.add(token);
             }
         }
-        return (String[]) tokens.toArray(new String[tokens.size()]);
+        return (String[])tokens.toArray(new String[tokens.size()]);
     }
 
 }


Reply via email to