You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2008/07/11 20:49:07 UTC

svn commit: r676047 - in /tuscany/java/sca: itest/validation/src/test/java/calculator/warning/NoMatchingBindingTestCase.java modules/node2-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java

Author: rfeng
Date: Fri Jul 11 11:49:07 2008
New Revision: 676047

URL: http://svn.apache.org/viewvc?rev=676047&view=rev
Log:
Resolve relative composite URIs against the contributions

Modified:
    tuscany/java/sca/itest/validation/src/test/java/calculator/warning/NoMatchingBindingTestCase.java
    tuscany/java/sca/modules/node2-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java

Modified: tuscany/java/sca/itest/validation/src/test/java/calculator/warning/NoMatchingBindingTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/itest/validation/src/test/java/calculator/warning/NoMatchingBindingTestCase.java?rev=676047&r1=676046&r2=676047&view=diff
==============================================================================
--- tuscany/java/sca/itest/validation/src/test/java/calculator/warning/NoMatchingBindingTestCase.java (original)
+++ tuscany/java/sca/itest/validation/src/test/java/calculator/warning/NoMatchingBindingTestCase.java Fri Jul 11 11:49:07 2008
@@ -46,8 +46,7 @@
     protected void setUp() throws Exception {
         SCANode2Factory nodeFactory = SCANode2Factory.newInstance();
         node =
-            nodeFactory.createSCANode(new File("src/main/resources/NoMatchingBinding/Calculator.composite").toURL()
-                .toString(), new SCAContribution("TestContribution", new File("src/main/resources/NoMatchingBinding")
+            nodeFactory.createSCANode("Calculator.composite", new SCAContribution("TestContribution", new File("src/main/resources/NoMatchingBinding")
                 .toURL().toString()));
 
         node.start();

Modified: tuscany/java/sca/modules/node2-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/node2-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java?rev=676047&r1=676046&r2=676047&view=diff
==============================================================================
--- tuscany/java/sca/modules/node2-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java (original)
+++ tuscany/java/sca/modules/node2-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java Fri Jul 11 11:49:07 2008
@@ -47,12 +47,14 @@
 import org.apache.tuscany.sca.assembly.ComponentService;
 import org.apache.tuscany.sca.assembly.Composite;
 import org.apache.tuscany.sca.assembly.CompositeService;
+import org.apache.tuscany.sca.contribution.Artifact;
 import org.apache.tuscany.sca.contribution.Contribution;
 import org.apache.tuscany.sca.contribution.ContributionFactory;
 import org.apache.tuscany.sca.contribution.ContributionMetadata;
 import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.contribution.service.ContributionService;
 import org.apache.tuscany.sca.contribution.service.util.FileHelper;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
@@ -489,12 +491,16 @@
             analyseProblems();
         }
         
-        // Resolve the metadata within the context of the first contribution
-        Contribution mainContribution = contributions.get(contributions.size() - 1);
+        // Resolve the metadata within the context of the contribution
         if (metadata != null) {
             StAXArtifactProcessor<ContributionMetadata> processor =
                 artifactProcessors.getProcessor(ContributionMetadata.class);
-            processor.resolve(metadata, mainContribution.getModelResolver());
+            for (Contribution c : contributions) {
+                processor.resolve(metadata, c.getModelResolver());
+                if (!metadata.isUnresolved()) {
+                    break;
+                }
+            }
             List<Composite> composites = metadata.getDeployables();
             configuration.setComposite(composites.get(0));
         }
@@ -505,21 +511,32 @@
         if (configuration.getComposite().getName() == null) {
             URI uri = URI.create(configuration.getComposite().getURI());
             if (uri.getScheme() == null) {
-                uri = new File(configuration.getComposite().getURI()).toURI();
+                // For relative URI, try to resolve it within the contributions
+                Artifact file = resolveCompositeArtifact(contributions, uri.toString());
+                if (file == null) {
+                    throw new IllegalArgumentException("Composite is not found in contributions: " + uri);
+                }
+                uri = URI.create(file.getLocation());
             }
             URL compositeURL = uri.toURL();
             logger.log(Level.INFO, "Loading composite: " + compositeURL);
             InputStream is = compositeURL.openStream();
             XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
             composite = compositeProcessor.read(reader);
+            reader.close();
         } else {
             composite = configuration.getComposite();
         }
 
         analyseProblems();
 
-        // Resolve it within the context of the first contribution
-        compositeProcessor.resolve(composite, mainContribution.getModelResolver());
+        // Resolve it within the context of the contribution
+        for (Contribution c : contributions) {
+            compositeProcessor.resolve(composite, c.getModelResolver());
+            if (!composite.isUnresolved()) {
+                break;
+            }
+        }
 
         analyseProblems();
 
@@ -543,6 +560,31 @@
 
         analyseProblems();
     }
+    
+    /**
+     * Search all contributions to resolve the relative composite URI
+     * @param contributions
+     * @param compositeURI
+     * @return
+     */
+    private Artifact resolveCompositeArtifact(List<Contribution> contributions, String compositeURI) {
+        ContributionFactory contributionFactory = modelFactories.getFactory(ContributionFactory.class);
+        // Remove the leading /
+        if (compositeURI != null && compositeURI.startsWith("/")) {
+            compositeURI = compositeURI.substring(1);
+        }
+        Artifact compositeFile = contributionFactory.createArtifact();
+        compositeFile.setUnresolved(true);
+        compositeFile.setURI(compositeURI);
+        for (Contribution c : contributions) {
+            ModelResolver resolver = c.getModelResolver();
+            Artifact resolved = resolver.resolveModel(Artifact.class, compositeFile);
+            if (resolved != null && !resolved.isUnresolved()) {
+                return resolved;
+            }
+        }
+        return null;
+    }
 
     private void analyseProblems() throws Exception {