Author: davsclaus
Date: Sat Jun 26 09:52:48 2010
New Revision: 958207

URL: http://svn.apache.org/viewvc?rev=958207&view=rev
Log:
CAMEL-2860: Fixed issue with setting starting directory from URI on ftp 
component to be able to accept absolute path.

Added:
    
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerAbsolutePathTest.java
      - copied, changed from r958186, 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryAsAbsolutePathTest.java
Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConfiguration.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
    
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConfiguration.java
    
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/UriConfigurationTest.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConfiguration.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConfiguration.java?rev=958207&r1=958206&r2=958207&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConfiguration.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileConfiguration.java
 Sat Jun 26 09:52:48 2010
@@ -22,14 +22,17 @@ import org.apache.camel.util.FileUtil;
 
 public class GenericFileConfiguration {
 
-    private String directory;
+    protected String directory;
 
     public boolean needToNormalize() {
         return true;
     }
 
     public void configure(URI uri) {
-        setDirectory(uri.getPath());
+        String path = uri.getPath();
+        // strip tailing slash which the uri path may append
+        path = FileUtil.stripFirstLeadingSeparator(path);
+        setDirectory(path);
     }
 
     public String getDirectory() {
@@ -47,9 +50,6 @@ public class GenericFileConfiguration {
         if (this.directory == null) {
             this.directory = "";
         }
-        
-        // strip tailing slash
-        this.directory = FileUtil.stripTrailingSeparator(this.directory);
     }
 
     public String toString() {

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java?rev=958207&r1=958206&r2=958207&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java 
(original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/FileUtil.java 
Sat Jun 26 09:52:48 2010
@@ -90,6 +90,19 @@ public final class FileUtil {
     }
 
     /**
+     * Strip first leading separator
+     */
+    public static String stripFirstLeadingSeparator(String name) {
+        if (name == null) {
+            return null;
+        }
+        if (name.startsWith("/") || name.startsWith(File.separator)) {
+            name = name.substring(1);
+        }
+        return name;
+    }
+
+    /**
      * Strip any trailing separators
      */
     public static String stripTrailingSeparator(String name) {

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java?rev=958207&r1=958206&r2=958207&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java 
(original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/util/FileUtilTest.java 
Sat Jun 26 09:52:48 2010
@@ -37,8 +37,20 @@ public class FileUtilTest extends TestCa
         assertEquals(null, FileUtil.stripLeadingSeparator(null));
         assertEquals("foo", FileUtil.stripLeadingSeparator("foo"));
         assertEquals("foo/bar", FileUtil.stripLeadingSeparator("foo/bar"));
-        assertEquals("foo", FileUtil.stripLeadingSeparator("foo"));
+        assertEquals("foo/", FileUtil.stripLeadingSeparator("foo/"));
         assertEquals("foo/bar", FileUtil.stripLeadingSeparator("/foo/bar"));
+        assertEquals("foo/bar", FileUtil.stripLeadingSeparator("//foo/bar"));
+        assertEquals("foo/bar", FileUtil.stripLeadingSeparator("///foo/bar"));
+    }
+
+    public void testStripFirstLeadingSeparator() {
+        assertEquals(null, FileUtil.stripFirstLeadingSeparator(null));
+        assertEquals("foo", FileUtil.stripFirstLeadingSeparator("foo"));
+        assertEquals("foo/bar", 
FileUtil.stripFirstLeadingSeparator("foo/bar"));
+        assertEquals("foo/", FileUtil.stripFirstLeadingSeparator("foo/"));
+        assertEquals("foo/bar", 
FileUtil.stripFirstLeadingSeparator("/foo/bar"));
+        assertEquals("/foo/bar", 
FileUtil.stripFirstLeadingSeparator("//foo/bar"));
+        assertEquals("//foo/bar", 
FileUtil.stripFirstLeadingSeparator("///foo/bar"));
     }
 
     public void testStripTrailingSeparator() {
@@ -47,8 +59,10 @@ public class FileUtilTest extends TestCa
         assertEquals("foo/bar", FileUtil.stripTrailingSeparator("foo/bar"));
         assertEquals("foo", FileUtil.stripTrailingSeparator("foo/"));
         assertEquals("foo/bar", FileUtil.stripTrailingSeparator("foo/bar/"));
-        assertEquals("/foo/bar", FileUtil.stripTrailingSeparator("/foo/bar/"));
         assertEquals("/foo/bar", FileUtil.stripTrailingSeparator("/foo/bar"));
+        assertEquals("/foo/bar", FileUtil.stripTrailingSeparator("/foo/bar/"));
+        assertEquals("/foo/bar", 
FileUtil.stripTrailingSeparator("/foo/bar//"));
+        assertEquals("/foo/bar", 
FileUtil.stripTrailingSeparator("/foo/bar///"));
     }
 
     public void testStripPath() {

Modified: 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConfiguration.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConfiguration.java?rev=958207&r1=958206&r2=958207&view=diff
==============================================================================
--- 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConfiguration.java
 (original)
+++ 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConfiguration.java
 Sat Jun 26 09:52:48 2010
@@ -20,6 +20,7 @@ import java.net.URI;
 
 import org.apache.camel.component.file.GenericFileConfiguration;
 import org.apache.camel.util.FileUtil;
+import org.apache.camel.util.ObjectHelper;
 
 /**
  * Configuration of the FTP server
@@ -55,15 +56,6 @@ public abstract class RemoteFileConfigur
         setPort(uri.getPort());
     }
 
-    @Override
-    public void setDirectory(String directory) {
-        // let super do its work first
-        super.setDirectory(directory);
-
-        // for FTP we must not start with a / root, so skip it if its there
-        super.setDirectory(FileUtil.stripLeadingSeparator(getDirectory()));
-    }
-
     /**
      * Returns human readable server information for logging purpose
      */

Copied: 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerAbsolutePathTest.java
 (from r958186, 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryAsAbsolutePathTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerAbsolutePathTest.java?p2=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerAbsolutePathTest.java&p1=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryAsAbsolutePathTest.java&r1=958186&r2=958207&rev=958207&view=diff
==============================================================================
--- 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerLocalWorkDirectoryAsAbsolutePathTest.java
 (original)
+++ 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerAbsolutePathTest.java
 Sat Jun 26 09:52:48 2010
@@ -16,59 +16,39 @@
  */
 package org.apache.camel.component.file.remote;
 
-import java.io.File;
-
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.converter.IOConverter;
-import org.apache.camel.util.FileUtil;
 import org.junit.Before;
 import org.junit.Test;
 
 /**
  * @version $Revision$
  */
-public class FtpConsumerLocalWorkDirectoryAsAbsolutePathTest extends 
FtpServerTestSupport {
-
-    private String base;
+public class FtpConsumerAbsolutePathTest extends FtpServerTestSupport {
 
     protected String getFtpUrl() {
-        base = new File("target/lwd").getAbsolutePath();
-        return "ftp://ad...@localhost:"; + getPort() + 
"/lwd/?password=admin&delay=5000&noop=true&localWorkDirectory=" + base;
+        return "ftp://ad...@localhost:"; + getPort() + 
"///foo?password=admin&delay=5000";
     }
 
     @Override
     @Before
     public void setUp() throws Exception {
         deleteDirectory("target/lwd");
-        deleteDirectory("target/out");
         super.setUp();
         prepareFtpServer();
     }
 
     @Test
-    public void testLocalWorkDirectory() throws Exception {
+    public void testAbsolutePath() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedBodiesReceived("Hello World");
         mock.expectedMessageCount(1);
 
         assertMockEndpointsSatisfied();
-
-        // give test some time to close file resources
-        Thread.sleep(6000);
-
-        // now the lwd file should be deleted
-        File local = new File("target/lwd/hello.txt").getAbsoluteFile();
-        assertFalse("Local work file should have been deleted", 
local.exists());
-
-        // and the out file should exists
-        File out = new File("target/out/hello.txt").getAbsoluteFile();
-        assertTrue("file should exists", out.exists());
-        assertEquals("Hello World", IOConverter.toString(out, null));
     }
 
     private void prepareFtpServer() throws Exception {
@@ -83,19 +63,16 @@ public class FtpConsumerLocalWorkDirecto
         producer.process(exchange);
         producer.stop();
     }
-    
+
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
                 from(getFtpUrl()).process(new Processor() {
                     public void process(Exchange exchange) throws Exception {
-                        File body = exchange.getIn().getBody(File.class);
-                        assertNotNull(body);
-                        assertTrue("Should be absolute path", 
body.isAbsolute());
-                        assertTrue("Local work file should exists", 
body.exists());
-                        assertEquals(FileUtil.normalizePath(base + 
"/hello.txt"), body.getPath());
+                        String body = exchange.getIn().getBody(String.class);
+                        assertEquals("Hello World", body);
                     }
-                }).to("mock:result", "file://target/out");
+                }).to("mock:result");
             }
         };
     }

Modified: 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/UriConfigurationTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/UriConfigurationTest.java?rev=958207&r1=958206&r2=958207&view=diff
==============================================================================
--- 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/UriConfigurationTest.java
 (original)
+++ 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/UriConfigurationTest.java
 Sat Jun 26 09:52:48 2010
@@ -141,36 +141,36 @@ public class UriConfigurationTest extend
     @Test
     public void testRemoteFileEndpointFiles() {
         assertRemoteFileEndpointFile("ftp://hostname/foo/bar";, "foo/bar");
-        assertRemoteFileEndpointFile("ftp://hostname/foo/bar/";, "foo/bar");
-        assertRemoteFileEndpointFile("ftp://hostname/foo/";, "foo");
+        assertRemoteFileEndpointFile("ftp://hostname/foo/bar/";, "foo/bar/");
+        assertRemoteFileEndpointFile("ftp://hostname/foo/";, "foo/");
         assertRemoteFileEndpointFile("ftp://hostname/foo";, "foo");
         assertRemoteFileEndpointFile("ftp://hostname/";, "");
         assertRemoteFileEndpointFile("ftp://hostname";, "");
-        assertRemoteFileEndpointFile("ftp://hostname//";, "");
-        assertRemoteFileEndpointFile("ftp://hostname//foo/bar";, "foo/bar");
-        assertRemoteFileEndpointFile("ftp://hostname//foo/bar/";, "foo/bar");
-        
assertRemoteFileEndpointFile("sftp://u...@hostname:123//foo/bar?password=secret";,
 "foo/bar");
+        assertRemoteFileEndpointFile("ftp://hostname//";, "/");
+        assertRemoteFileEndpointFile("ftp://hostname//foo/bar";, "/foo/bar");
+        assertRemoteFileEndpointFile("ftp://hostname//foo/bar/";, "/foo/bar/");
+        
assertRemoteFileEndpointFile("sftp://u...@hostname:123//foo/bar?password=secret";,
 "/foo/bar");
         
assertRemoteFileEndpointFile("sftp://u...@hostname:123?password=secret";, "");
         assertRemoteFileEndpointFile("sftp://hostname/foo/bar";, "foo/bar");
-        assertRemoteFileEndpointFile("sftp://hostname/foo/bar/";, "foo/bar");
-        assertRemoteFileEndpointFile("sftp://hostname/foo/";, "foo");
+        assertRemoteFileEndpointFile("sftp://hostname/foo/bar/";, "foo/bar/");
+        assertRemoteFileEndpointFile("sftp://hostname/foo/";, "foo/");
         assertRemoteFileEndpointFile("sftp://hostname/foo";, "foo");
         assertRemoteFileEndpointFile("sftp://hostname/";, "");
         assertRemoteFileEndpointFile("sftp://hostname";, "");
-        assertRemoteFileEndpointFile("sftp://hostname//";, "");
-        assertRemoteFileEndpointFile("sftp://hostname//foo/bar";, "foo/bar");
-        assertRemoteFileEndpointFile("sftp://hostname//foo/bar/";, "foo/bar");
-        
assertRemoteFileEndpointFile("ftps://u...@hostname:123//foo/bar?password=secret",
 "foo/bar");
+        assertRemoteFileEndpointFile("sftp://hostname//";, "/");
+        assertRemoteFileEndpointFile("sftp://hostname//foo/bar";, "/foo/bar");
+        assertRemoteFileEndpointFile("sftp://hostname//foo/bar/";, "/foo/bar/");
+        
assertRemoteFileEndpointFile("ftps://u...@hostname:123//foo/bar?password=secret",
 "/foo/bar");
         
assertRemoteFileEndpointFile("ftps://u...@hostname:123?password=secret", "");
         assertRemoteFileEndpointFile("ftps://hostname/foo/bar", "foo/bar");
-        assertRemoteFileEndpointFile("ftps://hostname/foo/bar/", "foo/bar");
-        assertRemoteFileEndpointFile("ftps://hostname/foo/", "foo");
+        assertRemoteFileEndpointFile("ftps://hostname/foo/bar/", "foo/bar/");
+        assertRemoteFileEndpointFile("ftps://hostname/foo/", "foo/");
         assertRemoteFileEndpointFile("ftps://hostname/foo", "foo");
         assertRemoteFileEndpointFile("ftps://hostname/", "");
         assertRemoteFileEndpointFile("ftps://hostname", "");
-        assertRemoteFileEndpointFile("ftps://hostname//", "");
-        assertRemoteFileEndpointFile("ftps://hostname//foo/bar", "foo/bar");
-        assertRemoteFileEndpointFile("ftps://hostname//foo/bar/", "foo/bar");
+        assertRemoteFileEndpointFile("ftps://hostname//", "/");
+        assertRemoteFileEndpointFile("ftps://hostname//foo/bar", "/foo/bar");
+        assertRemoteFileEndpointFile("ftps://hostname//foo/bar/", "/foo/bar/");
     }
 
     private void assertRemoteFileEndpointFile(String endpointUri, String 
expectedFile) {


Reply via email to