Author: davsclaus
Date: Fri Jan 22 07:26:22 2010
New Revision: 902014

URL: http://svn.apache.org/viewvc?rev=902014&view=rev
Log:
CAMEL-2391: Added disconnect option to camel-ftp to disconecct from remote ftp 
server right after use.

Added:
    
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDisconnectTest.java
   (with props)
    
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectTest.java
   (contents, props changed)
      - copied, changed from r902008, 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java
Modified:
    
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/GenericFileProducer.java
    
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java
    
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileEndpoint.java
    
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileProducer.java

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=902014&r1=902013&r2=902014&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
 Fri Jan 22 07:26:22 2010
@@ -101,6 +101,8 @@
 
         Queue<Exchange> q = exchanges;
         processBatch(CastUtils.cast(q));
+
+        postPollCheck();
     }
 
     public void setMaxMessagesPerPoll(int maxMessagesPerPoll) {
@@ -187,6 +189,14 @@
     }
 
     /**
+     * Override if required. Perform some checks (and perhaps actions) after we
+     * have polled.
+     */
+    protected void postPollCheck() {
+        // noop
+    }
+
+    /**
      * Polls the given directory for files to process
      *
      * @param fileName current directory or file

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=902014&r1=902013&r2=902014&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
 Fri Jan 22 07:26:22 2010
@@ -143,6 +143,8 @@
         } catch (Exception e) {
             handleFailedWrite(exchange, e);
         }
+
+        postWriteCheck();
     }
 
     /**
@@ -160,6 +162,13 @@
         // nothing needed to check
     }
 
+    /**
+     * Perform any actions that need to occur after we are done such as 
disconnecting.
+     */
+    protected void postWriteCheck() {
+        // nothing needed to check
+    }
+
     protected void writeFile(Exchange exchange, String fileName) throws 
GenericFileOperationFailedException {
         InputStream payload = exchange.getIn().getBody(InputStream.class);
         try {

Modified: 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java?rev=902014&r1=902013&r2=902014&view=diff
==============================================================================
--- 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java
 (original)
+++ 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java
 Fri Jan 22 07:26:22 2010
@@ -33,6 +33,12 @@
         this.setPollStrategy(new RemoteFilePollingConsumerPollStrategy());
     }
 
+    @Override
+    @SuppressWarnings("unchecked")
+    public RemoteFileEndpoint<T> getEndpoint() {
+        return (RemoteFileEndpoint<T>) super.getEndpoint();
+    }
+
     protected RemoteFileOperations getOperations() {
         return (RemoteFileOperations) operations;
     }
@@ -48,6 +54,16 @@
     }
 
     @Override
+    protected void postPollCheck() {
+        if (getEndpoint().isDisconnect()) {
+            if (log.isTraceEnabled()) {
+                log.trace("postPollCheck disconnect from: " + getEndpoint());
+            }
+            disconnect();
+        }
+    }
+
+    @Override
     protected void doStop() throws Exception {
         super.doStop();
         disconnect();

Modified: 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileEndpoint.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileEndpoint.java?rev=902014&r1=902013&r2=902014&view=diff
==============================================================================
--- 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileEndpoint.java
 (original)
+++ 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileEndpoint.java
 Fri Jan 22 07:26:22 2010
@@ -32,6 +32,7 @@
 
     private int maximumReconnectAttempts = 3;
     private long reconnectDelay = 1000;
+    private boolean disconnect;
 
     public RemoteFileEndpoint() {
         // no args constructor for spring bean endpoint configuration
@@ -143,4 +144,12 @@
     public void setReconnectDelay(long reconnectDelay) {
         this.reconnectDelay = reconnectDelay;
     }
+
+    public boolean isDisconnect() {
+        return disconnect;
+    }
+
+    public void setDisconnect(boolean disconnect) {
+        this.disconnect = disconnect;
+    }
 }

Modified: 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileProducer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileProducer.java?rev=902014&r1=902013&r2=902014&view=diff
==============================================================================
--- 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileProducer.java
 (original)
+++ 
camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileProducer.java
 Fri Jan 22 07:26:22 2010
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.component.file.remote;
 
-import java.io.IOException;
-
 import org.apache.camel.Exchange;
 import org.apache.camel.ServicePoolAware;
 import org.apache.camel.component.file.GenericFileOperationFailedException;
@@ -57,6 +55,12 @@
         return (RemoteFileOperations) operations;
     }
 
+    @Override
+    @SuppressWarnings("unchecked")
+    public RemoteFileEndpoint<T> getEndpoint() {
+        return (RemoteFileEndpoint<T>) super.getEndpoint();
+    }
+
     /**
      * The file could not be written. We need to disconnect from the remote 
server.
      */
@@ -78,7 +82,7 @@
         }
     }
 
-    public void disconnect() throws IOException {
+    public void disconnect() throws GenericFileOperationFailedException {
         loggedIn = false;
         if (getOperations().isConnected()) {
             if (log.isDebugEnabled()) {
@@ -120,12 +124,27 @@
         connectIfNecessary();
         if (!loggedIn) {
             // must be logged in to be able to upload the file
-            String message = "Cannot connect/login to: " + 
((RemoteFileEndpoint) getEndpoint()).remoteServerInformation();
+            String message = "Cannot connect/login to: " + 
getEndpoint().remoteServerInformation();
             throw new GenericFileOperationFailedException(message);
         }
     }
 
     @Override
+    protected void postWriteCheck() {
+        try {
+            if (getEndpoint().isDisconnect()) {
+                if (log.isTraceEnabled()) {
+                    log.trace("postWriteCheck disconnect from: " + 
getEndpoint());
+                }
+                disconnect();
+            }
+        } catch (GenericFileOperationFailedException e) {
+            // ignore just log a warning
+            log.warn("Exception occurred during disconnecting from: " + 
getEndpoint() + " " + e.getMessage());
+        }
+    }
+
+    @Override
     protected void doStart() throws Exception {
         log.debug("Starting");
         // do not connect when component starts, just wait until we process as 
we will
@@ -143,14 +162,13 @@
         super.doStop();
     }
 
-    protected void connectIfNecessary() throws IOException {
+    protected void connectIfNecessary() throws 
GenericFileOperationFailedException {
         if (!loggedIn) {
             if (log.isDebugEnabled()) {
                 log.debug("Not already connected/logged in. Connecting to: " + 
getEndpoint());
             }
-            RemoteFileEndpoint rfe = (RemoteFileEndpoint) getEndpoint();
-            RemoteFileConfiguration conf = (RemoteFileConfiguration) 
rfe.getConfiguration();
-            loggedIn = getOperations().connect(conf);
+            RemoteFileConfiguration config = (RemoteFileConfiguration) 
getEndpoint().getConfiguration();
+            loggedIn = getOperations().connect(config);
             if (!loggedIn) {
                 return;
             }
@@ -162,4 +180,5 @@
         // this producer is stateful because the remote file operations is not 
thread safe
         return false;
     }
+
 }

Added: 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDisconnectTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDisconnectTest.java?rev=902014&view=auto
==============================================================================
--- 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDisconnectTest.java
 (added)
+++ 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDisconnectTest.java
 Fri Jan 22 07:26:22 2010
@@ -0,0 +1,53 @@
+/**
+ * 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.component.file.remote;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.Test;
+
+public class FtpConsumerDisconnectTest extends FtpServerTestSupport {
+
+    private String getFtpUrl() {
+        return "ftp://ad...@localhost:"; + getPort() + 
"/done?password=admin&disconnect=true&delay=5000";
+    }
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        sendFile(getFtpUrl(), "Hello World", "claus.txt");
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from(getFtpUrl()).to("mock:result");
+            }
+        };
+    }
+
+    @Test
+    public void testDisconnectOnDone() throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+        assertMockEndpointsSatisfied();
+
+        // give time for ftp consumer to disconnect
+        Thread.sleep(2000);
+    }
+
+}
\ No newline at end of file

Propchange: 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDisconnectTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpConsumerDisconnectTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectTest.java
 (from r902008, 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectTest.java?p2=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectTest.java&p1=camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java&r1=902008&r2=902014&rev=902014&view=diff
==============================================================================
--- 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerBuildDirectoryTest.java
 (original)
+++ 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectTest.java
 Fri Jan 22 07:26:22 2010
@@ -16,27 +16,17 @@
  */
 package org.apache.camel.component.file.remote;
 
-import java.io.File;
-
-import org.apache.camel.converter.IOConverter;
 import org.junit.Test;
 
-/**
- * Unit test to verify that Camel can build remote directory on FTP server if 
missing (full or part of).
- */
-public class FtpProducerBuildDirectoryTest extends FtpServerTestSupport {
+public class FtpProducerDisconnectTest extends FtpServerTestSupport {
 
     private String getFtpUrl() {
-        return "ftp://ad...@localhost:"; + getPort() + 
"/upload/user/claus?binary=false&password=admin";
+        return "ftp://ad...@localhost:"; + getPort() + 
"/done?password=admin&disconnect=true";
     }
 
     @Test
-    public void testProduceAndBuildFullRemotFolderTest() throws Exception {
+    public void testDisconnectOnDone() throws Exception {
         sendFile(getFtpUrl(), "Hello World", "claus.txt");
-
-        File file = new File(FTP_ROOT_DIR + "upload/user/claus/claus.txt");
-        file = file.getAbsoluteFile();
-        assertTrue("The uploaded file should exists", file.exists());
-        assertEquals("Hello World", IOConverter.toString(file, null));
     }
+
 }
\ No newline at end of file

Propchange: 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
camel/trunk/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/FtpProducerDisconnectTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date


Reply via email to