You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/01/08 17:52:25 UTC
svn commit: r1228892 - in
/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file:
AntPathMatcherFileFilter.java AntPathMatcherGenericFileFilter.java
GenericFileConsumer.java GenericFileEndpoint.java
Author: davsclaus
Date: Sun Jan 8 16:52:24 2012
New Revision: 1228892
URL: http://svn.apache.org/viewvc?rev=1228892&view=rev
Log:
CAMEL-4779: Applied 2nd patch. Thanks to Daniel. Added antInclude and antExclude options to file component to make using Ant path styles easier.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/AntPathMatcherFileFilter.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/AntPathMatcherGenericFileFilter.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/AntPathMatcherFileFilter.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/AntPathMatcherFileFilter.java?rev=1228892&r1=1228891&r2=1228892&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/AntPathMatcherFileFilter.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/AntPathMatcherFileFilter.java Sun Jan 8 16:52:24 2012
@@ -72,7 +72,12 @@ public class AntPathMatcherFileFilter im
}
}
- // nothing to include so we cant accept it
+ if (excludes != null && includes == null) {
+ // if the user specified excludes but no includes, presumably we should include by default
+ return true;
+ }
+
+ // nothing to include so we can't accept it
return false;
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/AntPathMatcherGenericFileFilter.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/AntPathMatcherGenericFileFilter.java?rev=1228892&r1=1228891&r2=1228892&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/AntPathMatcherGenericFileFilter.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/AntPathMatcherGenericFileFilter.java Sun Jan 8 16:52:24 2012
@@ -16,104 +16,57 @@
*/
package org.apache.camel.component.file;
-import java.lang.reflect.Method;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
-import org.apache.camel.util.ObjectHelper;
-import static org.apache.camel.util.CollectionHelper.collectionAsCommaDelimitedString;
-
/**
- * File filter using Spring's AntPathMatcher.
+ * File filter using AntPathMatcher.
* <p/>
* Exclude take precedence over includes. If a file match both exclude and include it will be regarded as excluded.
* @param <T>
*/
-public class AntPathMatcherGenericFileFilter<T> implements GenericFileFilter<T>, CamelContextAware {
- private static final String ANTPATHMATCHER_CLASSNAME = "org.apache.camel.spring.util.SpringAntPathMatcherFileFilter";
+public class AntPathMatcherGenericFileFilter<T> implements GenericFileFilter<T> {
- private CamelContext context;
+ private final AntPathMatcherFileFilter filter;
- private String[] excludes;
- private String[] includes;
+ public AntPathMatcherGenericFileFilter() {
+ filter = new AntPathMatcherFileFilter();
+ }
- private Object filter;
- private Method includesMethod;
- private Method excludesMethod;
- private Method acceptsMethod;
+ public AntPathMatcherGenericFileFilter(String... includes) {
+ filter = new AntPathMatcherFileFilter();
+ filter.setIncludes(includes);
+ }
public boolean accept(GenericFile<T> file) {
- try {
- synchronized (this) {
- if (filter == null) {
- init();
- }
- }
-
- // invoke setIncludes(String), must using string type as invoking with string[] does not work
- ObjectHelper.invokeMethod(includesMethod, filter, collectionAsCommaDelimitedString(includes));
-
- // invoke setExcludes(String), must using string type as invoking with string[] does not work
- ObjectHelper.invokeMethod(excludesMethod, filter, collectionAsCommaDelimitedString(excludes));
-
- // invoke acceptPathName(String)
- String path = file.getRelativeFilePath();
- return (Boolean) ObjectHelper.invokeMethod(acceptsMethod, filter, path);
-
- } catch (NoSuchMethodException e) {
- throw new TypeNotPresentException(ANTPATHMATCHER_CLASSNAME, e);
- }
- }
-
- private void init() throws NoSuchMethodException {
- // we must use reflection to invoke the AntPathMatcherFileFilter that reside in camel-spring.jar
- // and we don't want camel-core to have runtime dependency on camel-spring.jar
- // use class resolver from CamelContext to ensure it works with OSGi as well
- Class<?> clazz = context.getClassResolver().resolveClass(ANTPATHMATCHER_CLASSNAME);
- ObjectHelper.notNull(clazz, ANTPATHMATCHER_CLASSNAME + " not found in classpath. camel-spring.jar is required in the classpath.");
-
- filter = ObjectHelper.newInstance(clazz);
-
- includesMethod = filter.getClass().getMethod("setIncludes", String.class);
- excludesMethod = filter.getClass().getMethod("setExcludes", String.class);
- acceptsMethod = filter.getClass().getMethod("acceptPathName", String.class);
+ String path = file.getRelativeFilePath();
+ return filter.acceptPathName(path);
}
public String[] getExcludes() {
- return excludes;
+ return filter.getExcludes();
}
public void setExcludes(String[] excludes) {
- this.excludes = excludes;
+ filter.setExcludes(excludes);
}
public String[] getIncludes() {
- return includes;
+ return filter.getIncludes();
}
public void setIncludes(String[] includes) {
- this.includes = includes;
+ filter.setIncludes(includes);
}
/**
* Sets excludes using a single string where each element can be separated with comma
*/
public void setExcludes(String excludes) {
- setExcludes(excludes.split(","));
+ filter.setExcludes(excludes);
}
/**
* Sets includes using a single string where each element can be separated with comma
*/
public void setIncludes(String includes) {
- setIncludes(includes.split(","));
- }
-
- public void setCamelContext(CamelContext camelContext) {
- this.context = camelContext;
- }
-
- public CamelContext getCamelContext() {
- return context;
+ filter.setIncludes(includes);
}
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java?rev=1228892&r1=1228891&r2=1228892&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConsumer.java Sun Jan 8 16:52:24 2012
@@ -455,6 +455,12 @@ public abstract class GenericFileConsume
}
}
+ if (endpoint.getAntFilter() != null) {
+ if (!endpoint.getAntFilter().accept(file)) {
+ return false;
+ }
+ }
+
if (ObjectHelper.isNotEmpty(endpoint.getExclude())) {
if (name.matches(endpoint.getExclude())) {
return false;
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java?rev=1228892&r1=1228891&r2=1228892&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java Sun Jan 8 16:52:24 2012
@@ -86,6 +86,7 @@ public abstract class GenericFileEndpoin
protected Boolean idempotent;
protected IdempotentRepository<String> idempotentRepository;
protected GenericFileFilter<T> filter;
+ protected AntPathMatcherGenericFileFilter<T> antFilter;
protected Comparator<GenericFile<T>> sorter;
protected Comparator<Exchange> sortBy;
protected String readLock = "none";
@@ -255,6 +256,24 @@ public abstract class GenericFileEndpoin
this.exclude = exclude;
}
+ public void setAntInclude(String antInclude) {
+ if (this.antFilter == null) {
+ this.antFilter = new AntPathMatcherGenericFileFilter<T>();
+ }
+ this.antFilter.setIncludes(antInclude);
+ }
+
+ public void setAntExclude(String antExclude) {
+ if (this.antFilter == null) {
+ this.antFilter = new AntPathMatcherGenericFileFilter<T>();
+ }
+ this.antFilter.setExcludes(antExclude);
+ }
+
+ public GenericFileFilter<T> getAntFilter() {
+ return antFilter;
+ }
+
public boolean isDelete() {
return delete;
}