You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by ed...@apache.org on 2009/04/29 00:13:16 UTC

svn commit: r769564 - /tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java

Author: edwardsmj
Date: Tue Apr 28 22:13:15 2009
New Revision: 769564

URL: http://svn.apache.org/viewvc?rev=769564&view=rev
Log:
Fix to NodeImpl for TUSCANY-2989 - now resolves a supplied composite with an absolute URI outside any contribution against the first supplied contribution.

Modified:
    tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java

Modified: tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java?rev=769564&r1=769563&r2=769564&view=diff
==============================================================================
--- tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java (original)
+++ tuscany/java/sca/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/NodeImpl.java Tue Apr 28 22:13:15 2009
@@ -48,6 +48,9 @@
 import org.apache.tuscany.sca.assembly.CompositeService;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilderExtensionPoint;
+// Added MJE 28/04/2009
+import org.apache.tuscany.sca.assembly.xml.CompositeDocumentProcessor;
+//
 import org.apache.tuscany.sca.contribution.Artifact;
 import org.apache.tuscany.sca.contribution.Contribution;
 import org.apache.tuscany.sca.contribution.ContributionFactory;
@@ -140,6 +143,8 @@
     private WorkScheduler workScheduler;
     private Contribution systemContribution;
     private Definitions systemDefinitions;
+    // Added MJE 28/04/2009
+    private URLArtifactProcessor<Composite> compositeDocumentProcessor;
 
     /**
      * Constructs a new SCA node.
@@ -374,6 +379,10 @@
         // Create contribution content processor
         URLArtifactProcessorExtensionPoint docProcessorExtensions = extensionPoints.getExtensionPoint(URLArtifactProcessorExtensionPoint.class);
         contributionProcessor = docProcessorExtensions.getProcessor(Contribution.class);
+        
+        // Added MJE 28/04/2009
+        // Create Composite Document processor
+        compositeDocumentProcessor = docProcessorExtensions.getProcessor(Composite.class);
 
         // Get the model resolvers
         modelResolvers = extensionPoints.getExtensionPoint(ModelResolverExtensionPoint.class);
@@ -546,6 +555,8 @@
 
         composite = configuration.getComposite();
 
+        // If a composite was not originally supplied when the Node was created, pick one of the deployable 
+        // composites from the supplied contributions.  Note: throws an exception if none can be found. 
         if (composite == null) {
             setDefaultComposite(configuration, workspace);
         }
@@ -557,11 +568,9 @@
         compositeFile.setURI(composite.getURI());
         for (Contribution contribution: workspace.getContributions()) {
             ModelResolver resolver = contribution.getModelResolver();
-//            for (Artifact artifact : contribution.getArtifacts()){
-//                logger.log(Level.INFO,"artifact - " + artifact.getURI());
-//            }
+
             Artifact resolvedArtifact = resolver.resolveModel(Artifact.class, compositeFile);
-//            if (!resolvedArtifact.isUnresolved() && resolvedArtifact.getModel() instanceof Composite) {
+            if (!resolvedArtifact.isUnresolved() && resolvedArtifact.getModel() instanceof Composite) {
 
                 if (!composite.isUnresolved()) {
 
@@ -576,12 +585,29 @@
                     composite = (Composite)resolvedArtifact.getModel();
                 }
                 found = true;
-    //            break;
-  //          }
-        }
-//        if (!found) {
-//            throw new IllegalArgumentException("Composite not found: " + composite.getURI());
-//        }
+                break;
+            } // end if
+        } // end for
+
+        if (!found) {
+        	// If the composite was not found, then it must be a separate composite file outside any of the contributions
+        	// - a "composite by value" - this requires its URI to be absolute and pointing at the composite file itself.
+        	// First read in the composite file to create a composite model object...
+        	URI compositeURI = new URI(composite.getURI());
+        	URL compositeURL = compositeURI.toURL();
+        	composite = compositeDocumentProcessor.read(compositeURL, compositeURI, compositeURL);
+        	if( composite == null ) {
+        		 throw new IllegalArgumentException("Composite not found: " + compositeURI);
+        	}
+        	
+        	// Resolve the "composite by value" against the FIRST contribution
+        	Contribution contribution = workspace.getContributions().get(0);
+        	ModelResolver resolver = contribution.getModelResolver();
+        	compositeProcessor.resolve(composite, resolver);
+            if( composite.isUnresolved() ) {
+            	throw new IllegalArgumentException("Could not resolve composite: " + compositeURI + " in contribution " + contribution.getURI() );
+            }
+        } // end if
 
         // Build the composite and wire the components included in it
         compositeBuilder.build(composite, systemDefinitions, monitor);
@@ -760,7 +786,7 @@
      * Sets a default composite by using any deployable one.
      */
     private void setDefaultComposite(ConfiguredNodeImplementation configuration, Workspace workspace) {
-        // just use the first deployable composte
+        // just use the first deployable composite
         for (Contribution contribution : workspace.getContributions()) {
             for (Composite c : contribution.getDeployables()) {
                 composite = assemblyFactory.createComposite();