Author: antelder
Date: Sat Jul  3 06:23:46 2010
New Revision: 960159

URL: http://svn.apache.org/viewvc?rev=960159&view=rev
Log:
Add a method to Deployer to resolve a contributions dependencies

Modified:
    
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/Deployer.java
    
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java

Modified: 
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/Deployer.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/Deployer.java?rev=960159&r1=960158&r2=960159&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/Deployer.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/Deployer.java
 Sat Jul  3 06:23:46 2010
@@ -193,4 +193,15 @@ public interface Deployer extends LifeCy
      * Get the system definitions   
      */
     Definitions getSystemDefinitions();  
+
+    /**
+     * Resolve a contributions dependencies
+     * 
+     * @param c
+     * @param allContributions
+     * @param monitor
+     * @throws ContributionResolveException
+     * @throws CompositeBuilderException
+     */
+    void resolve(Contribution c, List<Contribution> dependentContributions, 
Monitor monitor) throws ContributionResolveException, CompositeBuilderException;
 }

Modified: 
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java?rev=960159&r1=960158&r2=960159&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment/impl/DeployerImpl.java
 Sat Jul  3 06:23:46 2010
@@ -549,6 +549,79 @@ public class DeployerImpl implements Dep
 
         return domainComposite;
     }
+    
+    public void resolve(Contribution c, List<Contribution> 
dependentContributions, Monitor monitor) throws ContributionResolveException, 
CompositeBuilderException {
+        init();
+        List<Contribution> contributionList = new ArrayList<Contribution>();
+        contributionList.add(c);
+
+        Contribution systemContribution = cloneSystemContribution(monitor);
+        Definitions systemDefinitions = 
systemContribution.getArtifacts().get(0).getModel();
+        // Build an aggregated SCA definitions model. Must be done before we 
try and
+        // resolve any contributions or composites as they may depend on the 
full
+        // definitions.xml picture
+
+        // get all definitions.xml artifacts from contributions and aggregate
+        // into the system contribution. In turn add a default import into
+        // each contribution so that, for unresolved items, the resolution
+        // processing will look in the system contribution
+        ProcessorContext context = new ProcessorContext(monitor);
+        for (Contribution contribution : contributionList) {
+            monitor.pushContext("Contribution: " + contribution.getURI());
+            try {
+                // aggregate definitions
+                for (Artifact artifact : contribution.getArtifacts()) {
+                    if (!"META-INF/definitions.xml".equals(artifact.getURI())) 
{
+                        continue;
+                    }
+                    Object model = artifact.getModel();
+                    if (model instanceof Definitions) {
+                        try {
+                            monitor.pushContext("Definitions: " + 
artifact.getLocation());
+                            DefinitionsUtil.aggregate((Definitions)model, 
systemDefinitions, monitor);
+                        } finally {
+                            monitor.popContext();
+                        }                            
+                    }
+                }
+
+                // create a default import and wire it up to the system 
contribution
+                // model resolver. This is the trick that makes the resolution 
processing
+                // skip over to the system contribution if resolution is 
unsuccessful
+                // in the current contribution
+                DefaultImport defaultImport = 
contributionFactory.createDefaultImport();
+                
defaultImport.setModelResolver(systemContribution.getModelResolver());
+                contribution.getImports().add(defaultImport);
+            } finally {
+                monitor.popContext();
+            }
+        }
+
+        ExtensibleModelResolver modelResolver =
+            new ExtensibleModelResolver(new Contributions(contributionList), 
modelResolvers, modelFactories);
+
+        // now resolve and add the system contribution
+        contributionProcessor.resolve(systemContribution, modelResolver, 
context);
+        contributionList.add(systemContribution);
+
+        // pre-resolve the contributions
+        contributionsPreresolve(contributionList, modelResolver, context);
+
+        // Build the contribution dependencies
+        Set<Contribution> resolved = new HashSet<Contribution>();
+        
+        for (Contribution contribution : contributionList) {
+            buildDependencies(contribution, dependentContributions, monitor);
+
+            // Resolve contributions
+            for (Contribution dependency : contribution.getDependencies()) {
+                if (!resolved.contains(dependency)) {
+                    resolved.add(dependency);
+                    contributionProcessor.resolve(dependency, modelResolver, 
context);
+                }
+            }
+        }
+    }
 
     public Artifact loadArtifact(URI uri, URL location, Monitor monitor) 
throws ContributionReadException {
         init();


Reply via email to