diff options
Diffstat (limited to 'java')
20 files changed, 325 insertions, 86 deletions
diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BindingBuilder.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BindingBuilder.java index dbb1bab44b..4b875d9b34 100644 --- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BindingBuilder.java +++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BindingBuilder.java @@ -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 @@ public interface BindingBuilder<B extends Binding> { */ void build(Component component, Contract contract, B binding, Monitor monitor); - Class<B> getModelType(); + /** + * Get QName of the binding type + * @return + */ + QName getBindingType(); } diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java index 857b251a16..ae526b92a1 100644 --- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java +++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java @@ -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 @@ public interface BuilderExtensionPoint { * @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 @@ public interface BuilderExtensionPoint { * @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 @@ public interface BuilderExtensionPoint { * @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); } diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java index 2464fb77dc..d414913a12 100644 --- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java +++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java @@ -26,11 +26,13 @@ import java.util.List; 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.LifeCycleListener; 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 @@ public class DefaultBuilderExtensionPoint implements BuilderExtensionPoint, Life 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 @@ public class DefaultBuilderExtensionPoint implements BuilderExtensionPoint, Life implementationBuilders.clear(); loaded = false; } - + public void addCompositeBuilder(CompositeBuilder builder) { builders.put(builder.getID(), builder); } @@ -120,7 +125,7 @@ public class DefaultBuilderExtensionPoint implements BuilderExtensionPoint, Life for (ServiceDeclaration builderDeclaration : builderDeclarations) { BindingBuilder<?> builder = new LazyBindingBuilder(builderDeclaration); - bindingBuilders.put(builder.getModelType(), builder); + bindingBuilders.put(builder.getBindingType(), builder); } try { @@ -131,59 +136,64 @@ public class DefaultBuilderExtensionPoint implements BuilderExtensionPoint, Life 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 class DefaultBuilderExtensionPoint implements BuilderExtensionPoint, Life } 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 @@ public class DefaultBuilderExtensionPoint implements BuilderExtensionPoint, Life 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 class DefaultBuilderExtensionPoint implements BuilderExtensionPoint, Life 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 @@ public class DefaultBuilderExtensionPoint implements BuilderExtensionPoint, Life 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 class DefaultBuilderExtensionPoint implements BuilderExtensionPoint, Life 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 @@ public class DefaultBuilderExtensionPoint implements BuilderExtensionPoint, Life 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); + } + } } diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ImplementationBuilder.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ImplementationBuilder.java index 2c2b3c1cba..6790d0188b 100644 --- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ImplementationBuilder.java +++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ImplementationBuilder.java @@ -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 @@ public interface ImplementationBuilder<I extends Implementation> { */ void build(Component component, I implmentation, Monitor monitor); - Class<I> getModelType(); + /** + * Get the QName of the implementation type + * @return + */ + QName getImplementationType(); } diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/PolicyBuilder.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/PolicyBuilder.java new file mode 100644 index 0000000000..b22bef8951 --- /dev/null +++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/PolicyBuilder.java @@ -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); +} diff --git a/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java b/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java index b090549985..3d1ac356b7 100644 --- a/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java +++ b/java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java @@ -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 @@ public class WebServiceBindingBuilder implements BindingBuilder<WebServiceBindin BindingWSDLGenerator.generateWSDL(component, contract, binding, extensionPoints, monitor); } - public Class<WebServiceBinding> getModelType() { - return WebServiceBinding.class; + public QName getBindingType() { + return WebServiceBinding.TYPE; } } diff --git a/java/sca/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.BindingBuilder b/java/sca/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.BindingBuilder index cd9245401c..e7194dc72d 100644 --- a/java/sca/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.BindingBuilder +++ b/java/sca/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.BindingBuilder @@ -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
diff --git a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java index 971a64c91b..27d13442cd 100644 --- a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java +++ b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java @@ -65,7 +65,6 @@ import org.apache.tuscany.sca.monitor.MonitorFactory; 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 @@ public class ComponentBuilderImpl { // 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); } diff --git a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferenceBindingBuilderImpl.java b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferenceBindingBuilderImpl.java index f2b5f341e1..09d37cacb6 100644 --- a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferenceBindingBuilderImpl.java +++ b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferenceBindingBuilderImpl.java @@ -62,7 +62,7 @@ public class ComponentReferenceBindingBuilderImpl implements CompositeBuilder { 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); } diff --git a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentServiceBindingBuilderImpl.java b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentServiceBindingBuilderImpl.java index c2a4079598..7fe0689c23 100644 --- a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentServiceBindingBuilderImpl.java +++ b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentServiceBindingBuilderImpl.java @@ -69,7 +69,7 @@ public class ComponentServiceBindingBuilderImpl implements CompositeBuilder { 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); } diff --git a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java index b76bb20b99..d176db39d2 100644 --- a/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java +++ b/java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java @@ -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.Reference; 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 class CompositePolicyBuilderImpl extends BaseBuilderImpl implements Compo 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 @@ public class CompositePolicyBuilderImpl extends BaseBuilderImpl implements Compo // 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); + } + } + } + } + } } diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java index 2bf4199f92..b0bbae0278 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java @@ -423,7 +423,7 @@ public class ServiceReferenceImpl<B> implements ServiceReferenceExt<B> { 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); } diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclarationParser.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclarationParser.java index 537aac2e64..993f6c6338 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclarationParser.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclarationParser.java @@ -24,6 +24,8 @@ import java.util.HashMap; 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 @@ public class ServiceDeclarationParser { } } + + /** + * 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); + } } diff --git a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java index 547306d748..8081fb4911 100644 --- a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java +++ b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java @@ -42,7 +42,7 @@ import org.apache.tuscany.sca.runtime.RuntimeComponent; * @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 diff --git a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java index 121f1ca234..434b705bd9 100644 --- a/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java +++ b/java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java @@ -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 @@ public class SpringImplementationBuilder implements ImplementationBuilder<Spring implmentation.build(component); } - public Class<SpringImplementation> getModelType() { - // TODO Auto-generated method stub - return SpringImplementation.class; + public QName getImplementationType() { + return SpringImplementation.TYPE; } } diff --git a/java/sca/modules/implementation-spring/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder b/java/sca/modules/implementation-spring/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder index 346e2b757f..a47500d745 100644 --- a/java/sca/modules/implementation-spring/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder +++ b/java/sca/modules/implementation-spring/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder @@ -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
diff --git a/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java b/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java index 258ca32676..29c497485f 100644 --- a/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java +++ b/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java @@ -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 @@ import org.apache.tuscany.sca.assembly.Implementation; * 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 diff --git a/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationBuilder.java b/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationBuilder.java index 2c95337766..540b2f77b9 100644 --- a/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationBuilder.java +++ b/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationBuilder.java @@ -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 WebImplementationBuilder implements ImplementationBuilder<WebImplem } - public Class<WebImplementation> getModelType() { - return WebImplementation.class; + public QName getImplementationType() { + return WebImplementation.TYPE; } } diff --git a/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java b/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java index 9453eabbab..dfdb5e4e43 100644 --- a/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java +++ b/java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java @@ -22,8 +22,6 @@ import java.util.ArrayList; 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 @@ import org.apache.tuscany.sca.runtime.RuntimeComponent; * 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>(); diff --git a/java/sca/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder b/java/sca/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder index da2481a304..1290a86c99 100644 --- a/java/sca/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder +++ b/java/sca/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder @@ -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
|