summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-10-12 23:45:39 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-10-12 23:45:39 +0000
commit9b83ee182114c288675c2249da652df93a105dfe (patch)
treead1bf20ac7c1133b383d960dad3d17362b4d5184
parentd3937102e3ee45a413aaf1f3aa19020d23d8b721 (diff)
Add PolicyBuilder to the builder extension point
Use QName as the key to index and look up builders git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@824540 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BindingBuilder.java8
-rw-r--r--java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/BuilderExtensionPoint.java26
-rw-r--r--java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/DefaultBuilderExtensionPoint.java170
-rw-r--r--java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/ImplementationBuilder.java8
-rw-r--r--java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/PolicyBuilder.java62
-rw-r--r--java/sca/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/WebServiceBindingBuilder.java6
-rw-r--r--java/sca/modules/binding-ws-wsdlgen/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.BindingBuilder2
-rw-r--r--java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java3
-rw-r--r--java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentReferenceBindingBuilderImpl.java2
-rw-r--r--java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentServiceBindingBuilderImpl.java2
-rw-r--r--java/sca/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java65
-rw-r--r--java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/ServiceReferenceImpl.java2
-rw-r--r--java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDeclarationParser.java28
-rw-r--r--java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementation.java2
-rw-r--r--java/sca/modules/implementation-spring/src/main/java/org/apache/tuscany/sca/implementation/spring/SpringImplementationBuilder.java7
-rw-r--r--java/sca/modules/implementation-spring/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder2
-rw-r--r--java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/WebImplementation.java5
-rw-r--r--java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationBuilder.java6
-rw-r--r--java/sca/modules/implementation-web/src/main/java/org/apache/tuscany/sca/implementation/web/impl/WebImplementationImpl.java3
-rw-r--r--java/sca/modules/implementation-web/src/main/resources/META-INF/services/org.apache.tuscany.sca.assembly.builder.ImplementationBuilder2
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