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]