Author: davsclaus
Date: Fri Oct 30 09:48:48 2009
New Revision: 831242

URL: http://svn.apache.org/viewvc?rev=831242&view=rev
Log:
CAMEL-2121: Added tempFileName as option to file component for fine grained 
control when writing using a temporary filename as opposed to using tempPrefix 
option.

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FileExpressionBuilder.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/GenericFileEndpoint.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileProduceTempPrefixTest.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FileExpressionBuilder.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FileExpressionBuilder.java?rev=831242&r1=831241&r2=831242&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FileExpressionBuilder.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FileExpressionBuilder.java
 Fri Oct 30 09:48:48 2009
@@ -24,6 +24,7 @@
 import org.apache.camel.Expression;
 import org.apache.camel.impl.ExpressionAdapter;
 import org.apache.camel.spi.Language;
+import org.apache.camel.util.FileUtil;
 
 /**
  * A helper class for working with <a 
href="http://camel.apache.org/expression.html";>expressions</a> based
@@ -55,7 +56,12 @@
     public static Expression fileOnlyNameExpression() {
         return new ExpressionAdapter() {
             public Object evaluate(Exchange exchange) {
-                return exchange.getIn().getHeader(Exchange.FILE_NAME_ONLY, 
String.class);
+                String answer = 
exchange.getIn().getHeader(Exchange.FILE_NAME_ONLY, String.class);
+                if (answer == null) {
+                    answer = exchange.getIn().getHeader(Exchange.FILE_NAME, 
String.class);
+                    answer = FileUtil.stripPath(answer);
+                }
+                return answer;
             }
 
             @Override
@@ -69,17 +75,7 @@
         return new ExpressionAdapter() {
             public Object evaluate(Exchange exchange) {
                 String name = exchange.getIn().getHeader(Exchange.FILE_NAME, 
String.class);
-                if (name != null) {
-                    int pos = name.lastIndexOf('.');
-                    if (pos != -1) {
-                        return name.substring(0, pos);
-                    } else {
-                        // name does not have extension
-                        return name;
-                    }
-                } else {
-                    return null;
-                }
+                return FileUtil.stripExt(name);
             }
 
             @Override
@@ -92,18 +88,8 @@
     public static Expression fileOnlyNameNoExtensionExpression() {
         return new ExpressionAdapter() {
             public Object evaluate(Exchange exchange) {
-                String name = 
exchange.getIn().getHeader(Exchange.FILE_NAME_ONLY, String.class);
-                if (name != null) {
-                    int pos = name.lastIndexOf('.');
-                    if (pos != -1) {
-                        return name.substring(0, pos);
-                    } else {
-                        // name does not have extension
-                        return name;
-                    }
-                } else {
-                    return null;
-                }
+                String name = fileOnlyNameExpression().evaluate(exchange, 
String.class);
+                return FileUtil.stripExt(name);
             }
 
             @Override

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=831242&r1=831241&r2=831242&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
 Fri Oct 30 09:48:48 2009
@@ -329,7 +329,8 @@
      */
     public void setTempPrefix(String tempPrefix) {
         this.tempPrefix = tempPrefix;
-        setTempFileName(tempPrefix + "${file:name}");
+        // use only name as we set a prefix in from on the name
+        setTempFileName(tempPrefix + "${file:onlyname}");
     }
 
     public Expression getTempFileName() {

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileProduceTempPrefixTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileProduceTempPrefixTest.java?rev=831242&r1=831241&r2=831242&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileProduceTempPrefixTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileProduceTempPrefixTest.java
 Fri Oct 30 09:48:48 2009
@@ -40,6 +40,16 @@
         assertDirectoryEquals("target/tempandrename/inprogress.claus.txt", 
tempFileName);
     }
 
+    public void testCreateTempFileNameUsingComplexName() throws Exception {
+        Endpoint endpoint = context.getEndpoint(fileUrl);
+        GenericFileProducer producer = (GenericFileProducer) 
endpoint.createProducer();
+        Exchange exchange = endpoint.createExchange();
+        exchange.getIn().setHeader(Exchange.FILE_NAME, "foo/claus.txt");
+
+        String tempFileName = producer.createTempFileName(exchange, 
"target/tempandrename/foo/claus.txt");
+        assertDirectoryEquals("target/tempandrename/foo/inprogress.claus.txt", 
tempFileName);
+    }
+
     public void testNoPathCreateTempFileName() throws Exception {
         Endpoint endpoint = context.getEndpoint(fileUrl);
         GenericFileProducer producer = (GenericFileProducer) 
endpoint.createProducer();


Reply via email to