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 2008/11/29 22:15:35 UTC
svn commit: r721719 - in /activemq/camel/trunk/camel-core/src:
main/java/org/apache/camel/component/file/
test/java/org/apache/camel/component/file/
Author: davsclaus
Date: Sat Nov 29 13:15:35 2008
New Revision: 721719
URL: http://svn.apache.org/viewvc?rev=721719&view=rev
Log:
CAMEL-1112: Added filter option to file consumer to allow end user to use a filter to skip files. Started on the sorter as well.
Added:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileFilterTest.java (contents, props changed)
- copied, changed from r721684, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerSkipDotFilesTest.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerSkipDotFilesTest.java
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java?rev=721719&r1=721718&r2=721719&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileComponent.java Sat Nov 29 13:15:35 2008
@@ -17,6 +17,7 @@
package org.apache.camel.component.file;
import java.io.File;
+import java.io.FileFilter;
import java.util.Map;
import org.apache.camel.CamelContext;
@@ -71,6 +72,16 @@
result.setIdempotentRepository(repository);
}
+ // lookup file filter in registry if provided
+ ref = getAndRemoveParameter(parameters, "fileFilterRef", String.class);
+ if (ref != null) {
+ FileFilter filter = mandatoryLookup(ref, FileFilter.class);
+ result.setFilter(filter);
+ }
+
+ // TODO: CAMEL-1112 sorter and having out-of-box sorters for by name, by filestamp, etc.
+ // TODO: maybe even a reverse order
+
setProperties(result, parameters);
return result;
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java?rev=721719&r1=721718&r2=721719&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java Sat Nov 29 13:15:35 2008
@@ -23,6 +23,7 @@
import java.nio.channels.FileLock;
import java.util.ArrayList;
import java.util.List;
+import java.util.Collections;
import org.apache.camel.AsyncCallback;
import org.apache.camel.Processor;
@@ -53,9 +54,12 @@
protected synchronized void poll() throws Exception {
// gather list of files to process
List<File> files = new ArrayList<File>();
- filesToPoll(endpoint.getFile(), true, files);
+ scanFilesToPoll(endpoint.getFile(), true, files);
- // TODO allow reordering of files CAMEL-1112
+ // resort files if provided
+ if (endpoint.getSorter() != null) {
+ Collections.sort(files, endpoint.getSorter());
+ }
// consume files one by one
int total = files.size();
@@ -72,7 +76,7 @@
* @param processDir recursive
* @param fileList current list of files gathered
*/
- protected void filesToPoll(File fileOrDirectory, boolean processDir, List<File> fileList) {
+ protected void scanFilesToPoll(File fileOrDirectory, boolean processDir, List<File> fileList) {
if (fileOrDirectory == null || !fileOrDirectory.exists()) {
// not a file so skip it
return;
@@ -88,7 +92,7 @@
File[] files = fileOrDirectory.listFiles();
for (File file : files) {
// recursive add the files
- filesToPoll(file, isRecursive(), fileList);
+ scanFilesToPoll(file, isRecursive(), fileList);
}
} else {
if (LOG.isTraceEnabled()) {
@@ -230,14 +234,14 @@
* @param file the file
* @return true to include the file, false to skip it
*/
- protected boolean isValidFile(File file) {
+ protected boolean validateFile(File file) {
// NOTE: contains will add if we had a miss
if (endpoint.isIdempotent() && endpoint.getIdempotentRepository().contains(file.getName())) {
// skip as we have already processed it
return false;
}
- return isMatched(file);
+ return matchFile(file);
}
/**
@@ -252,7 +256,7 @@
* @param file the file
* @return true if the file is matche, false if not
*/
- protected boolean isMatched(File file) {
+ protected boolean matchFile(File file) {
String name = file.getName();
// folders/names starting with dot is always skipped (eg. ".", ".camel", ".camelLock")
@@ -269,6 +273,12 @@
return true;
}
+ if (endpoint.getFilter() != null) {
+ if (!endpoint.getFilter().accept(file)) {
+ return false;
+ }
+ }
+
if (regexPattern != null && regexPattern.length() > 0) {
if (!name.matches(regexPattern)) {
return false;
@@ -290,7 +300,7 @@
}
private void addFile(File file, List<File> fileList) {
- if (isValidFile(file)) {
+ if (validateFile(file)) {
fileList.add(file);
}
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java?rev=721719&r1=721718&r2=721719&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileEndpoint.java Sat Nov 29 13:15:35 2008
@@ -18,9 +18,11 @@
import java.io.File;
import java.io.IOException;
+import java.io.FileFilter;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
+import java.util.Comparator;
import org.apache.camel.Consumer;
import org.apache.camel.Exchange;
@@ -70,6 +72,8 @@
private String tempPrefix;
private boolean idempotent;
private MessageIdRepository idempotentRepository;
+ private FileFilter filter;
+ private Comparator<File> sorter;
protected FileEndpoint(File file, String endpointUri, FileComponent component) {
super(endpointUri, component);
@@ -334,6 +338,22 @@
this.idempotentRepository = idempotentRepository;
}
+ public FileFilter getFilter() {
+ return filter;
+ }
+
+ public void setFilter(FileFilter filter) {
+ this.filter = filter;
+ }
+
+ public Comparator<File> getSorter() {
+ return sorter;
+ }
+
+ public void setSorter(Comparator<File> sorter) {
+ this.sorter = sorter;
+ }
+
/**
* A strategy method to lazily create the file strategy
*/
Copied: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileFilterTest.java (from r721684, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerSkipDotFilesTest.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileFilterTest.java?p2=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileFilterTest.java&p1=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerSkipDotFilesTest.java&r1=721684&r2=721719&rev=721719&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerSkipDotFilesTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileFilterTest.java Sat Nov 29 13:15:35 2008
@@ -16,43 +16,54 @@
*/
package org.apache.camel.component.file;
+import java.io.File;
+import java.io.FileFilter;
+
import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.JndiRegistry;
/**
- * Unit test that file consumer will skip any files starting with a dot
+ * Unit test for the file filter option
*/
-public class FileConsumerSkipDotFilesTest extends ContextTestSupport {
+public class FileConsumerFileFilterTest extends ContextTestSupport {
- private String fileUrl = "file://target/dotfiles/";
+ private String fileUrl = "file://target/filefilter/?fileFilterRef=myFilter";
+
+ @Override
+ protected JndiRegistry createRegistry() throws Exception {
+ JndiRegistry jndi = super.createRegistry();
+ jndi.bind("myFilter", new MyFileFilter());
+ return jndi;
+ }
@Override
protected void setUp() throws Exception {
super.setUp();
- deleteDirectory("target/dotfiles");
+ deleteDirectory("target/filefilter");
}
- public void testSkipDotFiles() throws Exception {
+ public void testFilterFiles() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMessageCount(0);
- template.sendBodyAndHeader("file:target/dotfiles/", "This is a dot file",
- FileComponent.HEADER_FILE_NAME, ".skipme");
+ template.sendBodyAndHeader("file:target/filefilter/", "This is a file to be filtered",
+ FileComponent.HEADER_FILE_NAME, "skipme.txt");
- mock.setResultWaitTime(5000);
+ mock.setResultWaitTime(2000);
mock.assertIsSatisfied();
}
- public void testSkipDotFilesWithARegularFile() throws Exception {
+ public void testFilterFilesWithARegularFile() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMessageCount(1);
mock.expectedBodiesReceived("Hello World");
- template.sendBodyAndHeader("file:target/dotfiles/", "This is a dot file",
- FileComponent.HEADER_FILE_NAME, ".skipme");
+ template.sendBodyAndHeader("file:target/filefilter/", "This is a file to be filtered",
+ FileComponent.HEADER_FILE_NAME, "skipme.txt");
- template.sendBodyAndHeader("file:target/dotfiles/", "Hello World",
+ template.sendBodyAndHeader("file:target/filefilter/", "Hello World",
FileComponent.HEADER_FILE_NAME, "hello.txt");
mock.assertIsSatisfied();
@@ -66,4 +77,9 @@
};
}
-}
+ public class MyFileFilter implements FileFilter {
+ public boolean accept(File pathname) {
+ return !pathname.getName().startsWith("skip");
+ }
+ }
+}
\ No newline at end of file
Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileFilterTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileFilterTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerFileFilterTest.java
------------------------------------------------------------------------------
svn:mergeinfo =
Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerSkipDotFilesTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerSkipDotFilesTest.java?rev=721719&r1=721718&r2=721719&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerSkipDotFilesTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerSkipDotFilesTest.java Sat Nov 29 13:15:35 2008
@@ -40,7 +40,7 @@
template.sendBodyAndHeader("file:target/dotfiles/", "This is a dot file",
FileComponent.HEADER_FILE_NAME, ".skipme");
- mock.setResultWaitTime(5000);
+ mock.setResultWaitTime(2000);
mock.assertIsSatisfied();
}