Author: ningjiang
Date: Tue Jul  5 14:50:45 2011
New Revision: 1143084

URL: http://svn.apache.org/viewvc?rev=1143084&view=rev
Log:
CAMEL-4175 Enable Restlet servlet to be configured within a webapp

Modified:
    
camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java

Modified: 
camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java?rev=1143084&r1=1143083&r2=1143084&view=diff
==============================================================================
--- 
camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
 (original)
+++ 
camel/trunk/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/RestletComponent.java
 Tue Jul  5 14:50:45 2011
@@ -39,24 +39,34 @@ import org.slf4j.LoggerFactory;
 
 /**
  * A Camel component embedded Restlet that produces and consumes exchanges.
- *
- * @version 
+ * 
+ * @version
  */
 public class RestletComponent extends HeaderFilterStrategyComponent {
     private static final Logger LOG = 
LoggerFactory.getLogger(RestletComponent.class);
 
     private final Map<String, Server> servers = new HashMap<String, Server>();
     private final Map<String, MethodBasedRouter> routers = new HashMap<String, 
MethodBasedRouter>();
-    private final Component component = new Component();
-    
+    private final Component component;
+
+    public RestletComponent() {
+        this.component = new Component();
+    }
+
+    public RestletComponent(Component component) {
+        // Allow the Component to be injected, so that the RestletServlet may 
be
+        // configured within a webapp
+        this.component = component;
+    }
+
     @Override
     @SuppressWarnings({"unchecked", "rawtypes"})
     protected Endpoint createEndpoint(String uri, String remaining, Map 
parameters) throws Exception {
-        
+
         RestletEndpoint result = new RestletEndpoint(this, remaining);
         setEndpointHeaderFilterStrategy(result);
         setProperties(result, parameters);
-        
+
         // construct URI so we can use it to get the splitted information
         URI u = new URI(UnsafeUriCharactersEncoder.encode(remaining));
         String protocol = u.getScheme();
@@ -81,36 +91,36 @@ public class RestletComponent extends He
 
         return result;
     }
-    
+
     @Override
     protected void doStart() throws Exception {
         super.doStart();
         component.start();
     }
-    
+
     @Override
     protected void doStop() throws Exception {
         component.stop();
-        // routers map entries are removed as consumer stops and servers map 
+        // routers map entries are removed as consumer stops and servers map
         // is not touch so to keep in sync with component's servers
         super.doStop();
     }
-    
+
     @Override
     protected boolean useIntrospectionOnEndpoint() {
-        // we invoke setProperties ourselves so we can construct "user" uri on 
+        // we invoke setProperties ourselves so we can construct "user" uri on
         // on the remaining parameters
         return false;
     }
-    
+
     public void connect(RestletConsumer consumer) throws Exception {
         RestletEndpoint endpoint = (RestletEndpoint)consumer.getEndpoint();
         addServerIfNecessary(endpoint);
-        
+
         if (endpoint.getUriPattern() != null && 
endpoint.getUriPattern().length() > 0) {
             attachUriPatternToRestlet(endpoint.getUriPattern(), endpoint, 
consumer.getRestlet());
         }
-        
+
         if (endpoint.getRestletUriPatterns() != null) {
             for (String uriPattern : endpoint.getRestletUriPatterns()) {
                 attachUriPatternToRestlet(uriPattern, endpoint, 
consumer.getRestlet());
@@ -120,19 +130,19 @@ public class RestletComponent extends He
 
     public void disconnect(RestletConsumer consumer) throws Exception {
         RestletEndpoint endpoint = (RestletEndpoint)consumer.getEndpoint();
-        
+
         List<MethodBasedRouter> routers = new ArrayList<MethodBasedRouter>();
-        
+
         if (endpoint.getUriPattern() != null && 
endpoint.getUriPattern().length() > 0) {
             routers.add(getMethodRouter(endpoint.getUriPattern()));
         }
-        
+
         if (endpoint.getRestletUriPatterns() != null) {
             for (String uriPattern : endpoint.getRestletUriPatterns()) {
                 routers.add(getMethodRouter(uriPattern));
             }
         }
-        
+
         for (MethodBasedRouter router : routers) {
             if (endpoint.getRestletMethods() != null) {
                 Method[] methods = endpoint.getRestletMethods();
@@ -144,11 +154,12 @@ public class RestletComponent extends He
             }
 
             if (LOG.isDebugEnabled()) {
-                LOG.debug("Detached restlet uriPattern: {} method: {}", 
router.getUriPattern(), endpoint.getRestletMethod());
+                LOG.debug("Detached restlet uriPattern: {} method: {}", 
router.getUriPattern(),
+                          endpoint.getRestletMethod());
             }
         }
-    }    
-    
+    }
+
     private MethodBasedRouter getMethodRouter(String uriPattern) {
         synchronized (routers) {
             MethodBasedRouter result = routers.get(uriPattern);
@@ -158,34 +169,35 @@ public class RestletComponent extends He
                 routers.put(uriPattern, result);
             }
             return result;
-        }    
+        }
     }
-    
+
     private void addServerIfNecessary(RestletEndpoint endpoint) throws 
Exception {
         String key = buildKey(endpoint);
         Server server;
         synchronized (servers) {
             server = servers.get(key);
             if (server == null) {
-                server = 
component.getServers().add(Protocol.valueOf(endpoint.getProtocol()), 
endpoint.getPort());
+                server = 
component.getServers().add(Protocol.valueOf(endpoint.getProtocol()),
+                                                    endpoint.getPort());
                 servers.put(key, server);
                 LOG.debug("Added server: {}", key);
                 server.start();
             }
         }
     }
-    
+
     private static String buildKey(RestletEndpoint endpoint) {
         return endpoint.getHost() + ":" + endpoint.getPort();
     }
-    
+
     private void attachUriPatternToRestlet(String uriPattern, RestletEndpoint 
endpoint, Restlet target) {
         MethodBasedRouter router = getMethodRouter(uriPattern);
-        
+
         Map<String, String> realm = endpoint.getRestletRealm();
         if (realm != null && realm.size() > 0) {
-            ChallengeAuthenticator guard = new 
ChallengeAuthenticator(component.getContext().createChildContext(),
-                    ChallengeScheme.HTTP_BASIC, "Camel-Restlet Endpoint 
Realm");
+            ChallengeAuthenticator guard = new 
ChallengeAuthenticator(component.getContext()
+                .createChildContext(), ChallengeScheme.HTTP_BASIC, 
"Camel-Restlet Endpoint Realm");
             MapVerifier verifier = new MapVerifier();
             for (Map.Entry<String, String> entry : realm.entrySet()) {
                 verifier.getLocalSecrets().put(entry.getKey(), 
entry.getValue().toCharArray());
@@ -195,20 +207,21 @@ public class RestletComponent extends He
             target = guard;
             LOG.debug("Target has been set to guard: {}", guard);
         }
-        
+
         if (endpoint.getRestletMethods() != null) {
             Method[] methods = endpoint.getRestletMethods();
             for (Method method : methods) {
-                router.addRoute(method, target);   
+                router.addRoute(method, target);
                 LOG.debug("Attached restlet uriPattern: {} method: {}", 
uriPattern, method);
             }
         } else {
             router.addRoute(endpoint.getRestletMethod(), target);
             if (LOG.isDebugEnabled()) {
-                LOG.debug("Attached restlet uriPattern: {} method: {}", 
uriPattern, endpoint.getRestletMethod());
+                LOG.debug("Attached restlet uriPattern: {} method: {}", 
uriPattern,
+                          endpoint.getRestletMethod());
             }
         }
-        
+
         if (!router.hasBeenAttached()) {
             component.getDefaultHost().attach(uriPattern, router);
             LOG.debug("Attached methodRouter uriPattern: {}", uriPattern);
@@ -216,4 +229,3 @@ public class RestletComponent extends He
     }
 
 }
-


Reply via email to