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 2008/08/22 08:16:41 UTC

svn commit: r687962 - in /activemq/camel/trunk/camel-core/src: main/java/org/apache/camel/language/simple/ test/java/org/apache/camel/component/file/ test/java/org/apache/camel/language/

Author: davsclaus
Date: Thu Aug 21 23:16:41 2008
New Revision: 687962

URL: http://svn.apache.org/viewvc?rev=687962&view=rev
Log:
CAMEL-621: Added support for using Date objects from either in or out message.

Modified:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileExpressionBuilder.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileProducerExpressionTest.java
    activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileExpressionBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileExpressionBuilder.java?rev=687962&r1=687961&r2=687962&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileExpressionBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileExpressionBuilder.java Thu Aug 21 23:16:41 2008
@@ -127,6 +127,18 @@
                     date = new Date(exchange.getFile().lastModified());
                 } else if ("now".equals(command)) {
                     date = new Date();
+                } else if (command.startsWith("header.") || command.startsWith("in.header.")) {
+                    String key = command.substring(command.lastIndexOf(".") + 1);
+                    date = exchange.getIn().getHeader(key, Date.class);
+                    if (date == null) {
+                        throw new IllegalArgumentException("Could not find java.util.Date object at " + 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("Could not find java.util.Date object at " + command);
+                    }
                 } else {
                     throw new IllegalArgumentException("Command not supported for dateExpression: " + command);
                 }

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java?rev=687962&r1=687961&r2=687962&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/FileLanguage.java Thu Aug 21 23:16:41 2008
@@ -31,8 +31,11 @@
  * <li>file:parent to access the parent file name</li>
  * <li>file:path to access the file path name</li>
  * <li>file:absolute to access the absolute file name</li>
+ * <li>file:canonical.path to access the canonical path name</li>
  * <li>date:&lt;command&gt;:&lt;pattern&gt; for date formatting using the {@link java.text.SimpleDateFormat} patterns.
- * Supported commands are: <tt>now</tt> for current timestamp, <tt>file</tt> for the last modified timestamp of the file</li>
+ * Supported commands are: <tt>now</tt> for current timestamp, <tt>file</tt> for the last modified timestamp of the file.
+ * <tt>in.header.xxx</tt> or <tt>header.xxx</tt> to use the Date object in the in header.
+ * <tt>out.header.xxx</tt> to use the Date object in the out header. </li>
  * <li>bean:&lt;bean expression&gt; to invoke a bean using the
  * {@link org.apache.camel.language.bean.BeanLanguage BeanLanguage}</li>
  * <li>simple:&lt;simple expression&gt; to invoke the simple expression, however simple: can be obmitted as this language

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java?rev=687962&r1=687961&r2=687962&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java Thu Aug 21 23:16:41 2008
@@ -28,10 +28,10 @@
  * Examples of supported expressions are:
  * <ul>
  * <li>id to access the inbound message Id</li>
- * <li>in.header.foo or header.foo to access an inbound header called 'foo'</li>
  * <li>in.body or body to access the inbound body</li>
- * <li>out.header.foo to access an outbound header called 'foo'</li>
  * <li>out.body to access the inbound body</li>
+ * <li>in.header.foo or header.foo to access an inbound header called 'foo'</li>
+ * <li>out.header.foo to access an outbound header called 'foo'</li>
  * <li>property.foo to access the exchange property called 'foo'</li>
  * <li>sys.foo to access the system property called 'foo'</li>
  * </ul>
@@ -87,7 +87,7 @@
         // system property
         remainder = ifStartsWithReturnRemainder("sys.", expression);
         if (remainder != null) {
-            return ExpressionBuilder.propertyExpression(remainder);
+            return ExpressionBuilder.systemProperty(remainder);
         }
 
         throw new IllegalSyntaxException(this, expression);

Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileProducerExpressionTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileProducerExpressionTest.java?rev=687962&r1=687961&r2=687962&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileProducerExpressionTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileProducerExpressionTest.java Thu Aug 21 23:16:41 2008
@@ -19,6 +19,8 @@
 import java.io.File;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.impl.JndiRegistry;
@@ -42,7 +44,8 @@
     }
 
     public void testProduceBeanByHeader() throws Exception {
-        template.sendBodyAndHeader("file://target/filelanguage", "Hello World", FileComponent.HEADER_FILE_NAME, "${bean:myguidgenerator}.bak");
+        template.sendBodyAndHeader("file://target/filelanguage", "Hello World",
+            FileComponent.HEADER_FILE_NAME, "${bean:myguidgenerator}.bak");
 
         Thread.sleep(500);
         assertFileExists("target/filelanguage/123.bak");
@@ -56,7 +59,8 @@
      }
 
     public void testProducerDateByHeader() throws Exception {
-        template.sendBodyAndHeader("file://target/filelanguage", "Hello World", FileComponent.HEADER_FILE_NAME, "myfile-${date:now:yyyyMMdd}.txt");
+        template.sendBodyAndHeader("file://target/filelanguage", "Hello World",
+            FileComponent.HEADER_FILE_NAME, "myfile-${date:now:yyyyMMdd}.txt");
 
         Thread.sleep(500);
         String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
@@ -81,12 +85,25 @@
     }
 
     public void testProducerSimpleWithHeaderByExpression() throws Exception {
-        template.sendBodyAndHeader("file://target/filelanguage?expression=myfile-${in.header.foo}.txt", "Hello World", "foo", "abc");
+        template.sendBodyAndHeader("file://target/filelanguage?expression=myfile-${in.header.foo}.txt",
+            "Hello World", "foo", "abc");
 
         Thread.sleep(500);
         assertFileExists("target/filelanguage/myfile-abc.txt");
     }
 
+    public void testProducerWithDateHeader() throws Exception {
+        Calendar cal = GregorianCalendar.getInstance();
+        cal.set(1974, Calendar.APRIL, 20);
+        Date date = cal.getTime();
+
+        template.sendBodyAndHeader("file://target/filelanguage?expression=mybirthday-${date:in.header.birthday:yyyyMMdd}.txt",
+            "Hello World", "birthday", date);
+
+        Thread.sleep(500);
+        assertFileExists("target/filelanguage/mybirthday-19740420.txt");
+    }
+
     private static void assertFileExists(String filename) {
         File file = new File(filename);
         file = file.getAbsoluteFile();

Modified: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java?rev=687962&r1=687961&r2=687962&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/language/FileLanguageTest.java Thu Aug 21 23:16:41 2008
@@ -19,6 +19,8 @@
 import java.io.File;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Calendar;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
@@ -64,6 +66,16 @@
 
         String expected = new SimpleDateFormat("yyyyMMdd").format(new Date(file.lastModified()));
         assertExpression("backup-${date:file:yyyyMMdd}", "backup-" + expected);
+
+        assertExpression("backup-${date:header.birthday:yyyyMMdd}", "backup-19740420");
+        assertExpression("hello-${date:out.header.special:yyyyMMdd}", "hello-20080808");
+
+        try {
+            this.assertExpression("nodate-${date:header.xxx:yyyyMMdd}", null);
+            fail("Should have thrown IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
     }
 
     public void testSimple() throws Exception {
@@ -90,7 +102,14 @@
 
     public Exchange createExchange() {
         file = new File("target/filelanguage/hello.txt");
-        Exchange answer = new FileExchange(context, ExchangePattern.InOnly, file);
+        Exchange answer = new FileExchange(context, ExchangePattern.InOut, file);
+
+        Calendar cal = GregorianCalendar.getInstance();
+        cal.set(1974, Calendar.APRIL, 20);
+        answer.getIn().setHeader("birthday", cal.getTime());
+
+        cal.set(2008, Calendar.AUGUST, 8);
+        answer.getOut().setHeader("special", cal.getTime());
         return answer;
     }