Author: antelder
Date: Fri Nov 27 08:58:06 2009
New Revision: 884790

URL: http://svn.apache.org/viewvc?rev=884790&view=rev
Log:
Change implementation-web to have an extension point to support pluggable 
clients instead of having impl-web-client be a replacement impl-web runtime

Added:
    
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/java/org/apache/tuscany/sca/implementation/web/client/JSClientExtensionPointImpl.java
    
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.web.runtime.ClientExtensionPoint
      - copied, changed from r884475, 
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory
    
tuscany/sca-java-2.x/trunk/modules/implementation-web-runtime/src/main/java/org/apache/tuscany/sca/implementation/web/runtime/ClientExtensionPoint.java
Removed:
    
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/java/org/apache/tuscany/sca/implementation/web/client/ClientImplementationProvider.java
    
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/java/org/apache/tuscany/sca/implementation/web/client/ClientProviderFactory.java
    
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory
Modified:
    
tuscany/sca-java-2.x/trunk/modules/implementation-web-runtime/src/main/java/org/apache/tuscany/sca/implementation/web/runtime/WebImplementationProviderFactory.java
    
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java
    
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java
    
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/xml/WebImplementationProcessor.java

Added: 
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/java/org/apache/tuscany/sca/implementation/web/client/JSClientExtensionPointImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/java/org/apache/tuscany/sca/implementation/web/client/JSClientExtensionPointImpl.java?rev=884790&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/java/org/apache/tuscany/sca/implementation/web/client/JSClientExtensionPointImpl.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/java/org/apache/tuscany/sca/implementation/web/client/JSClientExtensionPointImpl.java
 Fri Nov 27 08:58:06 2009
@@ -0,0 +1,72 @@
+/*
+ * 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.tuscany.sca.implementation.web.client;
+
+import java.util.List;
+
+import org.apache.tuscany.sca.assembly.ComponentReference;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.host.http.ServletHost;
+import org.apache.tuscany.sca.host.http.ServletHostExtensionPoint;
+import org.apache.tuscany.sca.implementation.web.WebImplementation;
+import org.apache.tuscany.sca.implementation.web.runtime.ClientExtensionPoint;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.ImplementationProvider;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+
+public class JSClientExtensionPointImpl implements ClientExtensionPoint {
+
+    private ServletHost servletHost;
+
+    public JSClientExtensionPointImpl(ExtensionPointRegistry extensionPoints) {
+        ServletHostExtensionPoint servletHosts = 
extensionPoints.getExtensionPoint(ServletHostExtensionPoint.class);
+        List<ServletHost> hosts = servletHosts.getServletHosts();
+        if (!hosts.isEmpty()) {
+            this.servletHost = hosts.get(0);
+        }
+    }
+    
+    public ImplementationProvider 
createImplementationProvider(RuntimeComponent component, WebImplementation 
implementation) {
+        ClientServlet clientServlet = new ClientServlet();
+        servletHost.addServletMapping(ClientServlet.SCRIPT_PATH, 
clientServlet);
+        servletHost.addServletMapping(ClientServlet.SCRIPT_PATH + "/" + 
component.getName() + "/*", clientServlet);
+
+        if (component.getReferences().size() > 0) {
+            for (ComponentReference cr : component.getReferences()) {
+                clientServlet.addService(cr, component);
+            }
+        }
+
+        return new ImplementationProvider() {
+            public Invoker createInvoker(RuntimeComponentService arg0, 
Operation arg1) {
+                return null;
+            }
+            public void start() {
+            }
+            public void stop() {
+            }
+            public boolean supportsOneWayInvocation() {
+                return false;
+            }
+        };
+    }
+}

Copied: 
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.web.runtime.ClientExtensionPoint
 (from r884475, 
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory)
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.web.runtime.ClientExtensionPoint?p2=tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.web.runtime.ClientExtensionPoint&p1=tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory&r1=884475&r2=884790&rev=884790&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.ImplementationProviderFactory
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/implementation-web-client/src/main/resources/META-INF/services/org.apache.tuscany.sca.implementation.web.runtime.ClientExtensionPoint
 Fri Nov 27 08:58:06 2009
@@ -16,7 +16,7 @@
 # under the License. 
 
 # Implementation class for the implementation extension
-org.apache.tuscany.sca.implementation.web.client.ClientProviderFactory;model=org.apache.tuscany.sca.implementation.web.WebImplementation;ranking=1234
+org.apache.tuscany.sca.implementation.web.client.JSClientExtensionPointImpl
 
 
 

Added: 
tuscany/sca-java-2.x/trunk/modules/implementation-web-runtime/src/main/java/org/apache/tuscany/sca/implementation/web/runtime/ClientExtensionPoint.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-web-runtime/src/main/java/org/apache/tuscany/sca/implementation/web/runtime/ClientExtensionPoint.java?rev=884790&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/implementation-web-runtime/src/main/java/org/apache/tuscany/sca/implementation/web/runtime/ClientExtensionPoint.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/implementation-web-runtime/src/main/java/org/apache/tuscany/sca/implementation/web/runtime/ClientExtensionPoint.java
 Fri Nov 27 08:58:06 2009
@@ -0,0 +1,30 @@
+/*
+ * 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.tuscany.sca.implementation.web.runtime;
+
+import org.apache.tuscany.sca.implementation.web.WebImplementation;
+import org.apache.tuscany.sca.provider.ImplementationProvider;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+
+public interface ClientExtensionPoint {
+
+    public ImplementationProvider 
createImplementationProvider(RuntimeComponent component, WebImplementation 
implementation);
+
+}

Modified: 
tuscany/sca-java-2.x/trunk/modules/implementation-web-runtime/src/main/java/org/apache/tuscany/sca/implementation/web/runtime/WebImplementationProviderFactory.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-web-runtime/src/main/java/org/apache/tuscany/sca/implementation/web/runtime/WebImplementationProviderFactory.java?rev=884790&r1=884789&r2=884790&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/implementation-web-runtime/src/main/java/org/apache/tuscany/sca/implementation/web/runtime/WebImplementationProviderFactory.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/implementation-web-runtime/src/main/java/org/apache/tuscany/sca/implementation/web/runtime/WebImplementationProviderFactory.java
 Fri Nov 27 08:58:06 2009
@@ -34,6 +34,7 @@
 public class WebImplementationProviderFactory implements 
ImplementationProviderFactory<WebImplementation> {
 
     private ServletHost servletHost;
+    private ClientExtensionPoint jsClient;
 
     public WebImplementationProviderFactory(ExtensionPointRegistry 
extensionPoints) {
         ServletHostExtensionPoint servletHosts = 
extensionPoints.getExtensionPoint(ServletHostExtensionPoint.class);
@@ -41,25 +42,33 @@
         if (!hosts.isEmpty()) {
             this.servletHost = hosts.get(0);
         }
+        
+        jsClient = 
extensionPoints.getExtensionPoint(ClientExtensionPoint.class);
     }
 
     public ImplementationProvider 
createImplementationProvider(RuntimeComponent component, WebImplementation 
implementation) {
         
servletHost.setAttribute("org.apache.tuscany.sca.implementation.web.RuntimeComponent",
 component);
         servletHost.setAttribute("org.oasisopen.sca.ComponentContext", new 
ComponentContextProxy(component));
 
-        return new ImplementationProvider() {
-            
-            public Invoker createInvoker(RuntimeComponentService arg0, 
Operation arg1) {
-                throw new UnsupportedOperationException("Components using 
implementation.web have no services");
-            }
-            public void start() {
-            }
-            public void stop() {
-            }
-            public boolean supportsOneWayInvocation() {
-                return false;
-            }
-        };
+        ImplementationProvider impl;
+        if (jsClient != null && implementation.getJSClient()) {
+            impl = jsClient.createImplementationProvider(component, 
implementation);
+        } else {
+            impl = new ImplementationProvider() {
+                
+                public Invoker createInvoker(RuntimeComponentService arg0, 
Operation arg1) {
+                    throw new UnsupportedOperationException("Components using 
implementation.web have no services");
+                }
+                public void start() {
+                }
+                public void stop() {
+                }
+                public boolean supportsOneWayInvocation() {
+                    return false;
+                }
+            };
+        }
+        return impl;
     }
     
     public Class<WebImplementation> getModelType() {

Modified: 
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java?rev=884790&r1=884789&r2=884790&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java
 Fri Nov 27 08:58:06 2009
@@ -42,4 +42,6 @@
      */
     void setWebURI(String webappURI);
 
+    boolean getJSClient();
+    void setJSClient(boolean jsCLient);
 }

Modified: 
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java?rev=884790&r1=884789&r2=884790&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java
 Fri Nov 27 08:58:06 2009
@@ -42,6 +42,7 @@
     private boolean unresolved;
 
     private String webURI;
+    private boolean jsClient = true;
 
     /**
      * Constructs a new Web implementation.
@@ -132,4 +133,12 @@
         return newProperty;
     }
 
+    public boolean getJSClient() {
+        return jsClient;
+    }
+
+    public void setJSClient(boolean jsClient) {
+        this.jsClient = jsClient;
+    }
+
 }

Modified: 
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/xml/WebImplementationProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/xml/WebImplementationProcessor.java?rev=884790&r1=884789&r2=884790&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/xml/WebImplementationProcessor.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/xml/WebImplementationProcessor.java
 Fri Nov 27 08:58:06 2009
@@ -81,6 +81,11 @@
             implementation.setURI(webURI);
         }
 
+        String jsClient = reader.getAttributeValue(Constants.SCA11_TUSCANY_NS, 
"jsClient");
+        if (jsClient != null) {
+            implementation.setJSClient(Boolean.parseBoolean(jsClient));
+        }
+
         // Skip to end element
         while (reader.hasNext()) {
             if (reader.next() == END_ELEMENT && 
IMPLEMENTATION_WEB.equals(reader.getName())) {


Reply via email to