Author: jsdelfino
Date: Sat Jan  5 00:21:27 2008
New Revision: 609099

URL: http://svn.apache.org/viewvc?rev=609099&view=rev
Log:
Handle SCA contributions that don't contain an sca-contribution.xml file.

Modified:
    
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportExportListener.java
    
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/service/DefaultContributionListenerExtensionPoint.java

Modified: 
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportExportListener.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportExportListener.java?rev=609099&r1=609098&r2=609099&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportExportListener.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportExportListener.java
 Sat Jan  5 00:21:27 2008
@@ -20,14 +20,20 @@
 package org.apache.tuscany.sca.contribution.java.impl;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.ContributionFactory;
+import org.apache.tuscany.sca.contribution.DeployedArtifact;
 import org.apache.tuscany.sca.contribution.Export;
 import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.java.JavaExport;
 import org.apache.tuscany.sca.contribution.java.JavaImport;
 import 
org.apache.tuscany.sca.contribution.resolver.DefaultImportAllModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.contribution.service.ContributionListener;
 import org.apache.tuscany.sca.contribution.service.ContributionRepository;
 
@@ -39,7 +45,16 @@
  * @version $Rev$ $Date$
  */
 public class JavaImportExportListener implements ContributionListener {
-
+    
+    private ContributionFactory contributionFactory;
+    
+    /**
+     * Constructs a new JavaImportExportListener
+     */
+    public JavaImportExportListener(ModelFactoryExtensionPoint modelFactories) 
{
+        contributionFactory = 
modelFactories.getFactory(ContributionFactory.class);
+    }
+    
     /**
      * Initialize the import/export model resolvers
      * Export model resolvers are same as Contribution model resolver
@@ -49,6 +64,46 @@
      * match import/export for class loading.
      */
     public void contributionAdded(ContributionRepository repository, 
Contribution contribution) {
+        
+        // If the contribution does not contain sca-contribution.xml metadata
+        // (for example it's an existing JAR developed before SCA existed)
+        // export all its Java packages
+        ModelResolver modelResolver = contribution.getModelResolver();
+        
+        // Look for META-INF/sca-contribution.xml
+        DeployedArtifact artifact = 
contributionFactory.createDeployedArtifact();
+        artifact.setURI(Contribution.SCA_CONTRIBUTION_META);
+        artifact = modelResolver.resolveModel(DeployedArtifact.class, 
artifact);
+        if (artifact.getLocation() == null) {
+
+            // Look for META-INF/sca-contribution-generated.xml
+            artifact.setURI(Contribution.SCA_CONTRIBUTION_GENERATED_META);
+            artifact = modelResolver.resolveModel(DeployedArtifact.class, 
artifact);
+            if (artifact.getLocation() == null) {
+                
+                // No contribution metadata file was found, default to export 
all the
+                // Java packages found in the contribution
+                Set<String> packages = new HashSet<String>();
+                for (DeployedArtifact a: contribution.getArtifacts()) {
+                    String uri = a.getURI();
+                    if (uri.endsWith(".class")) {
+                        uri = uri.substring(0, uri.length() - 6);
+                        int d = uri.lastIndexOf('/');
+                        if (d != -1) {
+                            packages.add(uri.substring(0, d).replace('/', 
'.'));
+                        }
+                    }
+                }
+                
+                // Add Java export model objects for all the packages we found
+                for (String pkg: packages) {
+                    JavaExport export = new JavaExportImpl();
+                    export.setPackage(pkg);
+                    contribution.getExports().add(export);
+                }
+            }
+        }
+        
         // Initialize the contribution exports
         for (Export export: contribution.getExports()) {
             export.setModelResolver(contribution.getModelResolver());

Modified: 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/service/DefaultContributionListenerExtensionPoint.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/service/DefaultContributionListenerExtensionPoint.java?rev=609099&r1=609098&r2=609099&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/service/DefaultContributionListenerExtensionPoint.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/service/DefaultContributionListenerExtensionPoint.java
 Sat Jan  5 00:21:27 2008
@@ -20,10 +20,13 @@
 package org.apache.tuscany.sca.contribution.service;
 
 import java.io.IOException;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.util.ServiceDeclaration;
 import org.apache.tuscany.sca.contribution.util.ServiceDiscovery;
 
@@ -36,6 +39,15 @@
     
     private List<ContributionListener> listeners = new 
ArrayList<ContributionListener>();
     private boolean loadedListeners;
+    private ModelFactoryExtensionPoint modelFactories;
+    
+    /**
+     * Constructs a new DefaultContributionListenerExtensionPoint.
+     *  
+     */
+    public 
DefaultContributionListenerExtensionPoint(ModelFactoryExtensionPoint 
modelFactories) {
+        this.modelFactories = modelFactories;
+    }
 
     public void addContributionListener(ContributionListener listener) {
         listeners.add(listener);
@@ -58,7 +70,7 @@
         if (loadedListeners)
             return;
 
-        // Get the databinding service declarations
+        // Get the listener service declarations
         Set<ServiceDeclaration> listenerDeclarations; 
         try {
             listenerDeclarations = 
ServiceDiscovery.getInstance().getServiceDeclarations(ContributionListener.class);
@@ -66,12 +78,21 @@
             throw new IllegalStateException(e);
         }
         
-        // Load data bindings
+        // Load and instantiate the listeners
         for (ServiceDeclaration listenerDeclaration: listenerDeclarations) {
             ContributionListener listener;
             try {
                 Class<ContributionListener> listenerClass = 
(Class<ContributionListener>)listenerDeclaration.loadClass();
-                listener = listenerClass.newInstance();
+                try {
+                    Constructor<ContributionListener> constructor = 
listenerClass.getConstructor(ModelFactoryExtensionPoint.class);
+                    try {
+                        listener = constructor.newInstance(modelFactories);
+                    } catch (InvocationTargetException e) {
+                        throw new IllegalArgumentException(e);
+                    }
+                } catch (NoSuchMethodException e) {
+                    listener = listenerClass.newInstance();
+                }
             } catch (ClassNotFoundException e) {
                 throw new IllegalArgumentException(e);
             } catch (InstantiationException e) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to