You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2010/07/03 08:23:46 UTC

svn commit: r960159 - in /tuscany/sca-java-2.x/trunk/modules/deployment/src/main/java/org/apache/tuscany/sca/deployment: Deployer.java impl/DeployerImpl.java

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();