Author: davsclaus
Date: Mon Nov 16 08:24:20 2009
New Revision: 880657

URL: http://svn.apache.org/viewvc?rev=880657&view=rev
Log:
CAMEL-2174: Moved ANT based package scan from camel-core to camel-spring where 
it belongs due to its usage of ANT path matcher from spring core.

Added:
    
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/PatternBasedPackageScanFilter.java
   (contents, props changed)
      - copied, changed from r880639, 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/scan/PatternBasedPackageScanFilter.java
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/DefaultPackageScanClassResolverTest.java
   (with props)
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PackageScanFiltersTest.java
   (with props)
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PatternBasedPackageScanFilterTest.java
   (with props)
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScanTestSupport.java
   (with props)
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableOne.java
   (with props)
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableTwo.java
   (with props)
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/a/
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/a/ScanTargetOne.java
   (with props)
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/b/
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/b/ScanTargetTwo.java
   (with props)
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/NotAScanTarget.java
   (with props)
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/ScanTargetThree.java
   (with props)
    
camel/trunk/components/camel-spring/src/test/resources/package+scan+test.jar   
(props changed)
      - copied unchanged from r880639, 
camel/trunk/camel-core/src/test/resources/package+scan+test.jar
    
camel/trunk/components/camel-spring/src/test/resources/package_scan_test.jar   
(props changed)
      - copied unchanged from r880639, 
camel/trunk/camel-core/src/test/resources/package_scan_test.jar
Removed:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/scan/PatternBasedPackageScanFilter.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/impl/scan/
    camel/trunk/camel-core/src/test/resources/package+scan+test.jar
    camel/trunk/camel-core/src/test/resources/package_scan_test.jar
Modified:
    
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java

Modified: 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java?rev=880657&r1=880656&r2=880657&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
 (original)
+++ 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
 Mon Nov 16 08:24:20 2009
@@ -32,7 +32,7 @@
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.ErrorHandlerBuilderRef;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.scan.PatternBasedPackageScanFilter;
+import org.apache.camel.spring.PatternBasedPackageScanFilter;
 import org.apache.camel.management.DefaultManagementAgent;
 import org.apache.camel.management.DefaultManagementLifecycleStrategy;
 import org.apache.camel.management.DefaultManagementStrategy;

Copied: 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/PatternBasedPackageScanFilter.java
 (from r880639, 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/scan/PatternBasedPackageScanFilter.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/PatternBasedPackageScanFilter.java?p2=camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/PatternBasedPackageScanFilter.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/impl/scan/PatternBasedPackageScanFilter.java&r1=880639&r2=880657&rev=880657&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/scan/PatternBasedPackageScanFilter.java
 (original)
+++ 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/PatternBasedPackageScanFilter.java
 Mon Nov 16 08:24:20 2009
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl.scan;
+package org.apache.camel.spring;
 
 import java.util.ArrayList;
 import java.util.Collection;

Propchange: 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/PatternBasedPackageScanFilter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/PatternBasedPackageScanFilter.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/DefaultPackageScanClassResolverTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/DefaultPackageScanClassResolverTest.java?rev=880657&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/DefaultPackageScanClassResolverTest.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/DefaultPackageScanClassResolverTest.java
 Mon Nov 16 08:24:20 2009
@@ -0,0 +1,169 @@
+/**
+ * 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.spring.scan;
+
+import java.lang.annotation.Annotation;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.camel.impl.DefaultPackageScanClassResolver;
+import org.apache.camel.spring.scan.a.ScanTargetOne;
+import org.apache.camel.spring.scan.b.ScanTargetTwo;
+import org.apache.camel.spring.scan.c.ScanTargetThree;
+
+public class DefaultPackageScanClassResolverTest extends 
org.apache.camel.spring.scan.ScanTestSupport {
+
+    private DefaultPackageScanClassResolver resolver;
+    private Set<Class<? extends Annotation>> annotations = new HashSet<Class<? 
extends Annotation>>();
+    private String scanPackage = "org.apache.camel.spring.scan";
+
+    public void setUp() throws Exception {
+        super.setUp();
+        resolver = new DefaultPackageScanClassResolver();
+        annotations.add(org.apache.camel.spring.scan.ScannableOne.class);
+        annotations.add(org.apache.camel.spring.scan.ScannableTwo.class);
+    }
+
+    public void testFindByAnnotationWithoutExtraFilters() {
+        Set<Class<?>> scanned = 
resolver.findAnnotated(org.apache.camel.spring.scan.ScannableOne.class, 
scanPackage);
+        validateMatchingSetContains(scanned, ScanTargetOne.class, 
ScanTargetTwo.class);
+
+        scanned = 
resolver.findAnnotated(org.apache.camel.spring.scan.ScannableTwo.class, 
scanPackage);
+        validateMatchingSetContains(scanned, ScanTargetThree.class);
+    }
+
+    public void testFindByAnnotationsWithoutExtraFilters() {
+        Set<Class<?>> scanned = resolver.findAnnotated(annotations, 
scanPackage);
+        validateMatchingSetContains(scanned, ScanTargetOne.class, 
ScanTargetTwo.class, ScanTargetThree.class);
+    }
+
+    public void testFindImplementationsWithoutExtraFilters() {
+        Set<Class<?>> scanned = 
resolver.findImplementations(ScanTargetOne.class, scanPackage);
+        validateMatchingSetContains(scanned, ScanTargetOne.class, 
ScanTargetTwo.class);
+    }
+    
+    public void testFindByAnnotationWithIncludePackageFilter() {
+        filter.addIncludePattern(scanPackage + ".b.*");
+        resolver.addFilter(filter);
+
+        Set<Class<?>> scanned = 
resolver.findAnnotated(org.apache.camel.spring.scan.ScannableOne.class, 
scanPackage);
+        validateMatchingSetContains(scanned, ScanTargetTwo.class);
+
+        scanned = resolver.findAnnotated(ScannableTwo.class, scanPackage);
+        validateMatchingSetContains(scanned);
+    }
+
+    public void testFindByAnnotationsWithIncludePackageFilter() {
+        filter.addIncludePattern(scanPackage + ".b.*");
+        filter.addIncludePattern(scanPackage + ".c.*");
+        resolver.addFilter(filter);
+
+        Set<Class<?>> scanned = resolver.findAnnotated(annotations, 
"org.apache.camel.spring.scan");
+        validateMatchingSetContains(scanned, ScanTargetTwo.class, 
ScanTargetThree.class);
+    }
+
+    public void testFindByAnnotationWithExcludePackageFilter() {
+        filter.addExcludePattern(scanPackage + ".b.*");
+        filter.addExcludePattern(scanPackage + ".c.*");
+        resolver.addFilter(filter);
+
+        Set<Class<?>> scanned = resolver.findAnnotated(ScannableOne.class, 
scanPackage);
+        validateMatchingSetContains(scanned, ScanTargetOne.class);
+
+        scanned = 
resolver.findAnnotated(org.apache.camel.spring.scan.ScannableTwo.class, 
scanPackage);
+        validateMatchingSetContains(scanned);
+    }
+
+    public void testFindByAnnotationsWithExcludePackageFilter() {
+        filter.addExcludePattern(scanPackage + ".a.*");
+
+        Set<Class<?>> scanned = resolver.findAnnotated(annotations, 
"org.apache.camel.spring.scan");
+        validateMatchingSetContains(scanned, ScanTargetTwo.class, 
ScanTargetThree.class);
+    }
+
+    public void testFindByFilterWithIncludePackageFilter() {
+        filter.addIncludePattern(scanPackage + ".**.ScanTarget*");
+        resolver.addFilter(filter);
+
+        Set<Class<?>> scanned = resolver.findByFilter(filter, 
"org.apache.camel.spring.scan");
+        validateMatchingSetContains(scanned, ScanTargetOne.class, 
ScanTargetTwo.class, ScanTargetThree.class);
+    }
+    
+    public void testFindImplementationsWithIncludePackageFilter() {
+        filter.addIncludePattern(scanPackage + ".b.*");
+        resolver.addFilter(filter);
+        
+        Set<Class<?>> scanned = 
resolver.findImplementations(ScanTargetOne.class, scanPackage);
+        validateMatchingSetContains(scanned,  ScanTargetTwo.class);
+    }
+    
+    public void testFindImplementationsWithExcludePackageFilter() {
+        filter.addExcludePattern(scanPackage + ".a.*");
+        resolver.addFilter(filter);
+        
+        Set<Class<?>> scanned = 
resolver.findImplementations(ScanTargetOne.class, scanPackage);
+        validateMatchingSetContains(scanned,  ScanTargetTwo.class);
+    }
+    
+    public void testFindByFilterPackageInJarUrl() throws Exception {
+        ClassLoader savedClassLoader = null;
+        try {
+            savedClassLoader = Thread.currentThread().getContextClassLoader();
+            URL url = getClass().getResource("/package_scan_test.jar");
+            
+            URL urls[] = {new URL("jar:" + url.toString() + "!/")};
+            URLClassLoader classLoader = new URLClassLoader(urls, 
savedClassLoader);
+
+            Thread.currentThread().setContextClassLoader(classLoader);
+
+            filter.addIncludePattern("a.*.c.*");
+            resolver.addFilter(filter);
+            Set<Class<?>> scanned = resolver.findByFilter(filter, "a.b.c");
+            assertEquals(1, scanned.size());
+            assertEquals("class a.b.c.Test", 
scanned.iterator().next().toString());            
+        } finally {
+            if (savedClassLoader != null) {
+                Thread.currentThread().setContextClassLoader(savedClassLoader);
+            } 
+        }
+    }
+    
+    public void testFindByFilterPackageInJarUrlWithPlusChars() throws 
Exception {
+        ClassLoader savedClassLoader = null;
+        try {
+            savedClassLoader = Thread.currentThread().getContextClassLoader();
+            URL url = getClass().getResource("/package+scan+test.jar");
+
+            URL urls[] = {new URL("jar:" + url.toString() + "!/")};
+            URLClassLoader classLoader = new URLClassLoader(urls, 
savedClassLoader);
+
+            Thread.currentThread().setContextClassLoader(classLoader);
+
+            filter.addIncludePattern("a.*.c.*");
+            resolver.addFilter(filter);
+            Set<Class<?>> scanned = resolver.findByFilter(filter, "a.b.c");
+            assertEquals(1, scanned.size());
+            assertEquals("class a.b.c.Test", 
scanned.iterator().next().toString());
+        } finally {
+            if (savedClassLoader != null) {
+                Thread.currentThread().setContextClassLoader(savedClassLoader);
+            }
+        }
+    }
+}

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/DefaultPackageScanClassResolverTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/DefaultPackageScanClassResolverTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PackageScanFiltersTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PackageScanFiltersTest.java?rev=880657&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PackageScanFiltersTest.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PackageScanFiltersTest.java
 Mon Nov 16 08:24:20 2009
@@ -0,0 +1,110 @@
+/**
+ * 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.spring.scan;
+
+import java.lang.annotation.Annotation;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+import junit.framework.TestCase;
+
+import org.apache.camel.impl.scan.AnnotatedWithAnyPackageScanFilter;
+import org.apache.camel.impl.scan.AnnotatedWithPackageScanFilter;
+import org.apache.camel.impl.scan.AssignableToPackageScanFilter;
+import org.apache.camel.impl.scan.CompositePackageScanFilter;
+import org.apache.camel.impl.scan.InvertingPackageScanFilter;
+import org.apache.camel.spi.PackageScanFilter;
+import org.apache.camel.spring.scan.a.ScanTargetOne;
+import org.apache.camel.spring.scan.b.ScanTargetTwo;
+import org.apache.camel.spring.scan.c.ScanTargetThree;
+import org.apache.camel.util.CollectionHelper;
+
+public class PackageScanFiltersTest extends TestCase {
+
+    public void testAssignableToPackageScanFilter() {
+        AssignableToPackageScanFilter filter = new 
AssignableToPackageScanFilter();
+        assertFalse(filter.matches(ScanTargetOne.class));
+
+        filter = new AssignableToPackageScanFilter(ScanTargetOne.class);
+        validateFilter(filter, ScanTargetOne.class);
+
+        filter = new AssignableToPackageScanFilter(ScanTargetOne.class);
+        validateFilter(filter, ScanTargetTwo.class);
+
+        Set<Class<?>> classes = new LinkedHashSet<Class<?>>();
+        classes.add(ScanTargetOne.class);
+        classes.add(ScanTargetThree.class);
+        filter = new AssignableToPackageScanFilter(classes);
+        validateFilter(filter, ScanTargetOne.class);
+        validateFilter(filter, ScanTargetTwo.class);
+        validateFilter(filter, ScanTargetThree.class);
+
+        assertTrue(filter.toString().contains("ScanTargetOne"));
+        assertTrue(filter.toString().contains("ScanTargetThree"));
+    }
+
+    public void testAnnotatedWithAnyPackageScanFilter() {
+        Set<Class<? extends Annotation>> annotations = new 
LinkedHashSet<Class<? extends Annotation>>();
+        annotations.add(org.apache.camel.spring.scan.ScannableOne.class);
+        annotations.add(org.apache.camel.spring.scan.ScannableTwo.class);
+
+        AnnotatedWithAnyPackageScanFilter filter = new 
AnnotatedWithAnyPackageScanFilter(annotations);
+        Class<ScanTargetOne> type = ScanTargetOne.class;
+        validateFilter(filter, type);
+        validateFilter(filter, ScanTargetThree.class);
+
+        assertEquals("annotated with any @[[interface 
org.apache.camel.spring.scan.ScannableOne, interface 
org.apache.camel.spring.scan.ScannableTwo]]", filter.toString());
+    }
+
+    public void testAnnotatedWithPackageScanFilter() {
+        AnnotatedWithPackageScanFilter filter = new 
AnnotatedWithPackageScanFilter(org.apache.camel.spring.scan.ScannableOne.class);
+        validateFilter(filter, ScanTargetOne.class);
+        validateFilter(filter, ScanTargetTwo.class);
+
+        filter = new AnnotatedWithPackageScanFilter(ScannableTwo.class);
+        validateFilter(filter, ScanTargetThree.class);
+        assertEquals("annotated with @ScannableTwo", filter.toString());
+    }
+
+    public void testCompositePackageScanFilter() {
+        PackageScanFilter one = new 
AnnotatedWithPackageScanFilter(org.apache.camel.spring.scan.ScannableOne.class);
+        PackageScanFilter two = new 
AssignableToPackageScanFilter(ScanTargetOne.class);
+        Set<PackageScanFilter> filters = 
CollectionHelper.createSetContaining(one, two);
+
+        CompositePackageScanFilter filter = new 
CompositePackageScanFilter(filters);
+        validateFilter(filter, ScanTargetOne.class);
+        validateFilter(filter, ScanTargetTwo.class);
+
+        filter = new CompositePackageScanFilter();
+        filter.addFilter(one);
+        filter.addFilter(two);
+        validateFilter(filter, ScanTargetOne.class);
+        validateFilter(filter, ScanTargetTwo.class);
+    }
+
+    public void testInvertingFilter() {
+        InvertingPackageScanFilter filter = new InvertingPackageScanFilter(new 
AnnotatedWithPackageScanFilter(ScannableOne.class));
+        validateFilter(filter, ScanTargetThree.class);
+        assertEquals("![annotated with @ScannableOne]", filter.toString());
+    }
+
+    private void validateFilter(PackageScanFilter filter, Class<?> type) {
+        assertTrue(filter.matches(type));
+        assertFalse(new InvertingPackageScanFilter(filter).matches(type));
+    }
+
+}

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PackageScanFiltersTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PackageScanFiltersTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PatternBasedPackageScanFilterTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PatternBasedPackageScanFilterTest.java?rev=880657&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PatternBasedPackageScanFilterTest.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PatternBasedPackageScanFilterTest.java
 Mon Nov 16 08:24:20 2009
@@ -0,0 +1,181 @@
+/**
+ * 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.spring.scan;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.RandomAccessFile;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+import java.util.jar.JarFile;
+
+import org.apache.camel.spring.PatternBasedPackageScanFilter;
+import org.apache.camel.util.CollectionHelper;
+
+...@suppresswarnings("unchecked")
+public class PatternBasedPackageScanFilterTest extends 
org.apache.camel.spring.scan.ScanTestSupport {
+
+    private Set<Class<?>> allClasses;
+
+    public void setUp() throws Exception {
+        // use classes that are pretty much constants
+        allClasses = new HashSet<Class<?>>();
+        allClasses.add(List.class);
+        allClasses.add(ArrayList.class);
+        allClasses.add(LinkedList.class);
+        allClasses.add(File.class);
+        allClasses.add(FileInputStream.class);
+        allClasses.add(RandomAccessFile.class);
+        // contains file pattern but in util pkg not io
+        allClasses.add(JarFile.class);
+        super.setUp();
+    }
+
+    public void testNoPattersIncludeAllClasses() {
+        validateMatchingSetContains(allClasses);
+    }
+
+    public void testIncludePatterns() {
+        addIncludePatterns("*");
+        validateMatchingSetContains(allClasses);
+
+        filter = new PatternBasedPackageScanFilter();
+        addIncludePatterns("java*");
+        validateMatchingSetContains(allClasses);
+
+        filter = new PatternBasedPackageScanFilter();
+        addIncludePatterns("java.io.*");
+        validateMatchingSetContains(File.class, FileInputStream.class, 
RandomAccessFile.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addIncludePatterns("java.util.**");
+        validateMatchingSetContains(List.class, ArrayList.class, 
LinkedList.class, JarFile.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addIncludePatterns("java.io.*", "java.util.*");
+        validateMatchingSetContains(allClasses);
+
+        filter = new PatternBasedPackageScanFilter();
+        addIncludePatterns("java.io.File");
+        validateMatchingSetContains(File.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addIncludePatterns("java.io.File*");
+        validateMatchingSetContains(File.class, FileInputStream.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addIncludePatterns("java.io.*File*");
+        validateMatchingSetContains(File.class, FileInputStream.class, 
RandomAccessFile.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addIncludePatterns("java.**.*File*");
+        validateMatchingSetContains(File.class, FileInputStream.class, 
RandomAccessFile.class, JarFile.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addIncludePatterns("java.util.*List");
+        validateMatchingSetContains(List.class, ArrayList.class, 
LinkedList.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addIncludePatterns("java.lang", "java.lang.*");
+        validateMatchingSetContains();
+
+        filter = new PatternBasedPackageScanFilter();
+        addIncludePatterns("java.lang", "java.lang.*");
+        validateMatchingSetContains();
+    }
+
+    public void testExcludePatterns() {
+        addExcludePatterns("*");
+        validateMatchingSetContains();
+
+        filter = new PatternBasedPackageScanFilter();
+        addExcludePatterns("java*");
+        validateMatchingSetContains();
+
+        filter = new PatternBasedPackageScanFilter();
+        addExcludePatterns("java.io.*");
+        validateMatchingSetContains(List.class, ArrayList.class, 
LinkedList.class, JarFile.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addExcludePatterns("java.util.**");
+        validateMatchingSetContains(File.class, FileInputStream.class, 
RandomAccessFile.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addExcludePatterns("java.io.*", "java.util.*");
+        validateMatchingSetContains();
+
+        filter = new PatternBasedPackageScanFilter();
+        addExcludePatterns("java.io.File");
+        validateMatchingSetContains(List.class, ArrayList.class, 
LinkedList.class, JarFile.class, FileInputStream.class, RandomAccessFile.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addExcludePatterns("java.io.File*");
+        validateMatchingSetContains(List.class, ArrayList.class, 
LinkedList.class, JarFile.class, RandomAccessFile.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addExcludePatterns("java.io.*File*");
+        validateMatchingSetContains(List.class, ArrayList.class, 
LinkedList.class, JarFile.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addExcludePatterns("java.**.*File*");
+        validateMatchingSetContains(List.class, ArrayList.class, 
LinkedList.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addExcludePatterns("java.util.*List");
+        validateMatchingSetContains(File.class, FileInputStream.class, 
RandomAccessFile.class, JarFile.class);
+
+        filter = new PatternBasedPackageScanFilter();
+        addExcludePatterns("java.lang", "java.lang.*");
+        validateMatchingSetContains(allClasses);
+
+        filter = new PatternBasedPackageScanFilter();
+        addExcludePatterns("java.lang", "java.lang.*");
+        validateMatchingSetContains(allClasses);
+    }
+
+    public void testExcludeHasPrecedenceOverInclude() {
+        // include any classes from the util pkg but exclude those in jar
+        addIncludePatterns("java.util.*");
+        addExcludePatterns("java.util.jar.*");
+        validateMatchingSetContains(List.class, ArrayList.class, 
LinkedList.class);
+    }
+    
+    public void testBulkIncludeAdd() {
+        // include any classes from the util pkg but exclude those in jar
+        Set<String> includes = 
CollectionHelper.createSetContaining("java.io.*", "java.util.*");
+        filter.addIncludePatterns(includes);
+        validateMatchingSetContains(allClasses);
+    }
+    
+    public void testBulkExcludeAdd() {
+        // include any classes from the util pkg but exclude those in jar
+        Set<String> excludes = 
CollectionHelper.createSetContaining("java.io.*", "java.util.*");
+        filter.addExcludePatterns(excludes);
+        validateMatchingSetContains();
+    }
+
+    protected void validateMatchingSetContains(Class<?>... matchingClasses) {
+        super.validateMatchingSetContains(allClasses, matchingClasses);
+    }
+
+    protected void validateMatchingSetContains(Set<Class<?>> matchingClasses) {
+        super.validateMatchingSetContains(allClasses, matchingClasses);
+    }
+}

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PatternBasedPackageScanFilterTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/PatternBasedPackageScanFilterTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScanTestSupport.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScanTestSupport.java?rev=880657&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScanTestSupport.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScanTestSupport.java
 Mon Nov 16 08:24:20 2009
@@ -0,0 +1,74 @@
+/**
+ * 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.spring.scan;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import junit.framework.TestCase;
+import org.apache.camel.spring.PatternBasedPackageScanFilter;
+
+...@suppresswarnings("unchecked")
+public abstract class ScanTestSupport extends TestCase {
+
+    protected PatternBasedPackageScanFilter filter;
+
+    public void setUp() throws Exception {
+        filter = new PatternBasedPackageScanFilter();
+    }
+
+    protected void validateMatchingSetContains(Set<Class<?>> scannedClasses, 
Class<?>... matchingClasses) {
+        HashSet<Class<?>> expectedSet = new HashSet<Class<?>>();
+        for (Class expected : matchingClasses) {
+            expectedSet.add(expected);
+        }
+        validateMatchingSetContains(scannedClasses, expectedSet);
+    }
+
+    protected void validateMatchingSetContains(Set<Class<?>> scannedClasses, 
Set<Class<?>> matchingClasses) {
+        Set<Class<?>> matching = getMatchingClasses(scannedClasses, filter);
+        assertEquals("Incorrect number of classes matched", 
matchingClasses.size(), matching.size());
+
+        for (Class<?> expected : matchingClasses) {
+            assertTrue("Expected matching class '" + expected + "' is not 
present", matching.contains(expected));
+        }
+    }
+
+    protected void addIncludePatterns(String... patterns) {
+        for (String pattern : patterns) {
+            filter.addIncludePattern(pattern);
+        }
+    }
+
+    protected void addExcludePatterns(String... patterns) {
+        for (String pattern : patterns) {
+            filter.addExcludePattern(pattern);
+        }
+    }
+
+    public Set<Class<?>> getMatchingClasses(Set<Class<?>> scannedClasses, 
PatternBasedPackageScanFilter filter) {
+        Set<Class<?>> matching = new HashSet<Class<?>>();
+
+        for (Class candidate : scannedClasses) {
+            if (filter.matches(candidate)) {
+                matching.add(candidate);
+            }
+        }
+
+        return matching;
+    }
+}

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScanTestSupport.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScanTestSupport.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableOne.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableOne.java?rev=880657&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableOne.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableOne.java
 Mon Nov 16 08:24:20 2009
@@ -0,0 +1,25 @@
+/**
+ * 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.spring.scan;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+...@retention(RetentionPolicy.RUNTIME)
+public @interface ScannableOne {
+
+}

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableOne.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableOne.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableTwo.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableTwo.java?rev=880657&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableTwo.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableTwo.java
 Mon Nov 16 08:24:20 2009
@@ -0,0 +1,25 @@
+/**
+ * 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.spring.scan;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+...@retention(RetentionPolicy.RUNTIME)
+public @interface ScannableTwo {
+
+}

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableTwo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/ScannableTwo.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/a/ScanTargetOne.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/a/ScanTargetOne.java?rev=880657&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/a/ScanTargetOne.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/a/ScanTargetOne.java
 Mon Nov 16 08:24:20 2009
@@ -0,0 +1,25 @@
+/**
+ * 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.spring.scan.a;
+
+...@org.apache.camel.spring.scan.scannableone
+public class ScanTargetOne {
+
+    public void someMethod() {
+    }
+
+}

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/a/ScanTargetOne.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/a/ScanTargetOne.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/b/ScanTargetTwo.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/b/ScanTargetTwo.java?rev=880657&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/b/ScanTargetTwo.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/b/ScanTargetTwo.java
 Mon Nov 16 08:24:20 2009
@@ -0,0 +1,29 @@
+/**
+ * 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.spring.scan.b;
+
+import org.apache.camel.spring.scan.ScannableOne;
+import org.apache.camel.spring.scan.a.ScanTargetOne;
+
+...@scannableone
+...@suppresswarnings("all")
+public class ScanTargetTwo extends ScanTargetOne {
+
+    public void someMethod() {
+    }
+
+}

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/b/ScanTargetTwo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/b/ScanTargetTwo.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/NotAScanTarget.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/NotAScanTarget.java?rev=880657&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/NotAScanTarget.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/NotAScanTarget.java
 Mon Nov 16 08:24:20 2009
@@ -0,0 +1,24 @@
+/**
+ * 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.spring.scan.c;
+
+public class NotAScanTarget {
+
+    public void someMethod() {
+    }
+
+}

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/NotAScanTarget.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/NotAScanTarget.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/ScanTargetThree.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/ScanTargetThree.java?rev=880657&view=auto
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/ScanTargetThree.java
 (added)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/ScanTargetThree.java
 Mon Nov 16 08:24:20 2009
@@ -0,0 +1,27 @@
+/**
+ * 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.spring.scan.c;
+
+import org.apache.camel.spring.scan.ScannableTwo;
+
+...@scannabletwo()
+public class ScanTargetThree {
+
+    public void someMethod() {
+    }
+
+}

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/ScanTargetThree.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/scan/c/ScanTargetThree.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: 
camel/trunk/components/camel-spring/src/test/resources/package+scan+test.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Propchange: 
camel/trunk/components/camel-spring/src/test/resources/package_scan_test.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream


Reply via email to