Author: rfeng
Date: Mon Oct 12 23:45:39 2009
New Revision: 824540

URL: http://svn.apache.org/viewvc?rev=824540&view=rev
Log:
Add PolicyBuilder to the builder extension point
Use QName as the key to index and look up builders

Added:
    
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/PolicyBuilder.java
   (with props)
Modified:
    
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BindingBuilder.java
    
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java
    
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java
    
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ImplementationBuilder.java
    
tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java
    
tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.BindingBuilder
    
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
    
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferenceBindingBuilderImpl.java
    
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentServiceBindingBuilderImpl.java
    
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
    
tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java
    
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclarationParser.java
    
tuscany/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java
    
tuscany/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java
    
tuscany/java/sca/modules/implementation-spring/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder
    
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java
    
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationBuilder.java
    
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java
    
tuscany/java/sca/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder

Modified: 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BindingBuilder.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BindingBuilder.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BindingBuilder.java
 (original)
+++ 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BindingBuilder.java
 Mon Oct 12 23:45:39 2009
@@ -19,6 +19,8 @@
 
 package org.apache.tuscany.sca.assembly.builder;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.Contract;
@@ -39,6 +41,10 @@
      */
     void build(Component component, Contract contract, B binding, Monitor 
monitor);
 
-    Class<B> getModelType();
+    /**
+     * Get QName of the binding type
+     * @return
+     */
+    QName getBindingType();
 
 }

Modified: 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java
 (original)
+++ 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java
 Mon Oct 12 23:45:39 2009
@@ -19,6 +19,8 @@
 
 package org.apache.tuscany.sca.assembly.builder;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.Implementation;
 
@@ -63,7 +65,7 @@
      * @param bindingType
      * @return
      */
-    <B extends Binding> BindingBuilder<B> getBindingBuilder(Class<B> 
bindingType);
+    <B extends Binding> BindingBuilder<B> getBindingBuilder(QName bindingType);
 
     /**
      * Remove a binding builder
@@ -84,7 +86,7 @@
      * @param implementationType
      * @return
      */
-    <I extends Implementation> ImplementationBuilder<I> 
getImplementationBuilder(Class<I> implementationType);
+    <I extends Implementation> ImplementationBuilder<I> 
getImplementationBuilder(QName implementationType);
 
     /**
      * Remove an implementation builder
@@ -92,5 +94,25 @@
      * @param builder
      */
     <I extends Implementation> void 
removeImplementationBuilder(ImplementationBuilder<I> builder);
+    
+    /**
+     * Add a policy builder
+     * @param policyBuilder
+     */
+    void addPolicyBuilder(PolicyBuilder<?> policyBuilder);
 
+    /**
+     * Look up a Policy builder by the Policy type
+     * @param <P>
+     * @param policyType
+     * @return
+     */
+    <P> PolicyBuilder<P> getPolicyBuilder(QName policyType);
+
+    /**
+     * Remove a Policy builder
+     * @param <P>
+     * @param builder
+     */
+    <P> void removePolicyBuilder(PolicyBuilder<P> builder);
 }

Modified: 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java
 (original)
+++ 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java
 Mon Oct 12 23:45:39 2009
@@ -26,11 +26,13 @@
 import java.util.Map;
 
 import javax.xml.namespace.QName;
+import javax.xml.ws.EndpointReference;
 
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.Composite;
 import org.apache.tuscany.sca.assembly.Contract;
+import org.apache.tuscany.sca.assembly.Endpoint;
 import org.apache.tuscany.sca.assembly.Implementation;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.core.FactoryExtensionPoint;
@@ -38,6 +40,7 @@
 import org.apache.tuscany.sca.core.UtilityExtensionPoint;
 import org.apache.tuscany.sca.definitions.Definitions;
 import org.apache.tuscany.sca.extensibility.ServiceDeclaration;
+import org.apache.tuscany.sca.extensibility.ServiceDeclarationParser;
 import org.apache.tuscany.sca.extensibility.ServiceDiscovery;
 import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
 import org.apache.tuscany.sca.monitor.Monitor;
@@ -51,9 +54,11 @@
 
     private ExtensionPointRegistry registry;
     private final Map<String, CompositeBuilder> builders = new HashMap<String, 
CompositeBuilder>();
-    private final Map<Class<?>, BindingBuilder> bindingBuilders = new 
HashMap<Class<?>, BindingBuilder>();
-    private final Map<Class<?>, ImplementationBuilder> implementationBuilders =
-        new HashMap<Class<?>, ImplementationBuilder>();
+    private final Map<QName, BindingBuilder> bindingBuilders = new 
HashMap<QName, BindingBuilder>();
+    private final Map<QName, ImplementationBuilder> implementationBuilders =
+        new HashMap<QName, ImplementationBuilder>();
+    private final Map<QName, PolicyBuilder> policyBuilders = new 
HashMap<QName, PolicyBuilder>();
+
     private boolean loaded;
 
     public DefaultBuilderExtensionPoint(ExtensionPointRegistry registry) {
@@ -69,7 +74,7 @@
         implementationBuilders.clear();
         loaded = false;
     }
-    
+
     public void addCompositeBuilder(CompositeBuilder builder) {
         builders.put(builder.getID(), builder);
     }
@@ -120,7 +125,7 @@
 
         for (ServiceDeclaration builderDeclaration : builderDeclarations) {
             BindingBuilder<?> builder = new 
LazyBindingBuilder(builderDeclaration);
-            bindingBuilders.put(builder.getModelType(), builder);
+            bindingBuilders.put(builder.getBindingType(), builder);
         }
 
         try {
@@ -131,59 +136,64 @@
 
         for (ServiceDeclaration builderDeclaration : builderDeclarations) {
             ImplementationBuilder<?> builder = new 
LazyImplementationBuilder(builderDeclaration);
-            implementationBuilders.put(builder.getModelType(), builder);
+            implementationBuilders.put(builder.getImplementationType(), 
builder);
         }
         
+        try {
+            builderDeclarations = 
serviceDiscovery.getServiceDeclarations(PolicyBuilder.class);
+        } catch (Exception e) {
+            throw new IllegalStateException(e);
+        }
+
+        for (ServiceDeclaration builderDeclaration : builderDeclarations) {
+            PolicyBuilder<?> builder = new 
LazyPolicyBuilder(builderDeclaration);
+            policyBuilders.put(builder.getPolicyType(), builder);
+        }
+
+
         loaded = true;
 
     }
 
     public void addBindingBuilder(BindingBuilder<?> bindingBuilder) {
-        bindingBuilders.put(bindingBuilder.getModelType(), bindingBuilder);
+        bindingBuilders.put(bindingBuilder.getBindingType(), bindingBuilder);
+    }
+    
+    public <B extends Binding> BindingBuilder<B> getBindingBuilder(QName 
bindingType) {
+        loadBuilders();
+        return (BindingBuilder<B>)bindingBuilders.get(bindingType);
+    }
+
+    public <B extends Binding> void removeBindingBuilder(BindingBuilder<B> 
builder) {
+        bindingBuilders.remove(builder.getBindingType());
     }
 
     public void addImplementationBuilder(ImplementationBuilder<?> 
implementationBuilder) {
-        implementationBuilders.put(implementationBuilder.getModelType(), 
implementationBuilder);
+        
implementationBuilders.put(implementationBuilder.getImplementationType(), 
implementationBuilder);
     }
 
-    public <B extends Binding> BindingBuilder<B> getBindingBuilder(Class<B> 
bindingType) {
+    public <I extends Implementation> ImplementationBuilder<I> 
getImplementationBuilder(QName implementationType) {
         loadBuilders();
-        if (bindingType.isInterface()) {
-            return (BindingBuilder<B>)bindingBuilders.get(bindingType);
-        }
-        Class<?>[] classes = bindingType.getInterfaces();
-        for (Class<?> i : classes) {
-            BindingBuilder<B> builder = 
(BindingBuilder<B>)bindingBuilders.get(i);
-            if (builder != null) {
-                return builder;
-            }
-        }
-        return null;
+        return 
(ImplementationBuilder<I>)implementationBuilders.get(implementationType);
     }
 
-    public <I extends Implementation> ImplementationBuilder<I> 
getImplementationBuilder(Class<I> implementationType) {
-        loadBuilders();
-        if (implementationType.isInterface()) {
-            return 
(ImplementationBuilder<I>)implementationBuilders.get(implementationType);
-        }
-        Class<?>[] classes = implementationType.getInterfaces();
-        for (Class<?> i : classes) {
-            ImplementationBuilder<I> builder = 
(ImplementationBuilder<I>)implementationBuilders.get(i);
-            if (builder != null) {
-                return builder;
-            }
-        }
-        return null;
+    public <I extends Implementation> void 
removeImplementationBuilder(ImplementationBuilder<I> builder) {
+        implementationBuilders.remove(builder.getImplementationType());
     }
 
-    public <B extends Binding> void removeBindingBuilder(BindingBuilder<B> 
builder) {
-        bindingBuilders.remove(builder.getModelType());
+    public void addPolicyBuilder(PolicyBuilder<?> policyBuilder) {
+        policyBuilders.put(policyBuilder.getPolicyType(), policyBuilder);
     }
 
-    public <I extends Implementation> void 
removeImplementationBuilder(ImplementationBuilder<I> builder) {
-        implementationBuilders.remove(builder.getModelType());
+    public <B> PolicyBuilder<B> getPolicyBuilder(QName policyType) {
+        loadBuilders();
+        return (PolicyBuilder<B>)policyBuilders.get(policyType);
     }
 
+    public <B> void removePolicyBuilder(PolicyBuilder<B> builder) {
+        policyBuilders.remove(builder.getPolicyType());
+    }
+    
     /**
      * A wrapper around a composite builder allowing lazy
      * loading and initialization of implementation providers.
@@ -219,9 +229,9 @@
         }
 
         public Composite build(Composite composite,
-                          Definitions definitions,
-                          Map<QName, List<String>> bindingBaseURIs,
-                          Monitor monitor) throws CompositeBuilderException {
+                               Definitions definitions,
+                               Map<QName, List<String>> bindingBaseURIs,
+                               Monitor monitor) throws 
CompositeBuilderException {
             return ((DeployedCompositeBuilder)getBuilder()).build(composite, 
definitions, bindingBaseURIs, monitor);
         }
 
@@ -257,9 +267,8 @@
 
     private class LazyBindingBuilder implements BindingBuilder {
         private ServiceDeclaration sd;
-        private String model;
         private BindingBuilder<?> builder;
-        private Class<?> modelType;
+        private QName qname;;
 
         /**
          * @param sd
@@ -267,24 +276,18 @@
         public LazyBindingBuilder(ServiceDeclaration sd) {
             super();
             this.sd = sd;
-            this.model = sd.getAttributes().get("model");
+            this.qname = 
ServiceDeclarationParser.getQName(sd.getAttributes().get("qname"));
         }
 
         public void build(Component component, Contract contract, Binding 
binding, Monitor monitor) {
             getBuilder().build(component, contract, binding, monitor);
         }
 
-        public Class getModelType() {
-            if (modelType == null) {
-                try {
-                    modelType = sd.loadClass(model);
-                } catch (Exception e) {
-                    throw new IllegalStateException(e);
-                }
-            }
-            return modelType;
+        public QName getBindingType() {
+            return qname;
         }
 
+
         private synchronized BindingBuilder getBuilder() {
             if (builder == null) {
                 try {
@@ -308,9 +311,8 @@
 
     private class LazyImplementationBuilder implements ImplementationBuilder {
         private ServiceDeclaration sd;
-        private String model;
         private ImplementationBuilder<?> builder;
-        private Class<?> modelType;
+        private QName qname;;
 
         /**
          * @param sd
@@ -318,34 +320,70 @@
         public LazyImplementationBuilder(ServiceDeclaration sd) {
             super();
             this.sd = sd;
-            this.model = sd.getAttributes().get("model");
+            this.qname = 
ServiceDeclarationParser.getQName(sd.getAttributes().get("qname"));
         }
 
         public void build(Component component, Implementation implementation, 
Monitor monitor) {
             getBuilder().build(component, implementation, monitor);
         }
 
-        public Class getModelType() {
-            if (modelType == null) {
+        public QName getImplementationType() {
+            return qname;
+        }
+
+        private synchronized ImplementationBuilder getBuilder() {
+            if (builder == null) {
                 try {
-                    modelType = sd.loadClass(model);
+                    Class<?> builderClass = sd.loadClass();
+                    try {
+                        Constructor<?> constructor = 
builderClass.getConstructor(ExtensionPointRegistry.class);
+                        builder = 
(ImplementationBuilder)constructor.newInstance(registry);
+                    } catch (NoSuchMethodException e) {
+                        Constructor<?> constructor = 
builderClass.getConstructor();
+                        builder = 
(ImplementationBuilder)constructor.newInstance();
+
+                    }
                 } catch (Exception e) {
                     throw new IllegalStateException(e);
                 }
             }
-            return modelType;
+            return builder;
         }
 
-        private synchronized ImplementationBuilder getBuilder() {
+    }
+
+    private class LazyPolicyBuilder implements PolicyBuilder {
+        private ServiceDeclaration sd;
+        private PolicyBuilder<?> builder;
+        private QName qname;;
+
+        /**
+         * @param sd
+         */
+        public LazyPolicyBuilder(ServiceDeclaration sd) {
+            super();
+            this.sd = sd;
+            this.qname = 
ServiceDeclarationParser.getQName(sd.getAttributes().get("qname"));
+        }
+
+        public void build(Component component, Implementation implementation, 
Definitions definitions, Monitor monitor) {
+            getBuilder().build(component, implementation, definitions, 
monitor);
+        }
+
+        public QName getPolicyType() {
+            return qname;
+        }
+        
+        private synchronized PolicyBuilder getBuilder() {
             if (builder == null) {
                 try {
                     Class<?> builderClass = sd.loadClass();
                     try {
                         Constructor<?> constructor = 
builderClass.getConstructor(ExtensionPointRegistry.class);
-                        builder = 
(ImplementationBuilder)constructor.newInstance(registry);
+                        builder = 
(PolicyBuilder)constructor.newInstance(registry);
                     } catch (NoSuchMethodException e) {
                         Constructor<?> constructor = 
builderClass.getConstructor();
-                        builder = 
(ImplementationBuilder)constructor.newInstance();
+                        builder = (PolicyBuilder)constructor.newInstance();
 
                     }
                 } catch (Exception e) {
@@ -355,6 +393,14 @@
             return builder;
         }
 
+        public void build(Endpoint endpoint, Definitions definitions, Monitor 
monitor) {
+            getBuilder().build(endpoint, definitions, monitor);
+        }
+
+        public void build(org.apache.tuscany.sca.assembly.EndpointReference 
endpointReference, Definitions definitions, Monitor monitor) {
+            getBuilder().build(endpointReference, definitions, monitor);
+        }
+
     }
 
 }

Modified: 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ImplementationBuilder.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ImplementationBuilder.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ImplementationBuilder.java
 (original)
+++ 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ImplementationBuilder.java
 Mon Oct 12 23:45:39 2009
@@ -19,6 +19,8 @@
 
 package org.apache.tuscany.sca.assembly.builder;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.Implementation;
 import org.apache.tuscany.sca.monitor.Monitor;
@@ -38,6 +40,10 @@
      */
     void build(Component component, I implmentation, Monitor monitor);
 
-    Class<I> getModelType();
+    /**
+     * Get the QName of the implementation type
+     * @return
+     */
+    QName getImplementationType();
 
 }

Added: 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/PolicyBuilder.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/PolicyBuilder.java?rev=824540&view=auto
==============================================================================
--- 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/PolicyBuilder.java
 (added)
+++ 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/PolicyBuilder.java
 Mon Oct 12 23:45:39 2009
@@ -0,0 +1,62 @@
+/*
+ * 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.assembly.builder;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.assembly.Implementation;
+import org.apache.tuscany.sca.definitions.Definitions;
+import org.apache.tuscany.sca.monitor.Monitor;
+
+/**
+ * A builder that is contributed by a specific policy languange to validate 
the configurations
+ * for SCA endpoints, endpoint references and component implementations
+ */
+public interface PolicyBuilder<T> {
+    QName getPolicyType();
+
+    /**
+     * Build (and validate) the policy settings on the endpoint
+     * @param endpoint
+     * @param definitions 
+     * @param monitor
+     */
+    void build(Endpoint endpoint, Definitions definitions, Monitor monitor);
+
+    /**
+     * Build (and validate) the policy settings on the endpoint reference
+     * @param endpointReference
+     * @param definitions 
+     * @param monitor
+     */
+    void build(EndpointReference endpointReference, Definitions definitions, 
Monitor monitor);
+
+    /**
+     * Build (and validate) the policy settings on the component implementation
+     * @param component
+     * @param implementation
+     * @param definitions 
+     * @param monitor
+     */
+    void build(Component component, Implementation implementation, Definitions 
definitions, Monitor monitor);
+}

Propchange: 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/PolicyBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/PolicyBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java
 (original)
+++ 
tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java
 Mon Oct 12 23:45:39 2009
@@ -19,6 +19,8 @@
 
 package org.apache.tuscany.sca.binding.ws.wsdlgen;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.Contract;
 import org.apache.tuscany.sca.assembly.builder.BindingBuilder;
@@ -46,8 +48,8 @@
         BindingWSDLGenerator.generateWSDL(component, contract, binding, 
extensionPoints, monitor);
     }
 
-    public Class<WebServiceBinding> getModelType() {
-        return WebServiceBinding.class;
+    public QName getBindingType() {
+        return WebServiceBinding.TYPE;
     }
 
 }

Modified: 
tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.BindingBuilder
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.BindingBuilder?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.BindingBuilder
 (original)
+++ 
tuscany/java/sca/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.BindingBuilder
 Mon Oct 12 23:45:39 2009
@@ -14,4 +14,4 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License. 
-org.apache.tuscany.sca.binding.ws.wsdlgen.WebServiceBindingBuilder;model=org.apache.tuscany.sca.binding.ws.WebServiceBinding
+org.apache.tuscany.sca.binding.ws.wsdlgen.WebServiceBindingBuilder;qname=http://docs.oasis-open.org/ns/opencsa/sca/200903#binding.ws

Modified: 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
 (original)
+++ 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
 Mon Oct 12 23:45:39 2009
@@ -65,7 +65,6 @@
 import org.apache.tuscany.sca.policy.ExtensionType;
 import org.apache.tuscany.sca.policy.PolicySubject;
 import org.w3c.dom.Document;
-import org.w3c.dom.DocumentFragment;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.xml.sax.InputSource;
@@ -125,7 +124,7 @@
             // first carry out any implementation specific builder processing
             Implementation impl = component.getImplementation();
             if (impl != null) {
-                ImplementationBuilder builder = 
builders.getImplementationBuilder(impl.getClass());
+                ImplementationBuilder builder = 
builders.getImplementationBuilder(impl.getType());
                 if (builder != null) {
                     builder.build(component, impl, monitor);
                 }

Modified: 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferenceBindingBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferenceBindingBuilderImpl.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferenceBindingBuilderImpl.java
 (original)
+++ 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferenceBindingBuilderImpl.java
 Mon Oct 12 23:45:39 2009
@@ -62,7 +62,7 @@
         for (Component component : composite.getComponents()) {
             for (ComponentReference componentReference : 
component.getReferences()) {
                 for (Binding binding : componentReference.getBindings()) {
-                    BindingBuilder builder = 
builders.getBindingBuilder(binding.getClass());
+                    BindingBuilder builder = 
builders.getBindingBuilder(binding.getType());
                     if (builder != null) {
                         builder.build(component, componentReference, binding, 
monitor);
                     }

Modified: 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentServiceBindingBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentServiceBindingBuilderImpl.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentServiceBindingBuilderImpl.java
 (original)
+++ 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentServiceBindingBuilderImpl.java
 Mon Oct 12 23:45:39 2009
@@ -69,7 +69,7 @@
         for (Component component : composite.getComponents()) {
             for (ComponentService componentService : component.getServices()) {
                 for (Binding binding : componentService.getBindings()) {
-                    BindingBuilder builder = 
builders.getBindingBuilder(binding.getClass());
+                    BindingBuilder builder = 
builders.getBindingBuilder(binding.getType());
                     if (builder != null) {
                         builder.build(component, componentService, binding, 
monitor);
                     }

Modified: 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
 (original)
+++ 
tuscany/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
 Mon Oct 12 23:45:39 2009
@@ -19,9 +19,12 @@
 
 package org.apache.tuscany.sca.builder.impl;
 
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.ComponentReference;
@@ -36,11 +39,13 @@
 import org.apache.tuscany.sca.assembly.Service;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
+import org.apache.tuscany.sca.assembly.builder.PolicyBuilder;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.definitions.Definitions;
 import org.apache.tuscany.sca.monitor.Monitor;
 import org.apache.tuscany.sca.policy.Intent;
 import org.apache.tuscany.sca.policy.IntentMap;
+import org.apache.tuscany.sca.policy.PolicyExpression;
 import org.apache.tuscany.sca.policy.PolicySet;
 import org.apache.tuscany.sca.policy.PolicySubject;
 import org.apache.tuscany.sca.policy.Qualifier;
@@ -64,6 +69,7 @@
     public Composite build(Composite composite, Definitions definitions, 
Monitor monitor)
         throws CompositeBuilderException {
         computePolicies(composite, definitions, monitor);
+        buildPolicies(composite, definitions, monitor);
         return composite;
     }
 
@@ -407,4 +413,63 @@
             // How to deal with implementation level policySets/intents
         }
     }
+    
+    private Set<QName> getPolicyNames(PolicySubject subject) {
+        if (subject == null) {
+            return Collections.emptySet();
+        }
+        Set<QName> names = new HashSet<QName>();
+        for (PolicySet ps : subject.getPolicySets()) {
+            for (PolicyExpression exp : ps.getPolicies()) {
+                names.add(exp.getName());
+            }
+        }
+        return names;
+    }
+    
+    protected void buildPolicies(Composite composite, Definitions definitions, 
Monitor monitor) {
+
+        // compute policies recursively
+        for (Component component : composite.getComponents()) {
+            Implementation implementation = component.getImplementation();
+            if (implementation instanceof Composite) {
+                buildPolicies((Composite)implementation, definitions, monitor);
+            }
+        }
+
+        for (Component component : composite.getComponents()) {
+
+            for (ComponentService componentService : component.getServices()) {
+                for (Endpoint ep : componentService.getEndpoints()) {
+                    for (QName policyType : getPolicyNames(ep)) {
+                        PolicyBuilder builder = 
builders.getPolicyBuilder(policyType);
+                        if (builder != null) {
+                            builder.build(ep, definitions, monitor);
+                        }
+                    }
+                }
+            }
+
+            for (ComponentReference componentReference : 
component.getReferences()) {
+                for (EndpointReference epr : 
componentReference.getEndpointReferences()) {
+                    for (QName policyType : getPolicyNames(epr)) {
+                        PolicyBuilder builder = 
builders.getPolicyBuilder(policyType);
+                        if (builder != null) {
+                            builder.build(epr, definitions, monitor);
+                        }
+                    }
+                }
+            }
+
+            Implementation implementation = component.getImplementation();
+            if (implementation != null) {
+                for (QName policyType : getPolicyNames(implementation)) {
+                    PolicyBuilder builder = 
builders.getPolicyBuilder(policyType);
+                    if (builder != null) {
+                        builder.build(component, implementation, definitions, 
monitor);
+                    }
+                }
+            }
+        }
+    }
 }

Modified: 
tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java
 (original)
+++ 
tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java
 Mon Oct 12 23:45:39 2009
@@ -423,7 +423,7 @@
             
             Binding binding = endpointReference.getBinding();
             if (binding != null) {
-                BindingBuilder bindingBuilder = 
builders.getBindingBuilder(binding.getClass());
+                BindingBuilder bindingBuilder = 
builders.getBindingBuilder(binding.getType());
                 if (bindingBuilder != null) {
                     bindingBuilder.build(component, reference, 
endpointReference.getBinding(), null);
                 }

Modified: 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclarationParser.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclarationParser.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclarationParser.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclarationParser.java
 Mon Oct 12 23:45:39 2009
@@ -24,6 +24,8 @@
 import java.util.List;
 import java.util.Map;
 
+import javax.xml.namespace.QName;
+
 /**
  * Parser for the service descriptors. The syntax of the service declaration 
is similar with the OSGi
  * headers with the following exceptions:
@@ -260,5 +262,31 @@
         }
 
     }
+    
+    /**
+     * Returns a QName object from a QName expressed as {ns}name
+     * or ns#name.
+     *
+     * @param qname
+     * @return
+     */
+    public static QName getQName(String qname) {
+        if (qname == null) {
+            return null;
+        }
+        qname = qname.trim();
+        if (qname.startsWith("{")) {
+            int h = qname.indexOf('}');
+            if (h != -1) {
+                return new QName(qname.substring(1, h), qname.substring(h + 
1));
+            }
+        } else {
+            int h = qname.indexOf('#');
+            if (h != -1) {
+                return new QName(qname.substring(0, h), qname.substring(h + 
1));
+            }
+        }
+        return new QName(qname);
+    }
 
 }

Modified: 
tuscany/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java
 (original)
+++ 
tuscany/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java
 Mon Oct 12 23:45:39 2009
@@ -42,7 +42,7 @@
  * @version $Rev$ $Date$
  */
 public class SpringImplementation extends ImplementationImpl implements 
Implementation, Extensible {
-    private final static QName TYPE = new QName(SCA11_NS, 
"implementation.spring");
+    public final static QName TYPE = new QName(SCA11_NS, 
"implementation.spring");
     // The location attribute which points to the Spring application-context 
XML file
     private String location;
     // The application-context file as a Spring Resource

Modified: 
tuscany/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java
 (original)
+++ 
tuscany/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java
 Mon Oct 12 23:45:39 2009
@@ -19,6 +19,8 @@
 
 package org.apache.tuscany.sca.implementation.spring;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.builder.ImplementationBuilder;
 import org.apache.tuscany.sca.monitor.Monitor;
@@ -32,9 +34,8 @@
         implmentation.build(component);
     }
 
-    public Class<SpringImplementation> getModelType() {
-        // TODO Auto-generated method stub
-        return SpringImplementation.class;
+    public QName getImplementationType() {
+        return SpringImplementation.TYPE;
     }
 
 }

Modified: 
tuscany/java/sca/modules/implementation-spring/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-spring/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/implementation-spring/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder
 (original)
+++ 
tuscany/java/sca/modules/implementation-spring/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder
 Mon Oct 12 23:45:39 2009
@@ -14,4 +14,4 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License. 
-org.apache.tuscany.sca.implementation.spring.SpringImplementationBuilder;model=org.apache.tuscany.sca.implementation.spring.SpringImplementation
+org.apache.tuscany.sca.implementation.spring.SpringImplementationBuilder;qname=http://docs.oasis-open.org/ns/opencsa/sca/200903#implementation.spring

Modified: 
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java
 (original)
+++ 
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java
 Mon Oct 12 23:45:39 2009
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.sca.implementation.web;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.sca.assembly.Implementation;
 
 
@@ -26,7 +28,8 @@
  * The model representing an Web implementation in an SCA assembly model.
  */
 public interface WebImplementation extends Implementation {
-    
+    QName TYPE = new QName(SCA11_NS, "implementation.web");
+
     /**
      * Returns the webapp URI.
      * @return the webapp URI

Modified: 
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationBuilder.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationBuilder.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationBuilder.java
 (original)
+++ 
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationBuilder.java
 Mon Oct 12 23:45:39 2009
@@ -19,6 +19,8 @@
 
 package org.apache.tuscany.sca.implementation.web.impl;
 
+import javax.xml.namespace.QName;
+
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.builder.ImplementationBuilder;
 import org.apache.tuscany.sca.implementation.web.WebImplementation;
@@ -34,8 +36,8 @@
 
     }
 
-    public Class<WebImplementation> getModelType() {
-        return WebImplementation.class;
+    public QName getImplementationType() {
+        return WebImplementation.TYPE;
     }
 
 }

Modified: 
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java
 (original)
+++ 
tuscany/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java
 Mon Oct 12 23:45:39 2009
@@ -22,8 +22,6 @@
 import java.util.Collections;
 import java.util.List;
 
-import javax.xml.namespace.QName;
-
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.ConstrainingType;
 import org.apache.tuscany.sca.assembly.Property;
@@ -38,7 +36,6 @@
  * The model representing an Web implementation in an SCA assembly model.
  */
 class WebImplementationImpl extends ImplementationImpl implements 
WebImplementation {
-    private static final QName TYPE = new QName(SCA11_NS, 
"implementation.web");
 
     private List<Property> properties = new ArrayList<Property>();
     private List<Reference> references = new ArrayList<Reference>();

Modified: 
tuscany/java/sca/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder?rev=824540&r1=824539&r2=824540&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder
 (original)
+++ 
tuscany/java/sca/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder
 Mon Oct 12 23:45:39 2009
@@ -14,4 +14,4 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License. 
-org.apache.tuscany.sca.implementation.web.impl.WebImplementationBuilder;model=org.apache.tuscany.sca.implementation.web.WebImplementation
+org.apache.tuscany.sca.implementation.web.impl.WebImplementationBuilder;qname=http://docs.oasis-open.org/ns/opencsa/sca/200903#implementation.web


Reply via email to