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/12/08 08:42:24 UTC

svn commit: r888284 - in /camel/trunk: camel-core/src/main/java/org/apache/camel/builder/ camel-core/src/main/java/org/apache/camel/language/simple/ camel-core/src/main/java/org/apache/camel/processor/interceptor/ camel-core/src/main/resources/META-INF...

Author: davsclaus
Date: Tue Dec  8 07:42:23 2009
New Revision: 888284

URL: http://svn.apache.org/viewvc?rev=888284&view=rev
Log:
CAMEL-2226: File language now merged into Simple language by default. This improves CBR with files etc.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileLanguageCBRTest.java   (with props)
    camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileLanguageCBRTest.java   (with props)
    camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/file/SpringFileLanguageCBRTest.xml
      - copied, changed from r888103, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aopafter.xml
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FileExpressionBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java
    camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/language/file
    camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConcurrentAggregateBatchConsumerTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConcurrentTest.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=888284&r1=888283&r2=888284&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java Tue Dec  8 07:42:23 2009
@@ -36,6 +36,7 @@
 import org.apache.camel.language.bean.BeanLanguage;
 import org.apache.camel.spi.Language;
 import org.apache.camel.util.ExchangeHelper;
+import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.ObjectHelper;
 
 /**
@@ -624,7 +625,7 @@
 
     /**
      * Returns an expression which converts the given expression to the given type the type
-     * expression is evaluted to
+     * expression is evaluated to
      */
     public static Expression convertToExpression(final Expression expression, final Expression type) {
         return new ExpressionAdapter() {
@@ -852,13 +853,18 @@
                     String key = command.substring(command.lastIndexOf('.') + 1);
                     date = exchange.getIn().getHeader(key, Date.class);
                     if (date == null) {
-                        throw new IllegalArgumentException("Cannot find java.util.Date object at " + command);
+                        throw new IllegalArgumentException("Cannot find java.util.Date object at command: " + command);
                     }
                 } else if (command.startsWith("out.header.")) {
                     String key = command.substring(command.lastIndexOf('.') + 1);
                     date = exchange.getOut().getHeader(key, Date.class);
                     if (date == null) {
-                        throw new IllegalArgumentException("Cannot find java.util.Date object at " + command);
+                        throw new IllegalArgumentException("Cannot find java.util.Date object at command: " + command);
+                    }
+                } else if ("file".equals(command)) {
+                    date = exchange.getIn().getHeader("CamelFileLastModified", Date.class);
+                    if (date == null) {
+                        throw new IllegalArgumentException("Cannot find CamelFileLastModified header at command: " + command);
                     }
                 } else {
                     throw new IllegalArgumentException("Command not supported for dateExpression: " + command);
@@ -956,4 +962,160 @@
             }
         };
     }
+
+    public static Expression fileNameExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                return exchange.getIn().getHeader(Exchange.FILE_NAME, String.class);
+            }
+
+            @Override
+            public String toString() {
+                return "file:name";
+            }
+        };
+    }
+
+    public static Expression fileOnlyNameExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                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
+            public String toString() {
+                return "file:onlyname";
+            }
+        };
+    }
+
+    public static Expression fileNameNoExtensionExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                String name = exchange.getIn().getHeader(Exchange.FILE_NAME, String.class);
+                return FileUtil.stripExt(name);
+            }
+
+            @Override
+            public String toString() {
+                return "file:name.noext";
+            }
+        };
+    }
+
+    public static Expression fileOnlyNameNoExtensionExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                String name = fileOnlyNameExpression().evaluate(exchange, String.class);
+                return FileUtil.stripExt(name);
+            }
+
+            @Override
+            public String toString() {
+                return "file:onlyname.noext";
+            }
+        };
+    }
+
+    public static Expression fileExtensionExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                String name = exchange.getIn().getHeader(Exchange.FILE_NAME, String.class);
+                if (name != null) {
+                    return name.substring(name.lastIndexOf('.') + 1);
+                } else {
+                    return null;
+                }
+            }
+
+            @Override
+            public String toString() {
+                return "file:ext";
+            }
+        };
+    }
+
+    public static Expression fileParentExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                return exchange.getIn().getHeader("CamelFileParent", String.class);
+            }
+
+            @Override
+            public String toString() {
+                return "file:parent";
+            }
+        };
+    }
+
+    public static Expression filePathExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                return exchange.getIn().getHeader("CamelFilePath", String.class);
+            }
+
+            @Override
+            public String toString() {
+                return "file:path";
+            }
+        };
+    }
+
+    public static Expression fileAbsolutePathExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                return exchange.getIn().getHeader("CamelFileAbsolutePath", String.class);
+            }
+
+            @Override
+            public String toString() {
+                return "file:absolute.path";
+            }
+        };
+    }
+
+    public static Expression fileAbsoluteExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                return exchange.getIn().getHeader("CamelFileAbsolute", Boolean.class);
+            }
+
+            @Override
+            public String toString() {
+                return "file:absolute";
+            }
+        };
+    }
+
+    public static Expression fileSizeExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                return exchange.getIn().getHeader("CamelFileLength", Long.class);
+            }
+
+            @Override
+            public String toString() {
+                return "file:length";
+            }
+        };
+    }
+
+    public static Expression fileLastModifiedExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                return exchange.getIn().getHeader("CamelFileLastModified", Date.class);
+            }
+
+            @Override
+            public String toString() {
+                return "file:modified";
+            }
+        };
+    }
+
 }

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=888284&r1=888283&r2=888284&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 Tue Dec  8 07:42:23 2009
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.builder;
 
 import java.text.SimpleDateFormat;
@@ -33,7 +32,9 @@
  * This expression expects the headers from the {@link org.apache.camel.language.simple.FileLanguage} on the <b>IN</b> message.
  *
  * @see org.apache.camel.language.simple.FileLanguage
+ * @deprecated will be removed in Camel 2.3
  */
+@Deprecated
 public final class FileExpressionBuilder {
 
     private FileExpressionBuilder() {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java?rev=888284&r1=888283&r2=888284&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java Tue Dec  8 07:42:23 2009
@@ -17,9 +17,6 @@
 package org.apache.camel.language.simple;
 
 import org.apache.camel.Expression;
-import org.apache.camel.ExpressionIllegalSyntaxException;
-import org.apache.camel.builder.FileExpressionBuilder;
-import org.apache.camel.util.ObjectHelper;
 
 /**
  * File language is an extension to Simple language to add file specific expressions.
@@ -51,59 +48,18 @@
  *
  * @see org.apache.camel.language.simple.SimpleLanguage
  * @see org.apache.camel.language.bean.BeanLanguage
+ * @deprecated file language is now included as standard in simple language, will be removed in Camel 2.4
  */
+@Deprecated
 public class FileLanguage extends SimpleLanguageSupport {
 
     private static final SimpleLanguage SIMPLE = new SimpleLanguage();
 
     public static Expression file(String expression) {
-        FileLanguage language = new FileLanguage();
-        return language.createExpression(expression);
+        return SimpleLanguage.simple(expression);
     }
 
     protected Expression createSimpleExpression(String expression, boolean strict) {
-
-        // file: prefix
-        String remainder = ifStartsWithReturnRemainder("file:", expression);
-        if (remainder != null) {
-            if (ObjectHelper.equal(remainder, "name")) {
-                return FileExpressionBuilder.fileNameExpression();
-            } else if (ObjectHelper.equal(remainder, "name.noext")) {
-                return FileExpressionBuilder.fileNameNoExtensionExpression();
-            } else if (ObjectHelper.equal(remainder, "onlyname")) {
-                return FileExpressionBuilder.fileOnlyNameExpression();
-            } else if (ObjectHelper.equal(remainder, "onlyname.noext")) {
-                return FileExpressionBuilder.fileOnlyNameNoExtensionExpression();
-            } else if (ObjectHelper.equal(remainder, "ext")) {
-                return FileExpressionBuilder.fileExtensionExpression();
-            } else if (ObjectHelper.equal(remainder, "parent")) {
-                return FileExpressionBuilder.fileParentExpression();
-            } else if (ObjectHelper.equal(remainder, "path")) {
-                return FileExpressionBuilder.filePathExpression();
-            } else if (ObjectHelper.equal(remainder, "absolute")) {
-                return FileExpressionBuilder.fileAbsoluteExpression();
-            } else if (ObjectHelper.equal(remainder, "absolute.path")) {
-                return FileExpressionBuilder.fileAbsolutePathExpression();
-            } else if (ObjectHelper.equal(remainder, "length")) {
-                return FileExpressionBuilder.fileSizeExpression();
-            } else if (ObjectHelper.equal(remainder, "modified")) {
-                return FileExpressionBuilder.fileLastModifiedExpression();
-            }
-        }
-
-        // date: prefix
-        remainder = ifStartsWithReturnRemainder("date:", expression);
-        if (remainder != null) {
-            String[] parts = remainder.split(":");
-            if (parts.length != 2) {
-                throw new ExpressionIllegalSyntaxException("Valid syntax: ${date:command:pattern} was: " + expression);
-            }
-            String command = parts[0];
-            String pattern = parts[1];
-            return FileExpressionBuilder.dateExpression(command, pattern);
-        }
-
-        // fallback to simple language if not file specific
         return SIMPLE.createSimpleExpression(expression, strict);
     }
 

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java?rev=888284&r1=888283&r2=888284&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java Tue Dec  8 07:42:23 2009
@@ -42,14 +42,39 @@
  * <li>bean:&lt;bean expression&gt; to invoke a bean using the
  * {@link org.apache.camel.language.bean.BeanLanguage BeanLanguage}</li>
  * </ul>
+ * <p/>
+ * The simple language now also includes file language out of the box which means the following expression is also
+ * supported:
+ * <ul>
+ *   <li><tt>file:name</tt> to access the file name (is relative, see note below))</li>
+ *   <li><tt>file:name.noext</tt> to access the file name with no extension</li>
+ *   <li><tt>file:ext</tt> to access the file extension</li>
+ *   <li><tt>file:onlyname</tt> to access the file name (no paths)</li>
+ *   <li><tt>file:onlyname.noext</tt> to access the file name (no paths) with no extension </li>
+ *   <li><tt>file:parent</tt> to access the parent file name</li>
+ *   <li><tt>file:path</tt> to access the file path name</li>
+ *   <li><tt>file:absolute</tt> is the file regarded as absolute or relative</li>
+ *   <li><tt>file:absolute.path</tt> to access the absolute file path name</li>
+ *   <li><tt>file:length</tt> to access the file length as a Long type</li>
+ *   <li><tt>file:modified</tt> to access the file last modified as a Date type</li>
+ *   <li><tt>date:&lt;command&gt;:&lt;pattern&gt;</tt> for date formatting using the {@link java.text.SimpleDateFormat} patterns.
+ *     Additional Supported commands are: <tt>file</tt> for the last modified timestamp of the file.
+ *     All the commands from {@link SimpleLanguage} is also available.
+ *   </li>
+ * </ul>
+ * The <b>relative</b> file is the filename with the starting directory clipped, as opposed to <b>path</b> that will
+ * return the full path including the starting directory.
+ * <br/>
+ * The <b>only</b> file is the filename only with all paths clipped.
  *
  * @version $Revision$
  */
 public class SimpleLanguage extends SimpleLanguageSupport {
 
+    private static final SimpleLanguage SIMPLE = new SimpleLanguage();
+
     public static Expression simple(String expression) {
-        SimpleLanguage language = new SimpleLanguage();
-        return language.createExpression(expression);
+        return SIMPLE.createExpression(expression);
     }
 
     protected Expression createSimpleExpression(String expression, boolean strict) {
@@ -99,6 +124,34 @@
             return ExpressionBuilder.systemPropertyExpression(remainder);
         }
 
+        // file: prefix
+        remainder = ifStartsWithReturnRemainder("file:", expression);
+        if (remainder != null) {
+            if (ObjectHelper.equal(remainder, "name")) {
+                return ExpressionBuilder.fileNameExpression();
+            } else if (ObjectHelper.equal(remainder, "name.noext")) {
+                return ExpressionBuilder.fileNameNoExtensionExpression();
+            } else if (ObjectHelper.equal(remainder, "onlyname")) {
+                return ExpressionBuilder.fileOnlyNameExpression();
+            } else if (ObjectHelper.equal(remainder, "onlyname.noext")) {
+                return ExpressionBuilder.fileOnlyNameNoExtensionExpression();
+            } else if (ObjectHelper.equal(remainder, "ext")) {
+                return ExpressionBuilder.fileExtensionExpression();
+            } else if (ObjectHelper.equal(remainder, "parent")) {
+                return ExpressionBuilder.fileParentExpression();
+            } else if (ObjectHelper.equal(remainder, "path")) {
+                return ExpressionBuilder.filePathExpression();
+            } else if (ObjectHelper.equal(remainder, "absolute")) {
+                return ExpressionBuilder.fileAbsoluteExpression();
+            } else if (ObjectHelper.equal(remainder, "absolute.path")) {
+                return ExpressionBuilder.fileAbsolutePathExpression();
+            } else if (ObjectHelper.equal(remainder, "length")) {
+                return ExpressionBuilder.fileSizeExpression();
+            } else if (ObjectHelper.equal(remainder, "modified")) {
+                return ExpressionBuilder.fileLastModifiedExpression();
+            }
+        }
+
         // date: prefix
         remainder = ifStartsWithReturnRemainder("date:", expression);
         if (remainder != null) {

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java?rev=888284&r1=888283&r2=888284&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceEventMessage.java Tue Dec  8 07:42:23 2009
@@ -19,14 +19,14 @@
 import java.util.Date;
 
 /**
- * A trace event message that contains decomposited information about the traced
+ * A trace event message that contains decomposed information about the traced
  * {@link org.apache.camel.Exchange} at the point of interception. The information is stored as snapshot copies
  * using String types.
  */
 public interface TraceEventMessage {
 
     /**
-     * Gets the timestamp when the interception occured
+     * Gets the timestamp when the interception occurred
      */
     Date getTimestamp();
 
@@ -39,14 +39,14 @@
      * Gets the previous node.
      * <p/>
      * Will return <tt>null</tt> if this is the first node, then you can use the from endpoint uri
-     * instread to indicate the start
+     * instead to indicate the start
      */
     String getPreviousNode();
 
     /**
      * Gets the current node that just have been intercepted and processed
      * <p/>
-     * Is never null.
+     * Is never <tt>null</tt>.
      */
     String getToNode();
 

Modified: camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/language/file
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/language/file?rev=888284&r1=888283&r2=888284&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/language/file (original)
+++ camel/trunk/camel-core/src/main/resources/META-INF/services/org/apache/camel/language/file Tue Dec  8 07:42:23 2009
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-class=org.apache.camel.language.simple.FileLanguage
\ No newline at end of file
+class=org.apache.camel.language.simple.SimpleLanguage
\ No newline at end of file

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConcurrentAggregateBatchConsumerTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConcurrentAggregateBatchConsumerTest.java?rev=888284&r1=888283&r2=888284&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConcurrentAggregateBatchConsumerTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConcurrentAggregateBatchConsumerTest.java Tue Dec  8 07:42:23 2009
@@ -20,7 +20,7 @@
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import static org.apache.camel.language.simple.FileLanguage.file;
+import static org.apache.camel.language.simple.SimpleLanguage.simple;
 
 /**
  * File being processed sync vs async to demonstrate the time difference.
@@ -36,7 +36,7 @@
             @Override
             public void configure() throws Exception {
                 from("file://target/concurrent?delay=60000&initialDelay=2500")
-                    .setHeader("id", file("${file:onlyname.noext}"))
+                    .setHeader("id", simple("${file:onlyname.noext}"))
                     .threads(20)
                     .beanRef("business")
                     .aggregate(header("country"), new MyBusinessTotal()).batchSizeFromConsumer().batchTimeout(60000).to("mock:result");
@@ -59,7 +59,7 @@
             @Override
             public void configure() throws Exception {
                 from("file://target/concurrent?delay=60000&initialDelay=2500")
-                    .setHeader("id", file("${file:onlyname.noext}"))
+                    .setHeader("id", simple("${file:onlyname.noext}"))
                     .beanRef("business")
                     .aggregate(header("country"), new MyBusinessTotal()).batchSizeFromConsumer().batchTimeout(60000).to("mock:result");
             }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConcurrentTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConcurrentTest.java?rev=888284&r1=888283&r2=888284&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConcurrentTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConcurrentTest.java Tue Dec  8 07:42:23 2009
@@ -32,7 +32,7 @@
 import org.apache.camel.util.ObjectHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import static org.apache.camel.language.simple.FileLanguage.file;
+import static org.apache.camel.language.simple.SimpleLanguage.simple;
 
 /**
  * File being processed sync vs async to demonstrate the time difference.
@@ -65,7 +65,7 @@
             @Override
             public void configure() throws Exception {
                 from("file://target/concurrent?delay=60000&initialDelay=2500")
-                    .setHeader("id", file("${file:onlyname.noext}"))
+                    .setHeader("id", simple("${file:onlyname.noext}"))
                     .threads(20)
                     .beanRef("business")
                     .aggregate(header("country"), new MyBusinessTotal()).batchSize(10).batchTimeout(60000).to("mock:result");
@@ -88,7 +88,7 @@
             @Override
             public void configure() throws Exception {
                 from("file://target/concurrent?delay=60000&initialDelay=2500")
-                    .setHeader("id", file("${file:onlyname.noext}"))
+                    .setHeader("id", simple("${file:onlyname.noext}"))
                     .beanRef("business")
                     .aggregate(header("country"), new MyBusinessTotal()).batchSize(10).batchTimeout(60000).to("mock:result");
             }

Added: camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileLanguageCBRTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileLanguageCBRTest.java?rev=888284&view=auto
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileLanguageCBRTest.java (added)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileLanguageCBRTest.java Tue Dec  8 07:42:23 2009
@@ -0,0 +1,78 @@
+/**
+ * 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;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class FileLanguageCBRTest extends ContextTestSupport {
+
+    @Override
+    protected void setUp() throws Exception {
+        deleteDirectory("target/cbr");
+        super.setUp();
+    }
+
+    public void testTxt() throws Exception {
+        getMockEndpoint("mock:txt").expectedMessageCount(1);
+        getMockEndpoint("mock:dat").expectedMessageCount(0);
+        getMockEndpoint("mock:other").expectedMessageCount(0);
+
+        template.sendBodyAndHeader("file://target/cbr", "Hello World", Exchange.FILE_NAME, "hello.txt");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testDat() throws Exception {
+        getMockEndpoint("mock:txt").expectedMessageCount(0);
+        getMockEndpoint("mock:dat").expectedMessageCount(1);
+        getMockEndpoint("mock:other").expectedMessageCount(0);
+
+        template.sendBodyAndHeader("file://target/cbr", "Bye World", Exchange.FILE_NAME, "bye.dat");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testOther() throws Exception {
+        getMockEndpoint("mock:txt").expectedMessageCount(0);
+        getMockEndpoint("mock:dat").expectedMessageCount(0);
+        getMockEndpoint("mock:other").expectedMessageCount(1);
+
+        template.sendBodyAndHeader("file://target/cbr", "Hi World", Exchange.FILE_NAME, "hi.foo");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("file://target/cbr?delete=true")
+                    .convertBodyTo(String.class)
+                    .choice()
+                        .when().simple("${file:ext} == 'txt'").to("mock:txt")
+                        .when().simple("${file:ext} == 'dat'").to("mock:dat")
+                        .otherwise().to("mock:other");
+            }
+        };
+    }
+}

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

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

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java?rev=888284&r1=888283&r2=888284&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java Tue Dec  8 07:42:23 2009
@@ -29,7 +29,7 @@
 import org.apache.camel.component.file.FileEndpoint;
 import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.impl.JndiRegistry;
-import org.apache.camel.language.simple.FileLanguage;
+import org.apache.camel.language.simple.SimpleLanguage;
 
 /**
  * Unit test for File Language.
@@ -71,7 +71,7 @@
         assertExpression("${file:length}", file.length());
 
         // modified is a Date object
-        Date modified = FileLanguage.file("file:modified").evaluate(exchange, Date.class);
+        Date modified = SimpleLanguage.simple("file:modified").evaluate(exchange, Date.class);
         assertEquals(new Date(file.lastModified()), modified);
     }
 

Added: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileLanguageCBRTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileLanguageCBRTest.java?rev=888284&view=auto
==============================================================================
--- camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileLanguageCBRTest.java (added)
+++ camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileLanguageCBRTest.java Tue Dec  8 07:42:23 2009
@@ -0,0 +1,70 @@
+/**
+ * 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.spring.file;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.spring.SpringTestSupport;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * @version $Revision$
+ */
+public class SpringFileLanguageCBRTest extends SpringTestSupport {
+
+    @Override
+    protected AbstractXmlApplicationContext createApplicationContext() {
+        return new ClassPathXmlApplicationContext("org/apache/camel/spring/file/SpringFileLanguageCBRTest.xml");
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        deleteDirectory("target/cbr");
+        super.setUp();
+    }
+
+    public void testTxt() throws Exception {
+        getMockEndpoint("mock:txt").expectedMessageCount(1);
+        getMockEndpoint("mock:dat").expectedMessageCount(0);
+        getMockEndpoint("mock:other").expectedMessageCount(0);
+
+        template.sendBodyAndHeader("file://target/cbr", "Hello World", Exchange.FILE_NAME, "hello.txt");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testDat() throws Exception {
+        getMockEndpoint("mock:txt").expectedMessageCount(0);
+        getMockEndpoint("mock:dat").expectedMessageCount(1);
+        getMockEndpoint("mock:other").expectedMessageCount(0);
+
+        template.sendBodyAndHeader("file://target/cbr", "Bye World", Exchange.FILE_NAME, "bye.dat");
+
+        assertMockEndpointsSatisfied();
+    }
+
+    public void testOther() throws Exception {
+        getMockEndpoint("mock:txt").expectedMessageCount(0);
+        getMockEndpoint("mock:dat").expectedMessageCount(0);
+        getMockEndpoint("mock:other").expectedMessageCount(1);
+
+        template.sendBodyAndHeader("file://target/cbr", "Hi World", Exchange.FILE_NAME, "hi.foo");
+
+        assertMockEndpointsSatisfied();
+    }
+
+}

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileLanguageCBRTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/file/SpringFileLanguageCBRTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/file/SpringFileLanguageCBRTest.xml (from r888103, camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aopafter.xml)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/file/SpringFileLanguageCBRTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/file/SpringFileLanguageCBRTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aopafter.xml&r1=888103&r2=888284&rev=888284&view=diff
==============================================================================
--- camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aopafter.xml (original)
+++ camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/file/SpringFileLanguageCBRTest.xml Tue Dec  8 07:42:23 2009
@@ -25,11 +25,20 @@
     <!-- START SNIPPET: e1 -->
     <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
         <route>
-            <from uri="direct:start"/>
-            <aop afterUri="mock:after">
-                <transform><constant>Bye World</constant></transform>
-                <to uri="mock:result"/>
-            </aop>
+            <from uri="file://target/cbr?delete=true"/>
+            <choice>
+                <when>
+                    <simple>${file:ext} == 'txt'</simple>
+                    <to uri="mock:txt"/>
+                </when>
+                <when>
+                    <simple>${file:ext} == 'dat'</simple>
+                    <to uri="mock:dat"/>
+                </when>
+                <otherwise>
+                    <to uri="mock:other"/>
+                </otherwise>
+            </choice>
         </route>
     </camelContext>
     <!-- END SNIPPET: e1 -->