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 2009/01/25 11:00:44 UTC

svn commit: r737493 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/component/file/ main/java/org/apache/camel/component/file/strategy/ main/java/org/apache/camel/util/ main/resources/META-INF/services/org/apache/camel/component/ test/java...

Author: davsclaus
Date: Sun Jan 25 10:00:43 2009
New Revision: 737493

URL: http://svn.apache.org/viewvc?rev=737493&view=rev
Log:
CAMEL-1241: More improvements to VFS (work in progress).

Added:
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileDefaultSorter.java   (contents, props changed)
      - copied, changed from r737485, camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericDefaultFileSorter.java
Removed:
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericDefaultFileSorter.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFile.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileComponent.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
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProducer.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/NewFileOperations.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/UuidGenerator.java
    camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/newfile
    camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerBatchTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerIdempotentRefTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/FileConsumer.java Sun Jan 25 10:00:43 2009
@@ -251,8 +251,7 @@
                 LOG.trace("File did not match. Will skip this file: " + file);
             }
             return false;
-        } else if (endpoint.isIdempotent() && endpoint.getIdempotentRepository().contains(file.getPath())) {
-            // use file.getPath as key for the idempotent repository to support files with same name but in different folders
+        } else if (endpoint.isIdempotent() && endpoint.getIdempotentRepository().contains(file.getName())) {
             if (LOG.isTraceEnabled()) {
                 LOG.trace("FileConsumer is idempotent and the file has been consumed before. Will skip this file: " + file);
             }

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFile.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFile.java?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFile.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFile.java Sun Jan 25 10:00:43 2009
@@ -68,12 +68,30 @@
      */
     public void changeFileName(String newName) {
         setAbsoluteFileName(getParent() + "/" + newName);
+
+        // relative name is a bit more complex to set as newName itself can contain
+        // folders we need to consider as well
+        String baseNewName = null;
+        if (newName.indexOf("/") != -1) {
+            baseNewName = newName.substring(0, newName.lastIndexOf("/"));
+            newName = newName.substring(newName.lastIndexOf("/") + 1);
+        }
+
         if (relativeFileName.indexOf("/") != -1) {
             String relative = relativeFileName.substring(0, relativeFileName.lastIndexOf("/"));
-            setRelativeFileName(relative + newName);
+            if (baseNewName != null) {
+                setRelativeFileName(relative + "/" + baseNewName + "/" + newName);
+            } else {
+                setRelativeFileName(relative + "/" + newName);
+            }
         } else {
-            setRelativeFileName(newName);
+            if (baseNewName != null) {
+                setRelativeFileName(baseNewName + "/" + newName);
+            } else {
+                setRelativeFileName(newName);
+            }
         }
+
         setFileName(newName);
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileComponent.java?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileComponent.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileComponent.java Sun Jan 25 10:00:43 2009
@@ -96,7 +96,7 @@
         ObjectHelper.notEmpty(reminder, "sortBy expression", this);
 
         // recursive add nested sorters
-        return GenericDefaultFileSorter.sortByFileLanguage(reminder, reverse, ignoreCase, createSortByComparator(it));
+        return GenericFileDefaultSorter.sortByFileLanguage(reminder, reverse, ignoreCase, createSortByComparator(it));
     }
 
 }

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=737493&r1=737492&r2=737493&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 25 10:00:43 2009
@@ -215,9 +215,8 @@
                                          GenericFileExchange exchange, GenericFile<T> file, boolean failureHandled) {
         if (endpoint.isIdempotent()) {
             // only add to idempotent repository if we could process the file
-            // use file.getAbsoluteFileName as key for the idempotent repository
-            // to support files with same name but in different folders
-            endpoint.getIdempotentRepository().add(file.getAbsoluteFileName());
+            // only use the filename as the key as the file could be moved into a done folder
+            endpoint.getIdempotentRepository().add(file.getFileName());
         }
 
         try {
@@ -262,9 +261,8 @@
                 log.trace("Remote file did not match. Will skip this remote file: " + file);
             }
             return false;
-        } else if (endpoint.isIdempotent() && endpoint.getIdempotentRepository().contains(file.getAbsoluteFileName())) {
-            // use file.getAbsoluteFileName as key for the idempotent repository
-            // to support files with same name but in different folders
+        } else if (endpoint.isIdempotent() && endpoint.getIdempotentRepository().contains(file.getFileName())) {
+            // only use the filename as the key as the file could be moved into a done folder
             if (log.isTraceEnabled()) {
                 log.trace("RemoteFileConsumer is idempotent and the file has been consumed before. Will skip this remote file: " + file);
             }

Copied: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileDefaultSorter.java (from r737485, camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericDefaultFileSorter.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileDefaultSorter.java?p2=camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileDefaultSorter.java&p1=camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericDefaultFileSorter.java&r1=737485&r2=737493&rev=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericDefaultFileSorter.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileDefaultSorter.java Sun Jan 25 10:00:43 2009
@@ -23,11 +23,11 @@
 import org.apache.camel.util.ObjectHelper;
 
 /**
- * Default remote file sorter.
+ * Default file sorter.
  */
-public final class GenericDefaultFileSorter {
+public final class GenericFileDefaultSorter {
 
-    private GenericDefaultFileSorter() {
+    private GenericFileDefaultSorter() {
     }
 
     /**

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileDefaultSorter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileDefaultSorter.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

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=737493&r1=737492&r2=737493&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 25 10:00:43 2009
@@ -27,7 +27,6 @@
 import org.apache.camel.Expression;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
-import org.apache.camel.component.file.strategy.GenericFileProcessStrategyFactory;
 import org.apache.camel.impl.ScheduledPollEndpoint;
 import org.apache.camel.language.simple.FileLanguage;
 import org.apache.camel.spi.IdempotentRepository;
@@ -335,7 +334,7 @@
     }
 
     public void setSortBy(String expression, boolean reverse) {
-        setSortBy(GenericDefaultFileSorter.sortByFileLanguage(expression, reverse));
+        setSortBy(GenericFileDefaultSorter.sortByFileLanguage(expression, reverse));
     }
 
     public String getTempPrefix() {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProducer.java?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProducer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileProducer.java Sun Jan 25 10:00:43 2009
@@ -105,7 +105,7 @@
         if (lastPathIndex != -1) {
             String directory = fileName.substring(0, lastPathIndex);
             if (!operations.buildDirectory(directory)) {
-                log.warn("Couldn't build directory: " + directory + " (could be because of denied permissions)");
+                log.warn("Can not build directory: " + directory + " (could be because of denied permissions)");
             }
         }
         boolean success = operations.storeFile(fileName, exchange);

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/NewFileOperations.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/NewFileOperations.java?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/NewFileOperations.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/NewFileOperations.java Sun Jan 25 10:00:43 2009
@@ -53,7 +53,8 @@
 
     public boolean renameFile(String from, String to) throws GenericFileOperationFailedException {
         File file = new File(from);
-        return file.exists() && file.renameTo(new File(to));
+        File target = new File(to);
+        return file.renameTo(target);
     }
 
     public boolean buildDirectory(String directory) throws GenericFileOperationFailedException {
@@ -61,7 +62,7 @@
         if (dir.exists()) {
             return true;
         }
-        return endpoint.isAutoCreate() && dir.mkdirs();
+        return dir.mkdirs();
     }
 
     public String getCurrentDirectory(File file) throws GenericFileOperationFailedException {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java Sun Jan 25 10:00:43 2009
@@ -36,6 +36,8 @@
 public class FileLockExclusiveReadLockStrategy implements ExclusiveReadLockStrategy {
     private static final transient Log LOG = LogFactory.getLog(FileLockExclusiveReadLockStrategy.class);
     private long timeout;
+
+    // TODO: We shall keep this with the GenericFileXX to support FileLock for java.io.File
     
     public boolean acquireExclusiveReadLock(File file) {
         if (LOG.isTraceEnabled()) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileRenameProcessStrategy.java Sun Jan 25 10:00:43 2009
@@ -68,24 +68,17 @@
 
     private static GenericFile renameFile(GenericFileOperations operations, GenericFile from, GenericFile to) throws IOException {
         // deleting any existing files before renaming
-        boolean deleted = false;
         try {
-            deleted = operations.deleteFile(to.getAbsoluteFileName());
+            operations.deleteFile(to.getAbsoluteFileName());
         } catch (GenericFileOperationFailedException e) {
             // ignore the file does not exists
         }
 
-        if (!deleted) {
-            // if we could not delete any existing file then maybe the folder is missing
-            // build folder if needed
-            String name = to.getAbsoluteFileName();
-            int lastPathIndex = name.lastIndexOf('/');
-            if (lastPathIndex != -1) {
-                String directory = name.substring(0, lastPathIndex);
-                if (!operations.buildDirectory(directory)) {
-                    LOG.warn("Cannot build directory: " + directory + " (maybe because of denied permissions)");
-                }
-            }
+        // make parent folder if missing
+        String parent = to.getParent();
+        boolean mkdir = operations.buildDirectory(parent);
+        if (!mkdir) {
+            throw new GenericFileOperationFailedException("Cannot create directory: " + parent + " (could be because of denied permissions)");
         }
 
         if (LOG.isDebugEnabled()) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/FactoryFinder.java Sun Jan 25 10:00:43 2009
@@ -115,8 +115,7 @@
         return findClasses(key, null);
     }
 
-    public List<Class> findClasses(String key, String propertyPrefix) throws ClassNotFoundException,
-        IOException {
+    public List<Class> findClasses(String key, String propertyPrefix) throws ClassNotFoundException, IOException {
         // TODO change to support finding multiple classes on the classpath!
         Class type = findClass(key, propertyPrefix);
         return Collections.singletonList(type);
@@ -126,15 +125,17 @@
         return path;
     }
 
-    private Class newInstance(Properties properties, String propertyPrefix) throws ClassNotFoundException,
-        IOException {
-
+    private Class newInstance(Properties properties, String propertyPrefix) throws ClassNotFoundException, IOException {
         String className = properties.getProperty(propertyPrefix + "class");
         if (className == null) {
             throw new IOException("Expected property is missing: " + propertyPrefix + "class");
         }
 
-        return ObjectHelper.loadClass(className);
+        Class clazz = ObjectHelper.loadClass(className);
+        if (clazz == null) {
+            throw new ClassNotFoundException(className);
+        }
+        return clazz;
     }
 
     private Properties doFindFactoryProperties(String key) throws IOException {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/UuidGenerator.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/UuidGenerator.java?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/UuidGenerator.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/UuidGenerator.java Sun Jan 25 10:00:43 2009
@@ -61,12 +61,12 @@
             hostName = "localhost";
             stub = "-1-" + System.currentTimeMillis() + "-";
         }
-        UNIQUE_STUB = stub;
+        UNIQUE_STUB = generateSanitizedId(stub);
     }
 
     public UuidGenerator(String prefix) {
         synchronized (UNIQUE_STUB) {
-            this.seed = prefix + UNIQUE_STUB + (instanceCount++) + "-";
+            this.seed = generateSanitizedId(prefix + UNIQUE_STUB + (instanceCount++) + "-");
         }
     }
 
@@ -110,6 +110,8 @@
         id = id.replace(':', '-');
         id = id.replace('_', '-');
         id = id.replace('.', '-');
+        id = id.replace('/', '-');
+        id = id.replace('\\', '-');
         return id;
     }
 

Modified: camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/newfile
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/newfile?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/newfile (original)
+++ camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/component/newfile Sun Jan 25 10:00:43 2009
@@ -16,4 +16,4 @@
 #
 
 class=org.apache.camel.component.file.NewFileComponent
-strategy.factory.class=org.apache.camel.component.file.strategy.NewFileProcessStrategyFactory
\ No newline at end of file
+strategy.factory.class=org.apache.camel.component.file.strategy.GenericFileProcessStrategyFactory
\ No newline at end of file

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerBatchTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerBatchTest.java?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerBatchTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerBatchTest.java Sun Jan 25 10:00:43 2009
@@ -28,7 +28,7 @@
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        deleteDirectory("target/idempotent");
+        deleteDirectory("target/file-batch");
         template.sendBodyAndHeader("file://target/file-batch/", "Hello World", FileComponent.HEADER_FILE_NAME, "hello.txt");
         template.sendBodyAndHeader("file://target/file-batch/", "Bye World", FileComponent.HEADER_FILE_NAME, "bye.txt");
     }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerIdempotentRefTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerIdempotentRefTest.java?rev=737493&r1=737492&r2=737493&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerIdempotentRefTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerIdempotentRefTest.java Sun Jan 25 10:00:43 2009
@@ -92,7 +92,7 @@
         }
 
         public boolean contains(String key) {
-            return false;
+            return invoked;
         }
     }