summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/assembly/src/main/java
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 /java/sca/modules/assembly/src/main/java
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
Diffstat (limited to 'java/sca/modules/assembly/src/main/java')
-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
5 files changed, 208 insertions, 66 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);
+}