summaryrefslogtreecommitdiffstats
path: root/java/sca/modules
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-09-22 16:11:11 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-09-22 16:11:11 +0000
commit86163b4ee4d80014e063e01add2f69b77cdf63a0 (patch)
treeb259eebfedf80fbb453d88fe354c27b922940caa /java/sca/modules
parent399df0e96559b977ef2a880f5f81b0f0eaac189c (diff)
Add logic to apply the xpath against the implementation composites
Add a more complicated test case git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@817714 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules')
-rw-r--r--java/sca/modules/policy-builder/META-INF/MANIFEST.MF1
-rw-r--r--java/sca/modules/policy-builder/src/main/java/org/apache/tuscany/sca/policy/builder/impl/PolicyAttachmentBuilderImpl.java12
-rw-r--r--java/sca/modules/policy-builder/src/test/java/org/apache/tuscany/sca/policy/builder/impl/PolicyAttachmentTestCase.java89
-rw-r--r--java/sca/modules/policy-builder/src/test/resources/org/apache/tuscany/sca/policy/builder/impl/definitions.xml4
4 files changed, 89 insertions, 17 deletions
diff --git a/java/sca/modules/policy-builder/META-INF/MANIFEST.MF b/java/sca/modules/policy-builder/META-INF/MANIFEST.MF
index 5651b19418..346659a341 100644
--- a/java/sca/modules/policy-builder/META-INF/MANIFEST.MF
+++ b/java/sca/modules/policy-builder/META-INF/MANIFEST.MF
@@ -11,6 +11,7 @@ Import-Package: javax.xml.namespace,
javax.xml.xpath,
org.apache.tuscany.sca.assembly;version="2.0.0",
org.apache.tuscany.sca.assembly.builder;version="2.0.0",
+ org.apache.tuscany.sca.assembly.builder.impl;version="2.0.0";resolution:=optional,
org.apache.tuscany.sca.common.xml.dom;version="2.0.0",
org.apache.tuscany.sca.common.xml.stax;version="2.0.0",
org.apache.tuscany.sca.common.xml.xpath;version="2.0.0",
diff --git a/java/sca/modules/policy-builder/src/main/java/org/apache/tuscany/sca/policy/builder/impl/PolicyAttachmentBuilderImpl.java b/java/sca/modules/policy-builder/src/main/java/org/apache/tuscany/sca/policy/builder/impl/PolicyAttachmentBuilderImpl.java
index ecd8bfc10b..335e677329 100644
--- a/java/sca/modules/policy-builder/src/main/java/org/apache/tuscany/sca/policy/builder/impl/PolicyAttachmentBuilderImpl.java
+++ b/java/sca/modules/policy-builder/src/main/java/org/apache/tuscany/sca/policy/builder/impl/PolicyAttachmentBuilderImpl.java
@@ -33,7 +33,9 @@ import javax.xml.stream.XMLStreamWriter;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
+import org.apache.tuscany.sca.assembly.Component;
import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.Implementation;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
import org.apache.tuscany.sca.common.xml.dom.DOMHelper;
@@ -93,6 +95,16 @@ public class PolicyAttachmentBuilderImpl implements CompositeBuilder {
* @throws Exception
*/
private Composite applyXPath(Composite composite, Definitions definitions, Monitor monitor) throws Exception {
+ // Recursively apply the xpath against the composites referenced by <implementation.composite>
+ for (Component component : composite.getComponents()) {
+ Implementation impl = component.getImplementation();
+ if (impl instanceof Composite) {
+ Composite patched = applyXPath((Composite)impl, definitions, monitor);
+ if (patched != impl) {
+ component.setImplementation(patched);
+ }
+ }
+ }
// First write the composite into a DOM document so that we can apply the xpath
StringWriter sw = new StringWriter();
XMLStreamWriter writer = staxHelper.createXMLStreamWriter(sw);
diff --git a/java/sca/modules/policy-builder/src/test/java/org/apache/tuscany/sca/policy/builder/impl/PolicyAttachmentTestCase.java b/java/sca/modules/policy-builder/src/test/java/org/apache/tuscany/sca/policy/builder/impl/PolicyAttachmentTestCase.java
index d8c39ae65e..1c2a0dcb0f 100644
--- a/java/sca/modules/policy-builder/src/test/java/org/apache/tuscany/sca/policy/builder/impl/PolicyAttachmentTestCase.java
+++ b/java/sca/modules/policy-builder/src/test/java/org/apache/tuscany/sca/policy/builder/impl/PolicyAttachmentTestCase.java
@@ -19,22 +19,35 @@
package org.apache.tuscany.sca.policy.builder.impl;
+import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
+import javax.xml.namespace.QName;
import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.Base;
import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint;
+import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
+import org.apache.tuscany.sca.assembly.builder.impl.CompositeCloneBuilderImpl;
+import org.apache.tuscany.sca.assembly.builder.impl.CompositeIncludeBuilderImpl;
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
import org.apache.tuscany.sca.core.UtilityExtensionPoint;
import org.apache.tuscany.sca.definitions.Definitions;
import org.apache.tuscany.sca.monitor.DefaultMonitorFactory;
import org.apache.tuscany.sca.monitor.Monitor;
import org.apache.tuscany.sca.monitor.MonitorFactory;
+import org.junit.BeforeClass;
import org.junit.Test;
/**
@@ -44,13 +57,20 @@ import org.junit.Test;
*/
public class PolicyAttachmentTestCase {
- private StAXArtifactProcessor<Object> staxProcessor;
- private Monitor monitor;
+ private static StAXArtifactProcessor<Object> staxProcessor;
+ private static Monitor monitor;
- @Test
- public void testBuild() throws Exception {
- DefaultExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
- XMLInputFactory inputFactory = XMLInputFactory.newInstance();
+ private static ExtensionPointRegistry extensionPoints;
+ private static XMLInputFactory inputFactory;
+ private static AssemblyFactory assemblyFactory;
+ private static BuilderExtensionPoint builders;
+
+ @BeforeClass
+ public static void init() throws Exception {
+ extensionPoints = new DefaultExtensionPointRegistry();
+ FactoryExtensionPoint factories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
+ assemblyFactory = factories.getFactory(AssemblyFactory.class);
+ inputFactory = factories.getFactory(XMLInputFactory.class);
// Create a monitor
UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class);
MonitorFactory monitorFactory = new DefaultMonitorFactory();
@@ -63,24 +83,63 @@ public class PolicyAttachmentTestCase {
staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, null, monitor);
staxProcessors.addArtifactProcessor(new TestPolicyProcessor());
- URL url = getClass().getResource("test_definitions.xml");
+ builders = extensionPoints.getExtensionPoint(BuilderExtensionPoint.class);
+ }
+
+ @Test
+ public void testBuild() throws Exception {
+ Definitions definitions = load("test_definitions.xml");
+ Composite composite = load("Calculator.composite");
+
+ PolicyAttachmentBuilderImpl builder = new PolicyAttachmentBuilderImpl(extensionPoints);
+ builder.build(composite, definitions, monitor);
+ }
+
+ private <T> T load(String file) throws IOException, XMLStreamException, ContributionReadException {
+ URL url = getClass().getResource(file);
InputStream urlStream = url.openStream();
XMLStreamReader reader = inputFactory.createXMLStreamReader(urlStream);
reader.nextTag();
- Definitions definitions = (Definitions)staxProcessor.read(reader);
+ T model = (T)staxProcessor.read(reader);
reader.close();
+ return model;
+ }
- url = getClass().getResource("Calculator.composite");
- urlStream = url.openStream();
- reader = inputFactory.createXMLStreamReader(urlStream);
- reader.nextTag();
+ @Test
+ public void testComplexBuild() throws Exception {
+ Definitions definitions = load("definitions.xml");
+ Composite composite1 = load("Composite1.composite");
+ Composite composite2 = load("Composite2.composite");
+ Composite composite3 = load("Composite3.composite");
+ Composite composite4 = load("Composite4.composite");
+ composite1.getIncludes().clear();
+ composite1.getIncludes().add(composite3);
- Composite composite = (Composite)staxProcessor.read(reader);
- reader.close();
+ composite1.getComponent("Component1B").setImplementation(composite4);
+ composite2.getComponent("Component2B").setImplementation(composite4);
+
+ Composite domainComposite = assemblyFactory.createComposite();
+ domainComposite.setName(new QName(Base.SCA11_NS, ""));
+ domainComposite.getIncludes().add(composite1);
+ domainComposite.getIncludes().add(composite2);
+
+ CompositeBuilder includeBuilder = new CompositeIncludeBuilderImpl();
+ CompositeBuilder cloneBuilder = new CompositeCloneBuilderImpl();
+
+ /*
+ CompositeBuilder includeBuilder =
+ builders.getCompositeBuilder("org.apache.tuscany.sca.assembly.builder.CompositeIncludeBuilder");
+ CompositeBuilder cloneBuilder =
+ builders.getCompositeBuilder("org.apache.tuscany.sca.assembly.builder.CompositeCloneBuilder");
+ */
+
+ includeBuilder.build(domainComposite, definitions, monitor);
+ cloneBuilder.build(domainComposite, definitions, monitor);
PolicyAttachmentBuilderImpl builder = new PolicyAttachmentBuilderImpl(extensionPoints);
- builder.build(composite, definitions, monitor);
+ builder.build(domainComposite, definitions, monitor);
+
}
}
diff --git a/java/sca/modules/policy-builder/src/test/resources/org/apache/tuscany/sca/policy/builder/impl/definitions.xml b/java/sca/modules/policy-builder/src/test/resources/org/apache/tuscany/sca/policy/builder/impl/definitions.xml
index a168cbcd38..fe76d0038a 100644
--- a/java/sca/modules/policy-builder/src/test/resources/org/apache/tuscany/sca/policy/builder/impl/definitions.xml
+++ b/java/sca/modules/policy-builder/src/test/resources/org/apache/tuscany/sca/policy/builder/impl/definitions.xml
@@ -24,7 +24,7 @@
xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200903">
<policySet name="PolicySet1" appliesTo="sca:implementation.java"
- attachTo = "//composite[@name='Composite1' or @name='Composite2']">
+ attachTo = "//composite[@name='']">
</policySet>
<policySet name="PolicySet2" appliesTo="sca:implementation.java"
@@ -32,7 +32,7 @@
</policySet>
<policySet name="PolicySet3" appliesTo="sca:binding.ws"
- attachTo = "//sca:component[URIRef('Component2B/Component4A)]">
+ attachTo = "//sca:component[sca:URIRef('Component2B/Component4A')]">
</policySet>
</definitions> \ No newline at end of file