Author: cschneider
Date: Wed Jun 27 10:20:29 2012
New Revision: 1354406

URL: http://svn.apache.org/viewvc?rev=1354406&view=rev
Log: (empty)

Added:
    camel/trunk/components/camel-dynamicep/   (with props)
    camel/trunk/components/camel-dynamicep/ReadMe.txt
    camel/trunk/components/camel-dynamicep/pom.xml
    camel/trunk/components/camel-dynamicep/src/
    camel/trunk/components/camel-dynamicep/src/main/
    camel/trunk/components/camel-dynamicep/src/main/java/
    camel/trunk/components/camel-dynamicep/src/main/java/org/
    camel/trunk/components/camel-dynamicep/src/main/java/org/apache/
    camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/
    
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/
    
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicComponent.java
    
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicConsumer.java
    
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicEndpoint.java
    camel/trunk/components/camel-dynamicep/src/main/resources/
    camel/trunk/components/camel-dynamicep/src/main/resources/META-INF/
    camel/trunk/components/camel-dynamicep/src/main/resources/META-INF/services/
    
camel/trunk/components/camel-dynamicep/src/main/resources/META-INF/services/org/
    
camel/trunk/components/camel-dynamicep/src/main/resources/META-INF/services/org/apache/
    
camel/trunk/components/camel-dynamicep/src/main/resources/META-INF/services/org/apache/camel/
    
camel/trunk/components/camel-dynamicep/src/main/resources/META-INF/services/org/apache/camel/component/
    
camel/trunk/components/camel-dynamicep/src/main/resources/META-INF/services/org/apache/camel/component/dynamicep
    camel/trunk/components/camel-dynamicep/src/test/
    camel/trunk/components/camel-dynamicep/src/test/java/
    camel/trunk/components/camel-dynamicep/src/test/java/org/
    camel/trunk/components/camel-dynamicep/src/test/java/org/apache/
    camel/trunk/components/camel-dynamicep/src/test/java/org/apache/camel/
    
camel/trunk/components/camel-dynamicep/src/test/java/org/apache/camel/camel_dynamicep/
    
camel/trunk/components/camel-dynamicep/src/test/java/org/apache/camel/camel_dynamicep/DynamicComponentTest.java
    camel/trunk/components/camel-dynamicep/src/test/resources/
    
camel/trunk/components/camel-dynamicep/src/test/resources/dynamicep_manual_test.xml
    camel/trunk/components/camel-dynamicep/src/test/resources/log4j.properties
Modified:
    camel/trunk/components/pom.xml

Propchange: camel/trunk/components/camel-dynamicep/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Jun 27 10:20:29 2012
@@ -0,0 +1,4 @@
+.classpath
+.project
+.settings
+target

Added: camel/trunk/components/camel-dynamicep/ReadMe.txt
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-dynamicep/ReadMe.txt?rev=1354406&view=auto
==============================================================================
--- camel/trunk/components/camel-dynamicep/ReadMe.txt (added)
+++ camel/trunk/components/camel-dynamicep/ReadMe.txt Wed Jun 27 10:20:29 2012
@@ -0,0 +1,12 @@
+Dynamic Endpoint Component
+==========================
+
+Provides a component that can install a dynamic number of consumers.
+
+Example:
+
+from("dynamicep:file:/test,jetty:http://localhost:9000";).to("log:test");
+
+This route listens on both file:/test as well as jetty:http://localhost:900. 
Any messages coming in will be forwarded to the rest of the route.
+As the list of endpoints can come from a configuration this allows to 
configure at runtime on which endpoints the route should listen.
+ 
\ No newline at end of file

Added: camel/trunk/components/camel-dynamicep/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-dynamicep/pom.xml?rev=1354406&view=auto
==============================================================================
--- camel/trunk/components/camel-dynamicep/pom.xml (added)
+++ camel/trunk/components/camel-dynamicep/pom.xml Wed Jun 27 10:20:29 2012
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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. -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+
+       <modelVersion>4.0.0</modelVersion>
+
+       <parent>
+               <groupId>org.apache.camel</groupId>
+               <artifactId>camel-parent</artifactId>
+               <version>2.11-SNAPSHOT</version>
+               <relativePath>../../parent</relativePath>
+       </parent>
+
+       <artifactId>dynamicep</artifactId>
+       <name>Camel :: Dynamic Endpoint</name>
+       <description>Supports a list of dynamically configurable endpoint in 
the from part of a route</description>
+
+       <packaging>bundle</packaging>
+
+       <properties>
+               
<camel.osgi.export.pkg>org.apache.camel.dynamicep</camel.osgi.export.pkg>
+       </properties>
+
+       <dependencies>
+               <dependency>
+                       <groupId>org.apache.camel</groupId>
+                       <artifactId>camel-core</artifactId>
+               </dependency>
+
+               <!-- for testing -->
+               <dependency>
+                       <groupId>org.apache.camel</groupId>
+                       <artifactId>camel-test</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.camel</groupId>
+                       <artifactId>camel-jetty</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <!-- logging -->
+               <dependency>
+                       <groupId>org.slf4j</groupId>
+                       <artifactId>slf4j-api</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.slf4j</groupId>
+                       <artifactId>slf4j-log4j12</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>log4j</groupId>
+                       <artifactId>log4j</artifactId>
+                       <scope>test</scope>
+               </dependency>
+       </dependencies>
+
+       <!-- <build> -->
+       <!-- <defaultGoal>install</defaultGoal> -->
+
+       <!-- <plugins> -->
+       <!-- <plugin> -->
+       <!-- <groupId>org.apache.maven.plugins</groupId> -->
+       <!-- <artifactId>maven-compiler-plugin</artifactId> -->
+       <!-- <version>2.3.2</version> -->
+       <!-- <configuration> -->
+       <!-- <source>1.6</source> -->
+       <!-- <target>1.6</target> -->
+       <!-- </configuration> -->
+       <!-- </plugin> -->
+       <!-- <plugin> -->
+       <!-- <groupId>org.apache.felix</groupId> -->
+       <!-- <artifactId>maven-bundle-plugin</artifactId> -->
+       <!-- <version>2.3.7</version> -->
+       <!-- <extensions>true</extensions> -->
+       <!-- <configuration> -->
+       <!-- <instructions> -->
+       <!-- 
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
 -->
+       <!-- <Export-Package></Export-Package> -->
+       <!-- </instructions> -->
+       <!-- </configuration> -->
+       <!-- </plugin> -->
+       <!-- </plugins> -->
+       <!-- </build> -->
+</project>

Added: 
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicComponent.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicComponent.java?rev=1354406&view=auto
==============================================================================
--- 
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicComponent.java
 (added)
+++ 
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicComponent.java
 Wed Jun 27 10:20:29 2012
@@ -0,0 +1,39 @@
+/**
+ * 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.dynamicep;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.impl.DefaultComponent;
+
+/**
+ * Represents the component that manages {@link DynamicEndpoint}.
+ */
+public class DynamicComponent extends DefaultComponent {
+
+    public Endpoint createEndpoint(String uri) throws Exception {
+        Endpoint endpoint = new DynamicEndpoint(uri, this);
+        return endpoint;
+    }
+
+    @Override
+    protected Endpoint createEndpoint(String uri, String remaining, 
Map<String, Object> parameters) throws Exception {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}

Added: 
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicConsumer.java?rev=1354406&view=auto
==============================================================================
--- 
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicConsumer.java
 (added)
+++ 
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicConsumer.java
 Wed Jun 27 10:20:29 2012
@@ -0,0 +1,69 @@
+/**
+ * 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.dynamicep;
+
+
+import java.net.URLDecoder;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Processor;
+import org.apache.camel.impl.DefaultConsumer;
+
+/**
+ * Parses the endpoint uri and creates one consumer for each
+ * endpopint to listen on
+ */
+public class DynamicConsumer extends DefaultConsumer {
+    Set<Consumer> consumers;
+
+    public DynamicConsumer(DynamicEndpoint endpoint, Processor processor) {
+        super(endpoint, processor);
+        consumers = new HashSet<Consumer>();
+        String uris = 
endpoint.getEndpointUri().substring("dynamicep://".length());
+        String[] uriAr = uris.split(",|%2C");
+        for (String epUri : uriAr) {
+            try {
+                epUri = URLDecoder.decode(epUri, "UTF-8");
+                Endpoint ep = 
this.getEndpoint().getCamelContext().getEndpoint(epUri);            
+                Consumer consumer = ep.createConsumer(getProcessor());
+                consumers.add(consumer);
+            } catch (Exception e) {
+                throw new RuntimeException("Error initializing endpoint 
dynamic endpoint from " + uris  + " at " + epUri, e);
+            }
+        }
+    }
+
+    @Override
+    protected void doStart() throws Exception {
+        super.doStart();
+        for (Consumer consumer : consumers) {
+            consumer.start();
+        }
+    }
+
+    @Override
+    protected void doStop() throws Exception {
+        for (Consumer consumer : consumers) {
+            consumer.stop();
+        }
+        super.doStop();
+    }
+    
+}

Added: 
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicEndpoint.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicEndpoint.java?rev=1354406&view=auto
==============================================================================
--- 
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicEndpoint.java
 (added)
+++ 
camel/trunk/components/camel-dynamicep/src/main/java/org/apache/camel/dynamicep/DynamicEndpoint.java
 Wed Jun 27 10:20:29 2012
@@ -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.dynamicep;
+
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.impl.DefaultEndpoint;
+
+/**
+ * Dynamic Endpoint 
+ * 
+ * Allows to create a list of consumers that feed into the same route.
+ * Example: from("dynamicep:jms:myQueue,file:myDir").to("log:test)
+ * 
+ * As it is possible to use properties in the endpoint definition this
+ * allows to define a dynamical list of endpoints a route should listen on
+ */
+public class DynamicEndpoint extends DefaultEndpoint {
+
+    public DynamicEndpoint() {
+    }
+
+    public DynamicEndpoint(String uri, DynamicComponent component) {
+        super(uri, component);
+    }
+
+    @SuppressWarnings("deprecation")
+    public DynamicEndpoint(String endpointUri) {
+        super(endpointUri);
+    }
+
+    public Producer createProducer() throws Exception {
+        throw new IllegalArgumentException("This component only supports 
consumers");
+    }
+
+    public Consumer createConsumer(Processor processor) throws Exception {
+        return new DynamicConsumer(this, processor);
+    }
+
+    public boolean isSingleton() {
+        return true;
+    }
+ 
+}

Added: 
camel/trunk/components/camel-dynamicep/src/main/resources/META-INF/services/org/apache/camel/component/dynamicep
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-dynamicep/src/main/resources/META-INF/services/org/apache/camel/component/dynamicep?rev=1354406&view=auto
==============================================================================
--- 
camel/trunk/components/camel-dynamicep/src/main/resources/META-INF/services/org/apache/camel/component/dynamicep
 (added)
+++ 
camel/trunk/components/camel-dynamicep/src/main/resources/META-INF/services/org/apache/camel/component/dynamicep
 Wed Jun 27 10:20:29 2012
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+class=org.apache.camel.dynamicep.DynamicComponent

Added: 
camel/trunk/components/camel-dynamicep/src/test/java/org/apache/camel/camel_dynamicep/DynamicComponentTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-dynamicep/src/test/java/org/apache/camel/camel_dynamicep/DynamicComponentTest.java?rev=1354406&view=auto
==============================================================================
--- 
camel/trunk/components/camel-dynamicep/src/test/java/org/apache/camel/camel_dynamicep/DynamicComponentTest.java
 (added)
+++ 
camel/trunk/components/camel-dynamicep/src/test/java/org/apache/camel/camel_dynamicep/DynamicComponentTest.java
 Wed Jun 27 10:20:29 2012
@@ -0,0 +1,48 @@
+/**
+ * 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.camel_dynamicep;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+/**
+ * Shows the list parsing works and the , as well as %2C is accepted as 
separators.
+ * Also shows that two endpoints can feed the same route.
+ */
+public class DynamicComponentTest extends CamelTestSupport {
+
+    @Test
+    public void testDynamic() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMinimumMessageCount(2);
+        template.sendBody("direct:test1", "Test");
+        template.sendBody("direct:test2", "Test2");
+        assertMockEndpointsSatisfied();
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() {
+                from("dynamicep:file:test,direct:test1%2Cdirect%3Atest2")
+                  .to("mock:result");
+            }
+        };
+    }
+}

Added: 
camel/trunk/components/camel-dynamicep/src/test/resources/dynamicep_manual_test.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-dynamicep/src/test/resources/dynamicep_manual_test.xml?rev=1354406&view=auto
==============================================================================
--- 
camel/trunk/components/camel-dynamicep/src/test/resources/dynamicep_manual_test.xml
 (added)
+++ 
camel/trunk/components/camel-dynamicep/src/test/resources/dynamicep_manual_test.xml
 Wed Jun 27 10:20:29 2012
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 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. -->
+
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";>
+<!-- Manual test that can be deployed into Karaf to check and demo the 
dynamicep component -->
+
+    <camelContext xmlns="http://camel.apache.org/schema/blueprint"; id="simple">
+        <route>
+            <from uri="dynamicep:timer:simple?period=5000,file:/test2"/>
+            <setBody>
+                <simple>Hello World ${in.body}</simple>
+            </setBody>
+            <to uri="stream:out"/>
+        </route>
+    </camelContext>
+
+</blueprint>

Added: 
camel/trunk/components/camel-dynamicep/src/test/resources/log4j.properties
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-dynamicep/src/test/resources/log4j.properties?rev=1354406&view=auto
==============================================================================
--- camel/trunk/components/camel-dynamicep/src/test/resources/log4j.properties 
(added)
+++ camel/trunk/components/camel-dynamicep/src/test/resources/log4j.properties 
Wed Jun 27 10:20:29 2012
@@ -0,0 +1,16 @@
+
+#
+# The logging properties used
+#
+log4j.rootLogger=INFO, out
+
+# uncomment the following line to turn on Camel debugging
+#log4j.logger.org.apache.camel=DEBUG
+
+# CONSOLE appender not used by default
+log4j.appender.out=org.apache.log4j.ConsoleAppender
+log4j.appender.out.layout=org.apache.log4j.PatternLayout
+log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n
+#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - 
%m%n
+
+log4j.throwableRenderer=org.apache.log4j.EnhancedThrowableRenderer
\ No newline at end of file

Modified: camel/trunk/components/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/pom.xml?rev=1354406&r1=1354405&r2=1354406&view=diff
==============================================================================
--- camel/trunk/components/pom.xml (original)
+++ camel/trunk/components/pom.xml Wed Jun 27 10:20:29 2012
@@ -71,6 +71,7 @@
     <module>camel-csv</module>
     <module>camel-dns</module>
     <module>camel-dozer</module>
+    <module>camel-dynamicep</module>
     <module>camel-eclipse</module>
     <module>camel-ejb</module>
     <module>camel-eventadmin</module>


Reply via email to