You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2008/02/13 14:25:29 UTC

svn commit: r627405 - in /activemq/camel/trunk/components/camel-spring/src: main/java/org/apache/camel/spring/ main/java/org/apache/camel/spring/util/ test/java/org/apache/camel/spring/

Author: jstrachan
Date: Wed Feb 13 05:25:28 2008
New Revision: 627405

URL: http://svn.apache.org/viewvc?rev=627405&view=rev
Log:
added a helper class for easier building of Camel routes reusing the Main and a SimpleRouteBuilder

Added:
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/SimpleRouteBuilder.java   (with props)
    activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/MainExampleTest.java   (with props)
    activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/MainTest.java   (with props)
Modified:
    activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java

Modified: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java?rev=627405&r1=627404&r2=627405&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java (original)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/Main.java Wed Feb 13 05:25:28 2008
@@ -16,7 +16,16 @@
  */
 package org.apache.camel.spring;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+
 import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.view.RouteDotGenerator;
@@ -25,14 +34,6 @@
 import org.springframework.context.support.AbstractApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-
 /**
  * A command line tool for booting up a CamelContext using an optional Spring
  * ApplicationContext
@@ -49,6 +50,8 @@
     private long duration = -1;
     private TimeUnit timeUnit = TimeUnit.MILLISECONDS;
     private String dotOutputDir;
+    private List<RouteBuilder> routeBuilders = new ArrayList<RouteBuilder>();
+    private SpringCamelContext camelContext;
 
     public Main() {
         addOption(new Option("h", "help", "Displays the help screen") {
@@ -84,7 +87,6 @@
         new Main().run(args);
     }
 
-
     /**
      * Parses the command line arguments then runs the program
      */
@@ -100,7 +102,6 @@
         if (!completed.get()) {
             try {
                 start();
-                postProcessContext();
                 waitUntilCompleted();
                 stop();
             }
@@ -118,6 +119,10 @@
         latch.countDown();
     }
 
+    public void addRouteBuilder(RouteBuilder routeBuilder) {
+        getRouteBuilders().add(routeBuilder);
+    }
+
     /**
      * Displays the command line options
      */
@@ -239,6 +244,10 @@
         this.applicationContextUri = applicationContextUri;
     }
 
+    public SpringCamelContext getCamelContext() {
+        return camelContext;
+    }
+
     public long getDuration() {
         return duration;
     }
@@ -277,6 +286,14 @@
         this.dotOutputDir = dotOutputDir;
     }
 
+    public List<RouteBuilder> getRouteBuilders() {
+        return routeBuilders;
+    }
+
+    public void setRouteBuilders(List<RouteBuilder> routeBuilders) {
+        this.routeBuilders = routeBuilders;
+    }
+
     // Implementation methods
     // -------------------------------------------------------------------------
     protected void doStart() throws Exception {
@@ -285,6 +302,8 @@
             applicationContext = createDefaultApplicationContext();
         }
         applicationContext.start();
+
+        postProcessContext();
     }
 
     protected AbstractApplicationContext createDefaultApplicationContext() {
@@ -320,7 +339,7 @@
     }
 
     protected void postProcessContext() throws Exception {
-        CamelContext camelContext = SpringCamelContext.springCamelContext(applicationContext);
+        camelContext = SpringCamelContext.springCamelContext(applicationContext);
         if (ObjectHelper.isNotNullAndNonEmpty(dotOutputDir)) {
             RouteDotGenerator generator = new RouteDotGenerator(dotOutputDir);
             LOG.info("Generating DOT file for routes: " + dotOutputDir + " for: " + camelContext);
@@ -329,7 +348,10 @@
         postProcesCamelContext(camelContext);
     }
 
-    protected void postProcesCamelContext(CamelContext camelContext) {
+    protected void postProcesCamelContext(CamelContext camelContext) throws Exception {
+        for (RouteBuilder routeBuilder : routeBuilders) {
+            camelContext.addRoutes(routeBuilder);
+        }
     }
 
     protected String getVersion() {

Added: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/SimpleRouteBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/SimpleRouteBuilder.java?rev=627405&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/SimpleRouteBuilder.java (added)
+++ activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/SimpleRouteBuilder.java Wed Feb 13 05:25:28 2008
@@ -0,0 +1,146 @@
+/**
+ *
+ * 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.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.ProcessorType;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * A simple {@link RouteBuilder} which can be configured directly with one or more from URIs, zero or more to URIs
+ * and an optional bean processing step.
+ *
+ * @version $Revision: 1.1 $
+ */
+public class SimpleRouteBuilder extends RouteBuilder {
+    private List<String> fromUris = new ArrayList<String>();
+    private List<String> toUris = new ArrayList<String>();
+    private Class beanType;
+    private String beanClass;
+    private String beanRef;
+    private String beanMethod;
+
+    public void configure() throws Exception {
+        if (fromUris.isEmpty()) {
+            throw new IllegalArgumentException("the fromUris property must contain at least one valid URI");
+        }
+        for (String fromUri : fromUris) {
+            ProcessorType route = from(fromUri);
+
+            addBeanCall(route);
+            for (String toUri : toUris) {
+                route = route.to(toUri);
+            }
+        }
+    }
+
+    // Properties
+    //-------------------------------------------------------------------------
+    public void setFromUri(String uri) {
+        setFromUris(singletonList(uri));
+    }
+
+    public void setToUri(String uri) {
+        setToUris(singletonList(uri));
+    }
+
+    public List<String> getFromUris() {
+        return fromUris;
+    }
+
+    public void setFromUris(List<String> fromUris) {
+        this.fromUris = fromUris;
+    }
+
+    public List<String> getToUris() {
+        return toUris;
+    }
+
+    public void setToUris(List<String> toUris) {
+        this.toUris = toUris;
+    }
+
+    public String getBeanClass() {
+        return beanClass;
+    }
+
+    public void setBeanClass(String beanClass) {
+        this.beanClass = beanClass;
+    }
+
+    public String getBeanRef() {
+        return beanRef;
+    }
+
+    public void setBeanRef(String beanRef) {
+        this.beanRef = beanRef;
+    }
+
+    public Class getBeanType() {
+        if (beanType == null) {
+            if (beanClass != null) {
+                beanType = ObjectHelper.loadClass(beanClass, getClass().getClassLoader());
+            }
+        }
+        return beanType;
+    }
+
+    public void setBeanType(Class beanType) {
+        this.beanType = beanType;
+    }
+
+    public String getBeanMethod() {
+        return beanMethod;
+    }
+
+    public void setBeanMethod(String beanMethod) {
+        this.beanMethod = beanMethod;
+    }
+
+    // Implementation methods
+    //-------------------------------------------------------------------------
+
+    protected void addBeanCall(ProcessorType route) {
+        Class type = getBeanType();
+        if (type != null) {
+            if (beanMethod != null) {
+                route = route.bean(type, beanMethod);
+            }
+            else {
+                route = route.bean(type);
+            }
+        }
+        else if (beanRef != null) {
+            if (beanMethod != null) {
+                route = route.beanRef(beanRef, beanMethod);
+            }
+            else {
+                route = route.beanRef(beanRef);
+            }
+        }
+    }
+
+    protected List<String> singletonList(String value) {
+        List<String> uris = new ArrayList<String>();
+        uris.add(value);
+        return uris;
+    }
+}

Propchange: activemq/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/util/SimpleRouteBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/MainExampleTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/MainExampleTest.java?rev=627405&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/MainExampleTest.java (added)
+++ activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/MainExampleTest.java Wed Feb 13 05:25:28 2008
@@ -0,0 +1,43 @@
+/**
+ *
+ * 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;
+
+import junit.framework.TestCase;
+import org.apache.camel.spring.util.SimpleRouteBuilder;
+
+/**
+ * @version $Revision: 1.1 $
+ */
+public class MainExampleTest extends TestCase {
+    public void testMain() throws Exception {
+        // lets make a simple route
+        SimpleRouteBuilder builder = new SimpleRouteBuilder();
+        builder.setFromUri("file://src/test/data?noop=true");
+        builder.setBeanClass("org.apache.camel.spring.example.MyProcessor");
+        builder.setToUri("file://target/mainTest");
+
+        Main main = new Main();
+        main.addRouteBuilder(builder);
+        main.start();
+
+        // then some time later
+        Thread.sleep(3000);
+        main.stop();
+
+    }
+}
\ No newline at end of file

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

Added: activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/MainTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/MainTest.java?rev=627405&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/MainTest.java (added)
+++ activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/MainTest.java Wed Feb 13 05:25:28 2008
@@ -0,0 +1,59 @@
+/**
+ *
+ * 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;
+
+import java.util.List;
+
+import junit.framework.TestCase;
+import org.apache.camel.spring.util.SimpleRouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.Exchange;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * @version $Revision: 1.1 $
+ */
+public class MainTest extends TestCase {
+    private static final transient Log LOG = LogFactory.getLog(MainTest.class);
+
+    public void testMain() throws Exception {
+        // lets make a simple route
+        SimpleRouteBuilder builder = new SimpleRouteBuilder();
+        builder.setFromUri("file://src/test/data?noop=true");
+        builder.setBeanClass("org.apache.camel.spring.example.MyProcessor");
+        builder.setToUri("mock:results");
+
+        Main main = new Main();
+        main.addRouteBuilder(builder);
+        main.start();
+
+        SpringCamelContext camelContext = main.getCamelContext();
+        assertNotNull(camelContext);
+
+        MockEndpoint endpoint = camelContext.getEndpoint("mock:results", MockEndpoint.class);
+        endpoint.expectedMessageCount(2);
+        endpoint.assertIsSatisfied();
+        List<Exchange> list = endpoint.getReceivedExchanges();
+        
+        LOG.debug("Received: " + list);
+
+        main.stop();
+
+    }
+}

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