You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2007/03/22 19:33:56 UTC

svn commit: r521399 - in /activemq/camel/trunk: camel-core/src/main/java/org/apache/camel/builder/ camel-spring/src/main/java/org/apache/camel/spring/ camel-spring/src/test/java/org/apache/camel/spring/ camel-spring/src/test/resources/org/apache/camel/...

Author: chirino
Date: Thu Mar 22 11:33:54 2007
New Revision: 521399

URL: http://svn.apache.org/viewvc?view=rev&rev=521399
Log:
Added needed support for the wire tap impl.. It can now inject array values into builders.

Removed:
    activemq/camel/trunk/camel-spring/src/test/java/org/apache/camel/spring/SpringXMLExtensionTest.java
    activemq/camel/trunk/camel-spring/src/test/resources/org/apache/camel/spring/spring_xml_extension_test.xml
Modified:
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ChoiceBuilder.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java
    activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/WhenBuilder.java
    activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanDefinitionParser.java
    activemq/camel/trunk/camel-spring/src/test/java/org/apache/camel/spring/SpringRouteBuilderTest.java
    activemq/camel/trunk/camel-spring/src/test/resources/org/apache/camel/spring/spring_route_builder_test.xml

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ChoiceBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ChoiceBuilder.java?view=diff&rev=521399&r1=521398&r2=521399
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ChoiceBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ChoiceBuilder.java Thu Mar 22 11:33:54 2007
@@ -44,12 +44,16 @@
      *
      * @return a builder for creating a when predicate clause and action
      */
-    public WhenBuilder<E> when(Predicate<E> predicate) {
+    @Fluent(nestedActions=true)
+    public WhenBuilder<E> when(
+    		@FluentArg(value="predicate",element=true) 
+    		Predicate<E> predicate) {
         WhenBuilder<E> answer = new WhenBuilder<E>(this, predicate);
         predicateBuilders.add(answer);
         return answer;
     }
 
+    @Fluent(nestedActions=true)
     public FromBuilder<E> otherwise() {
         this.otherwise = new FromBuilder<E>(parent);
         return otherwise;

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java?view=diff&rev=521399&r1=521398&r2=521399
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/FromBuilder.java Thu Mar 22 11:33:54 2007
@@ -73,7 +73,9 @@
      * Sends the exchange to a list of endpoints using the {@link MulticastProcessor} pattern
      */
     @Fluent
-    public ProcessorFactory<E> to(@FluentArg("uris") String... uris) {
+    public ProcessorFactory<E> to(
+    		@FluentArg(value="uri", attribute=false, element=true) 
+    		String... uris) {
         return to(endpoints(uris));
     }
 
@@ -81,7 +83,9 @@
      * Sends the exchange to a list of endpoints using the {@link MulticastProcessor} pattern
      */
     @Fluent
-    public ProcessorFactory<E> to(@FluentArg("endpoints") Endpoint<E>... endpoints) {
+    public ProcessorFactory<E> to(
+    		@FluentArg(value="endpoint", attribute=false, element=true) 
+    		Endpoint<E>... endpoints) {
         return to(endpoints(endpoints));
     }
 
@@ -150,7 +154,7 @@
      *
      * @return the builder for a choice expression
      */
-    @Fluent
+    @Fluent(nestedActions=true)
     public ChoiceBuilder<E> choice() {
         ChoiceBuilder<E> answer = new ChoiceBuilder<E>(this);
         addProcessBuilder(answer);

Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/WhenBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/WhenBuilder.java?view=diff&rev=521399&r1=521398&r2=521399
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/WhenBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/WhenBuilder.java Thu Mar 22 11:33:54 2007
@@ -33,13 +33,15 @@
     }
 
     @Override
-    public ChoiceBuilder<E> to(Endpoint<E> endpoint) {
+    @Fluent
+    public ChoiceBuilder<E> to(@FluentArg("endpoint") Endpoint<E> endpoint) {
         super.to(endpoint);
         return parent;
     }
 
     @Override
-    public ChoiceBuilder<E> to(String uri) {
+    @Fluent
+    public ChoiceBuilder<E> to(@FluentArg("uri")  String uri) {
         super.to(uri);
         return parent;
     }

Modified: activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanDefinitionParser.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanDefinitionParser.java?view=diff&rev=521399&r1=521398&r2=521399
==============================================================================
--- activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanDefinitionParser.java (original)
+++ activemq/camel/trunk/camel-spring/src/main/java/org/apache/camel/spring/CamelBeanDefinitionParser.java Thu Mar 22 11:33:54 2007
@@ -1,6 +1,7 @@
 package org.apache.camel.spring;
 
 import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -14,6 +15,7 @@
 import org.apache.camel.builder.Fluent;
 import org.apache.camel.builder.FluentArg;
 import org.apache.camel.builder.RouteBuilder;
+import org.springframework.beans.SimpleTypeConverter;
 import org.springframework.beans.factory.config.RuntimeBeanReference;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
@@ -74,11 +76,8 @@
 					currentBuilder = parseBuilderElement((Element) node, currentBuilder, actions);
 				} else {
 					// Make sure the there are no child elements.
-					NodeList nl = node.getChildNodes();
-					for (int j = 0; j < nl.getLength(); ++j) {
-						if( nl.item(j).getNodeType() == Node.ELEMENT_NODE ) {
-							throw new IllegalArgumentException("The element "+node.getLocalName()+" should not have any child elements.");
-						}
+					if( hasChildElements(node) ) {
+						throw new IllegalArgumentException("The element "+node.getLocalName()+" should not have any child elements.");
 					}
 				}
 				
@@ -106,6 +105,16 @@
 		return currentBuilder;
 	}
 
+	private boolean hasChildElements(Node node) {
+		NodeList nl = node.getChildNodes();
+		for (int j = 0; j < nl.getLength(); ++j) {
+			if( nl.item(j).getNodeType() == Node.ELEMENT_NODE ) {
+				return true;
+			}
+		}
+		return false;
+	}
+
 	private Class parseAction(Class currentBuilder, ArrayList<BuilderAction> actions, Element element, Element previousElement) {
 
 		String actionName = element.getLocalName();
@@ -157,8 +166,14 @@
 	private Object convertTo(ArrayList<Element> elements, Class clazz) {
 
 		if( clazz.isArray() || elements.size() > 1 ) {
-			// TODO: we could support arrays one day soon.
-			throw new IllegalStateException("We don't support injecting array values.");
+			Object array = Array.newInstance(clazz.getComponentType(), elements.size());
+			for( int i=0; i < elements.size(); i ++ ) {
+				ArrayList<Element> e = new ArrayList<Element>(1);
+				e.add(elements.get(i));
+				Object value = convertTo(e, clazz.getComponentType());
+				Array.set(array, i, value);
+			}
+			return array;
 		} else {
 			
 			Element element = elements.get(0);
@@ -167,17 +182,25 @@
 				return new RuntimeBeanReference(ref);
 			}
 			
-			ArrayList<BuilderAction> actions = new ArrayList<BuilderAction>();
-			Class type = parseBuilderElement(element, RouteBuilder.class, actions);
-			BuilderStatement statement = new BuilderStatement();
-			statement.setReturnType(type);
-			statement.setActions(actions);
-			
-			if( !clazz.isAssignableFrom( statement.getReturnType() ) ) {
-				throw new IllegalStateException("Builder does not produce object of expected type: "+clazz.getName());
+			// Use a builder to create the value..
+			if( hasChildElements(element) ) {
+				
+				ArrayList<BuilderAction> actions = new ArrayList<BuilderAction>();
+				Class type = parseBuilderElement(element, RouteBuilder.class, actions);
+				BuilderStatement statement = new BuilderStatement();
+				statement.setReturnType(type);
+				statement.setActions(actions);
+				
+				if( !clazz.isAssignableFrom( statement.getReturnType() ) ) {
+					throw new IllegalStateException("Builder does not produce object of expected type: "+clazz.getName());
+				}
+				
+				return statement;
+			} else {
+				// Just use the text in the element as the value.
+				SimpleTypeConverter converter = new SimpleTypeConverter();
+				return converter.convertIfNecessary(element.getTextContent(), clazz);
 			}
-			
-			return statement;
 		}
 	}
 

Modified: activemq/camel/trunk/camel-spring/src/test/java/org/apache/camel/spring/SpringRouteBuilderTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-spring/src/test/java/org/apache/camel/spring/SpringRouteBuilderTest.java?view=diff&rev=521399&r1=521398&r2=521399
==============================================================================
--- activemq/camel/trunk/camel-spring/src/test/java/org/apache/camel/spring/SpringRouteBuilderTest.java (original)
+++ activemq/camel/trunk/camel-spring/src/test/java/org/apache/camel/spring/SpringRouteBuilderTest.java Thu Mar 22 11:33:54 2007
@@ -78,20 +78,24 @@
 	}
 	
 	@Override
-	protected RouteBuilder<Exchange> buildSimpleRouteWithChoice() {
-		// TODO Auto-generated method stub
-		return super.buildSimpleRouteWithChoice();
+	protected RouteBuilder<Exchange> buildSimpleRouteWithHeaderPredicate() {
+		RouteBuilder<Exchange> builder = (RouteBuilder<Exchange>) ctx.getBean("buildSimpleRouteWithHeaderPredicate");
+		assertNotNull(builder);
+		return builder;
 	}
-	
+
 	@Override
-	protected RouteBuilder<Exchange> buildSimpleRouteWithHeaderPredicate() {
-		// TODO Auto-generated method stub
-		return super.buildSimpleRouteWithHeaderPredicate();
+	protected RouteBuilder<Exchange> buildSimpleRouteWithChoice() {
+		RouteBuilder<Exchange> builder = (RouteBuilder<Exchange>) ctx.getBean("buildSimpleRouteWithChoice");
+		assertNotNull(builder);
+		return builder;
 	}
 	
+	
 	@Override
 	protected RouteBuilder<Exchange> buildWireTap() {
-		// TODO Auto-generated method stub
-		return super.buildWireTap();
+		RouteBuilder<Exchange> builder = (RouteBuilder<Exchange>) ctx.getBean("buildWireTap");
+		assertNotNull(builder);
+		return builder;
 	}
 }

Modified: activemq/camel/trunk/camel-spring/src/test/resources/org/apache/camel/spring/spring_route_builder_test.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-spring/src/test/resources/org/apache/camel/spring/spring_route_builder_test.xml?view=diff&rev=521399&r1=521398&r2=521399
==============================================================================
--- activemq/camel/trunk/camel-spring/src/test/resources/org/apache/camel/spring/spring_route_builder_test.xml (original)
+++ activemq/camel/trunk/camel-spring/src/test/resources/org/apache/camel/spring/spring_route_builder_test.xml Thu Mar 22 11:33:54 2007
@@ -86,22 +86,20 @@
                 .otherwise().to("queue:d");
      -->
     <routeBuilder id="buildSimpleRouteWithChoice" xmlns="http://activemq.apache.org/camel/schema/camel-1.0.xsd">
-       <!-- 
        <route>
          <from uri="queue:a"/>
          <choice>
              <when>
                  <predicate>
                     <header name="foo"/>
-                    <equalTo value="bar"/>
+                    <isEqualTo value="bar"/>
                  </predicate>
                  <to uri="queue:b"/>
              </when>
-             
              <when>
                  <predicate>
                     <header name="foo"/>
-                    <equalTo value="cheese"/>
+                    <isEqualTo value="cheese"/>
                  </predicate>
                  <to uri="queue:c"/>
              </when>
@@ -110,40 +108,35 @@
              </otherwise>
          </choice>
        </route>
-        -->
     </routeBuilder>
 
     <!-- 
-        from("queue:a").filter(headerEquals("foo", "bar")).to("queue:b");
+        from("queue:a").filter(header("foo").isEqualTo("bar")).to("queue:b");
      -->
     <routeBuilder id="buildSimpleRouteWithHeaderPredicate" xmlns="http://activemq.apache.org/camel/schema/camel-1.0.xsd">
-    <!-- 
        <route>
          <from uri="queue:a"/>
          <filter>
              <predicate>
                 <header name="foo"/>
-                <equalTo value="bar"/>
+                <isEqualTo value="bar"/>
              </predicate>
          </filter>
          <to uri="queue:b"/>
        </route>
-     -->
     </routeBuilder>
 
     <!-- 
         from("queue:a").to("queue:tap", "queue:b");
      -->
     <routeBuilder id="buildWireTap" xmlns="http://activemq.apache.org/camel/schema/camel-1.0.xsd">
-    <!-- 
        <route>
          <from uri="queue:a"/>
          <to>
             <uri>queue:tap</uri>
-            <uri>queue:a</uri>
+            <uri>queue:b</uri>
          </to>
        </route>
-     -->
     </routeBuilder>
 
 </beans>