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