Repository: camel
Updated Branches:
  refs/heads/master 018d9849e -> 1a26ccf58


[CAMEL-9333] KuraRouter should try to load XML routes from ConfigAdmin


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1a26ccf5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1a26ccf5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1a26ccf5

Branch: refs/heads/master
Commit: 1a26ccf58ddcf34fa04b13bff5fbce04b6f1ff6e
Parents: 018d984
Author: Henryk Konsek <hekon...@gmail.com>
Authored: Tue Nov 17 11:27:29 2015 +0100
Committer: Henryk Konsek <hekon...@gmail.com>
Committed: Tue Nov 17 11:27:58 2015 +0100

----------------------------------------------------------------------
 components/camel-kura/pom.xml                   |  5 ++++
 .../apache/camel/component/kura/KuraRouter.java | 22 ++++++++++++++
 .../camel/component/kura/KuraRouterTest.java    | 30 +++++++++++++++++++-
 .../camel-kura/src/test/resources/route.xml     |  6 ++++
 4 files changed, 62 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/1a26ccf5/components/camel-kura/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-kura/pom.xml b/components/camel-kura/pom.xml
index 4bf22e8..35580b9 100644
--- a/components/camel-kura/pom.xml
+++ b/components/camel-kura/pom.xml
@@ -71,6 +71,11 @@
             <artifactId>mockito-core</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
 </project>

http://git-wip-us.apache.org/repos/asf/camel/blob/1a26ccf5/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
----------------------------------------------------------------------
diff --git 
a/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
 
b/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
index b3f16ca..ea10ae1 100644
--- 
a/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
+++ 
b/components/camel-kura/src/main/java/org/apache/camel/component/kura/KuraRouter.java
@@ -16,14 +16,20 @@
  */
 package org.apache.camel.component.kura;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.core.osgi.OsgiDefaultCamelContext;
+import org.apache.camel.model.RoutesDefinition;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
+import org.osgi.service.cm.Configuration;
+import org.osgi.service.cm.ConfigurationAdmin;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -51,6 +57,16 @@ public abstract class KuraRouter extends RouteBuilder 
implements BundleActivator
             camelContext = createCamelContext();
 
             camelContext.addRoutes(this);
+            ConfigurationAdmin configurationAdmin = 
requiredService(ConfigurationAdmin.class);
+            Configuration camelKuraConfig = 
configurationAdmin.getConfiguration("kura.camel");
+            if (camelKuraConfig != null && camelKuraConfig.getProperties() != 
null) {
+                Object routePropertyValue = 
camelKuraConfig.getProperties().get(camelXmlRoutesProperty());
+                if (routePropertyValue != null) {
+                    InputStream routesXml = new 
ByteArrayInputStream(routePropertyValue.toString().getBytes());
+                    RoutesDefinition loadedRoutes = 
camelContext.loadRoutesDefinition(routesXml);
+                    camelContext.addRouteDefinitions(loadedRoutes.getRoutes());
+                }
+            }
 
             beforeStart(camelContext);
             log.debug("About to start Camel Kura router: {}", 
getClass().getName());
@@ -102,4 +118,10 @@ public abstract class KuraRouter extends RouteBuilder 
implements BundleActivator
         return (T) bundleContext.getService(reference);
     }
 
+    // Private helpers
+
+    private String camelXmlRoutesProperty() {
+        return "kura.camel." + bundleContext.getBundle().getSymbolicName() + 
".route";
+    }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/1a26ccf5/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
 
b/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
index 97822bd..b184af9 100644
--- 
a/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
+++ 
b/components/camel-kura/src/test/java/org/apache/camel/component/kura/KuraRouterTest.java
@@ -16,19 +16,26 @@
  */
 package org.apache.camel.component.kura;
 
+import java.util.Dictionary;
+import java.util.Hashtable;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.commons.io.IOUtils;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 
 import static org.mockito.BDDMockito.given;
 import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 
@@ -38,16 +45,22 @@ public class KuraRouterTest extends Assert {
 
     BundleContext bundleContext = mock(BundleContext.class, 
RETURNS_DEEP_STUBS);
 
+    ConfigurationAdmin configurationAdmin = mock(ConfigurationAdmin.class);
+
+    Configuration configuration = mock(Configuration.class);
+
     @Before
     public void before() throws Exception {
         
given(bundleContext.getBundle().getVersion().toString()).willReturn("version");
+        
given(bundleContext.getBundle().getSymbolicName()).willReturn("symbolic_name");
+        
given(bundleContext.getService(any(ServiceReference.class))).willReturn(configurationAdmin);
 
         router.start(bundleContext);
     }
 
     @After
     public void after() throws Exception {
-        router.start(bundleContext);
+        router.stop(bundleContext);
     }
 
     @Test
@@ -95,6 +108,21 @@ public class KuraRouterTest extends Assert {
         router.requiredService(ConfigurationAdmin.class);
     }
 
+    @Test
+    public void shouldLoadXmlRoutes() throws Exception {
+        // Given
+        
given(configurationAdmin.getConfiguration(anyString())).willReturn(configuration);
+        Dictionary<String, Object> properties = new Hashtable<>();
+        properties.put("kura.camel.symbolic_name.route", 
IOUtils.toString(getClass().getResource("/route.xml")));
+        given(configuration.getProperties()).willReturn(properties);
+
+        // When
+        router.start(router.bundleContext);
+
+        // Then
+        assertNotNull(router.camelContext.getRouteDefinition("loaded"));
+    }
+
     static class TestKuraRouter extends KuraRouter {
 
         @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/1a26ccf5/components/camel-kura/src/test/resources/route.xml
----------------------------------------------------------------------
diff --git a/components/camel-kura/src/test/resources/route.xml 
b/components/camel-kura/src/test/resources/route.xml
new file mode 100644
index 0000000..ca034ea
--- /dev/null
+++ b/components/camel-kura/src/test/resources/route.xml
@@ -0,0 +1,6 @@
+<routes xmlns="http://camel.apache.org/schema/spring";>
+    <route id="loaded">
+        <from uri="direct:bar"/>
+        <to uri="mock:bar"/>
+    </route>
+</routes>
\ No newline at end of file

Reply via email to