Author: edwardsmj
Date: Fri May  8 12:02:46 2009
New Revision: 772950

URL: http://svn.apache.org/viewvc?rev=772950&view=rev
Log:
Updates and additions to add preResolve phase to contribution processing (See 
TUSCANY-3012)

Modified:
    
tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionContentProcessor.java

Modified: 
tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionContentProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionContentProcessor.java?rev=772950&r1=772949&r2=772950&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionContentProcessor.java
 (original)
+++ 
tuscany/java/sca/modules/workspace-impl/src/main/java/org/apache/tuscany/sca/workspace/processor/impl/ContributionContentProcessor.java
 Fri May  8 12:02:46 2009
@@ -37,6 +37,7 @@
 import 
org.apache.tuscany.sca.contribution.processor.ExtensibleURLArtifactProcessor;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
 import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
+import 
org.apache.tuscany.sca.contribution.processor.ExtendedURLArtifactProcessor;
 import 
org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
 import org.apache.tuscany.sca.contribution.resolver.DefaultModelResolver;
 import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver;
@@ -56,7 +57,7 @@
  *
  * @version $Rev$ $Date$
  */
-public class ContributionContentProcessor implements 
URLArtifactProcessor<Contribution>{
+public class ContributionContentProcessor implements 
ExtendedURLArtifactProcessor<Contribution>{
     private ContributionFactory contributionFactory;
     private ModelResolverExtensionPoint modelResolvers;
     private FactoryExtensionPoint modelFactories;
@@ -65,6 +66,8 @@
     // private UtilityExtensionPoint utilities;
     private Monitor monitor;
     private ContributionScannerExtensionPoint scanners;
+    // Marks pre-resolve phase completed
+    private boolean preResolved = false;
 
     public ContributionContentProcessor(ExtensionPointRegistry 
extensionPoints, StAXArtifactProcessor<Object> extensionProcessor, Monitor 
monitor) {
         this.modelFactories = 
extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
@@ -173,27 +176,32 @@
         return contribution;
     }
 
-    public void resolve(Contribution contribution, ModelResolver resolver) 
throws ContributionResolveException {
-
+    /**
+     * A pre-resolution step, which is required for Contributions to handle 
the resolution of imports and exports so that
+     * at resolve time, imports can be followed to exports and anything 
exported that is required can be resolved on demand
+     * without the need to have already resolved the whole of the Contribution 
containing the export
+     * @param contribution - the Contribution
+     * @param resolver - the Resolver to use
+     * @throws ContributionResolveException
+     */
+    public void preResolve(Contribution contribution, ModelResolver resolver) 
throws ContributionResolveException {
         // Resolve the contribution model itself
         ModelResolver contributionResolver = contribution.getModelResolver();
         contribution.setUnresolved(false);
         contributionResolver.addModel(contribution);
 
-        // Resolve imports and exports
-        for (Export export: contribution.getExports()) {
-            if (export instanceof DefaultExport) {
+        // Resolve Exports
+        resolveExports(contribution, contributionResolver);
+        // Resolve Imports
+        resolveImports(contribution, contributionResolver);
+        
+        preResolved = true;
+    } // end method preResolve
+    
+    public void resolve(Contribution contribution, ModelResolver resolver) 
throws ContributionResolveException {
 
-                // Initialize the default export's resolver
-                export.setModelResolver(contributionResolver);
-
-            } else {
-                extensionProcessor.resolve(export, contributionResolver);
-            }
-        }
-        for (Import import_: contribution.getImports()) {
-            extensionProcessor.resolve(import_, contributionResolver);
-        }
+       if( !preResolved ) preResolve( contribution, resolver);
+       ModelResolver contributionResolver = contribution.getModelResolver();
 
         // Resolve all artifact models
         for (Artifact artifact : contribution.getArtifacts()) {
@@ -215,7 +223,35 @@
             if (resolved != deployable) {
                 deployables.set(i, resolved);
             }
-        }
-    }
+        } // end for
+    } // end method resolve
+    
+    /**
+     * Resolves the Exports of the contribution
+     * @param contribution
+     * @param resolver
+     */
+    private void resolveExports(Contribution contribution, ModelResolver 
resolver) throws ContributionResolveException {
+       for (Export export: contribution.getExports()) {
+            if (export instanceof DefaultExport) {
+                // Initialize the default export's resolver
+                export.setModelResolver(resolver);
+            } else {
+                extensionProcessor.resolve(export, resolver);
+            } // end if
+        } // end for
+
+    } // end method resolveExports
+    
+    /**
+     * Resolves the Imports of the contribution
+     * @param contribution
+     * @param resolver
+     */
+    private void resolveImports(Contribution contribution, ModelResolver 
resolver) throws ContributionResolveException {
+        for (Import import_: contribution.getImports()) {
+            extensionProcessor.resolve(import_, resolver);
+        } // end for 
+    } // end method resolveImports
 
-}
+} // end class ContributionContentProcessor


Reply via email to