You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2007/07/30 20:00:22 UTC
svn commit: r561072 - in /incubator/tuscany/java/sca:
itest/contribution-import-export/
itest/contribution-import-export/test-import-java/src/test/java/helloworld/
modules/contribution-impl/
modules/contribution-impl/src/main/java/org/apache/tuscany/sc...
Author: lresende
Date: Mon Jul 30 11:00:20 2007
New Revision: 561072
URL: http://svn.apache.org/viewvc?view=rev&rev=561072
Log:
[work in progress]
Contribution import/export java support based on new extensibility of contribution import/export
- Further integration of java import/export
Added:
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/resolver/impl/ImportAllModelResolverImpl.java
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java
- copied, changed from r560762, incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceModelResolver.java
incubator/tuscany/java/sca/modules/contribution-java/src/test/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceArtifactResolverTestCase.java
- copied, changed from r560762, incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceArtifactResolverTestCase.java
incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/
incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/apache/
incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/apache/tuscany/
incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/apache/tuscany/sca/
incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/apache/tuscany/sca/contribution/
incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/apache/tuscany/sca/contribution/java/
incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/apache/tuscany/sca/contribution/java/impl/
incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceArtifactResolverTestCase.java
- copied, changed from r560762, incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceArtifactResolverTestCase.java
Removed:
incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceArtifactResolverTestCase.java
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceModelResolver.java
Modified:
incubator/tuscany/java/sca/itest/contribution-import-export/pom.xml
incubator/tuscany/java/sca/itest/contribution-import-export/test-import-java/src/test/java/helloworld/HelloWorldServerTestCase.java
incubator/tuscany/java/sca/modules/contribution-impl/pom.xml
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/impl/NamespaceImportImpl.java
incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportImpl.java
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Import.java
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ClassReference.java
incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/host/impl/NodeRuntimeBuilder.java
incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
Modified: incubator/tuscany/java/sca/itest/contribution-import-export/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/contribution-import-export/pom.xml?view=diff&rev=561072&r1=561071&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/itest/contribution-import-export/pom.xml (original)
+++ incubator/tuscany/java/sca/itest/contribution-import-export/pom.xml Mon Jul 30 11:00:20 2007
@@ -34,10 +34,8 @@
<module>test-import-wsdl</module>
<module>contrib-composite</module>
<module>test-import-composite</module>
- <!--
<module>contrib-java</module>
<module>test-import-java</module>
- -->
</modules>
<dependencies>
Modified: incubator/tuscany/java/sca/itest/contribution-import-export/test-import-java/src/test/java/helloworld/HelloWorldServerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/contribution-import-export/test-import-java/src/test/java/helloworld/HelloWorldServerTestCase.java?view=diff&rev=561072&r1=561071&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/itest/contribution-import-export/test-import-java/src/test/java/helloworld/HelloWorldServerTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/contribution-import-export/test-import-java/src/test/java/helloworld/HelloWorldServerTestCase.java Mon Jul 30 11:00:20 2007
@@ -26,8 +26,6 @@
import org.apache.tuscany.sca.assembly.Composite;
import org.apache.tuscany.sca.contribution.Contribution;
-import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
-import org.apache.tuscany.sca.contribution.resolver.impl.ModelResolverImpl;
import org.apache.tuscany.sca.contribution.service.ContributionService;
import org.apache.tuscany.sca.host.embedded.impl.EmbeddedSCADomain;
@@ -49,18 +47,16 @@
// Contribute the SCA contribution
ContributionService contributionService = domain.getContributionService();
- ModelResolver compositeJavaResolver = new ModelResolverImpl(cl);
File javaContribLocation = new File("../contrib-java/target/classes");
URL javaContribURL = javaContribLocation.toURL();
- Contribution javaContribution = contributionService.contribute("http://import-export/contrib-java", javaContribURL, compositeJavaResolver, false);
+ Contribution javaContribution = contributionService.contribute("http://import-export/contrib-java", javaContribURL, false);
for (Composite deployable : javaContribution.getDeployables() ) {
domain.getDomainCompositeHelper().addComposite(deployable);
}
- ModelResolver helloWorldContributionResolver = new ModelResolverImpl(cl);
File helloWorldContribLocation = new File("./target/classes/");
URL helloWorldContribURL = helloWorldContribLocation.toURL();
- Contribution helloWorldContribution = contributionService.contribute("http://import-export/helloworld", helloWorldContribURL, helloWorldContributionResolver, false);
+ Contribution helloWorldContribution = contributionService.contribute("http://import-export/helloworld", helloWorldContribURL, false);
for (Composite deployable : helloWorldContribution.getDeployables() ) {
domain.getDomainCompositeHelper().addComposite(deployable);
}
@@ -90,7 +86,7 @@
// Remove the contribution from the in-memory repository
contributionService.remove("http://import-export/helloworld");
- contributionService.remove("http://import-export/contrib-wsdl");
+ contributionService.remove("http://import-export/contrib-java");
//Stop Components from my composite
domain.getDomainCompositeHelper().stopComponent(domain.getDomainCompositeHelper().getComponent("HelloWorldServiceComponent"));
Modified: incubator/tuscany/java/sca/modules/contribution-impl/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-impl/pom.xml?view=diff&rev=561072&r1=561071&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution-impl/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/contribution-impl/pom.xml Mon Jul 30 11:00:20 2007
@@ -36,6 +36,12 @@
</dependency>
<dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-contribution-java</artifactId>
+ <version>1.0-incubating-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>wstx-asl</artifactId>
<version>3.2.0</version>
Modified: incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/impl/NamespaceImportImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/impl/NamespaceImportImpl.java?view=diff&rev=561072&r1=561071&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/impl/NamespaceImportImpl.java (original)
+++ incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/impl/NamespaceImportImpl.java Mon Jul 30 11:00:20 2007
@@ -20,6 +20,8 @@
package org.apache.tuscany.sca.contribution.impl;
import org.apache.tuscany.sca.contribution.ContributionImport;
+import org.apache.tuscany.sca.contribution.Export;
+import org.apache.tuscany.sca.contribution.NamespaceExport;
import org.apache.tuscany.sca.contribution.NamespaceImport;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
@@ -58,5 +60,17 @@
public void setModelResolver(ModelResolver modelResolver) {
this.modelResolver = modelResolver;
+ }
+
+ public boolean match(Export export) {
+ if (export instanceof NamespaceExport) {
+ if (this.getLocation() == null || this.getLocation().length() == 0) {
+ if (this.getNamespace().equals(((NamespaceExport)export).getNamespace())) {
+ return true;
+ }
+ }
+
+ }
+ return false;
}
}
Added: incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/resolver/impl/ImportAllModelResolverImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/resolver/impl/ImportAllModelResolverImpl.java?view=auto&rev=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/resolver/impl/ImportAllModelResolverImpl.java (added)
+++ incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/resolver/impl/ImportAllModelResolverImpl.java Mon Jul 30 11:00:20 2007
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.contribution.resolver.impl;
+
+import java.util.Collection;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.Export;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+
+/**
+ * A model resolver implementation that considers Exports in any available contribution
+ *
+ * @version $Rev: 560435 $ $Date: 2007-07-27 18:26:55 -0700 (Fri, 27 Jul 2007) $
+ */
+public class ImportAllModelResolverImpl implements ModelResolver {
+
+ private Import import_;
+ private Collection<Contribution> contributions;
+
+ public ImportAllModelResolverImpl(Import import_, Collection<Contribution> contributions) {
+ this.import_ = import_;
+ this.contributions = contributions;
+ }
+
+ public void addModel(Object resolved) {
+ throw new IllegalStateException();
+ }
+
+ public Object removeModel(Object resolved) {
+ throw new IllegalStateException();
+ }
+
+ public <T> T resolveModel(Class<T> modelClass, T unresolved) {
+
+ //TODO optimize and cache results of the resolution later
+
+ // Go over all available contributions
+ for (Contribution contribution : contributions) {
+
+ // Go over all exports in the contribution
+ for (Export export : contribution.getExports()) {
+ // If the export matches our namespace, try to the resolve the model object
+ if (import_.match(export)) {
+ Object resolved = export.getModelResolver().resolveModel(modelClass, unresolved);
+
+ // Return the resolved model object
+ if (resolved instanceof org.apache.tuscany.sca.interfacedef.Base) {
+ if (!((org.apache.tuscany.sca.interfacedef.Base)resolved).isUnresolved()) {
+ return modelClass.cast(resolved);
+ }
+ }
+ else if (resolved instanceof org.apache.tuscany.sca.assembly.Base) {
+ if (!((org.apache.tuscany.sca.assembly.Base)resolved).isUnresolved()) {
+ return modelClass.cast(resolved);
+ }
+ }
+ }
+ }
+ }
+
+ // Model object was not resolved
+ return unresolved;
+ }
+
+}
Modified: incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java?view=diff&rev=561072&r1=561071&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionServiceImpl.java Mon Jul 30 11:00:20 2007
@@ -41,6 +41,8 @@
import org.apache.tuscany.sca.contribution.Import;
import org.apache.tuscany.sca.contribution.NamespaceExport;
import org.apache.tuscany.sca.contribution.NamespaceImport;
+import org.apache.tuscany.sca.contribution.java.JavaExport;
+import org.apache.tuscany.sca.contribution.java.JavaImport;
import org.apache.tuscany.sca.contribution.processor.ContributionPostProcessor;
import org.apache.tuscany.sca.contribution.processor.PackageProcessor;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
@@ -48,9 +50,7 @@
import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
-import org.apache.tuscany.sca.contribution.resolver.impl.NamespaceExportModelResolverImpl;
-import org.apache.tuscany.sca.contribution.resolver.impl.NamespaceImportAllModelResolverImpl;
-import org.apache.tuscany.sca.contribution.resolver.impl.NamespaceImportModelResolverImpl;
+import org.apache.tuscany.sca.contribution.resolver.impl.ImportAllModelResolverImpl;
import org.apache.tuscany.sca.contribution.service.ContributionException;
import org.apache.tuscany.sca.contribution.service.ContributionMetadataDocumentProcessor;
import org.apache.tuscany.sca.contribution.service.ContributionRepository;
@@ -178,6 +178,28 @@
return addContribution(contributionURI, sourceURL, input, modelResolver, true);
}
+ public Contribution getContribution(String id) {
+ return this.contributionRegistry.get(id);
+ }
+
+ public void remove(String contribution) throws ContributionException {
+ this.contributionRegistry.remove(contribution);
+ }
+
+ public void addDeploymentComposite(Contribution contribution, Composite composite) throws ContributionException {
+ DeployedArtifact artifact = this.contributionFactory.createDeployedArtifact();
+ artifact.setURI(composite.getURI());
+ artifact.setModel(composite);
+
+ contribution.getArtifacts().add(artifact);
+
+ contribution.getDeployables().add(composite);
+ }
+
+ /**
+ * Utility/Helper methods for contribution service
+ */
+
/**
* Perform read of the contribution metada loader (sca-contribution.xml and sca-contribution-generated.xml)
* When the two metadata files are available, the information provided are merged, and the sca-contribution has priorities
@@ -205,30 +227,7 @@
return contributionMetadata;
}
-
- public Contribution getContribution(String id) {
- return this.contributionRegistry.get(id);
- }
-
- public void remove(String contribution) throws ContributionException {
- this.contributionRegistry.remove(contribution);
- //FIXME remove references from contributionByExportedNamespace
- }
-
- public void addDeploymentComposite(Contribution contribution, Composite composite) throws ContributionException {
- DeployedArtifact artifact = this.contributionFactory.createDeployedArtifact();
- artifact.setURI(composite.getURI());
- artifact.setModel(composite);
-
- contribution.getArtifacts().add(artifact);
-
- contribution.getDeployables().add(composite);
- }
-
- /**
- * Utility/Helper methods for contribution service
- */
-
+
/**
* Note:
*
@@ -279,13 +278,13 @@
// Initialize the contribution exports
for (Export export: contribution.getExports()) {
- if (export instanceof NamespaceExport) {
- export.setModelResolver(new NamespaceExportModelResolverImpl((NamespaceExport)export, modelResolver));
- }
+ export.setModelResolver(modelResolver);
}
// Initialize the contribution imports
for (Import import_: contribution.getImports()) {
+ boolean initialized = false;
+
if (import_ instanceof NamespaceImport) {
NamespaceImport namespaceImport = (NamespaceImport)import_;
@@ -299,19 +298,43 @@
if (export instanceof NamespaceExport) {
NamespaceExport namespaceExport = (NamespaceExport)export;
if (namespaceImport.getNamespace().equals(namespaceExport.getNamespace())) {
- namespaceImport.setModelResolver(new NamespaceImportModelResolverImpl(namespaceImport, namespaceExport.getModelResolver()));
+ namespaceImport.setModelResolver(namespaceExport.getModelResolver());
+ initialized = true;
break;
}
}
}
}
- } else {
+ }
+ } else if(import_ instanceof JavaImport) {
+ JavaImport javaImport = (JavaImport) import_;
- // Use a resolver that will consider all contributions
- namespaceImport.setModelResolver(new NamespaceImportAllModelResolverImpl(namespaceImport, contributionRegistry.values()));
+ //Find a matching contribution
+ if(javaImport.getLocation() != null) {
+ Contribution targetContribution = contributionRegistry.get(javaImport.getLocation());
+ if (targetContribution != null) {
+ // Find a matching contribution export
+ for (Export export: targetContribution.getExports()) {
+ if (export instanceof JavaExport) {
+ JavaExport javaExport = (JavaExport)export;
+ if (javaImport.getPackage().equals(javaExport.getPackage())) {
+ javaImport.setModelResolver(javaExport.getModelResolver());
+ initialized = true;
+ break;
+ }
+ }
+ }
+ }
}
}
+
+ //if no location was specified, try to resolve with any contribution
+ if( !initialized ) {
+ // Use a resolver that will consider all contributions
+ import_.setModelResolver(new ImportAllModelResolverImpl(import_, contributionRegistry.values()));
+ }
+
}
List<URI> contributionArtifacts = null;
@@ -410,8 +433,6 @@
// resolve the model object
if (artifact.getModel() != null) {
this.artifactProcessor.resolve(artifact.getModel(), contribution.getModelResolver());
-
- //processResolveImportsPhase(contribution, artifact);
}
}
@@ -419,68 +440,10 @@
List<Composite> resolvedDeployables = new ArrayList<Composite>();
for (Composite deployableComposite : contribution.getDeployables()) {
Composite resolvedDeployable = contribution.getModelResolver().resolveModel(Composite.class, deployableComposite);
-
- /*
- if (resolvedDeployable.isUnresolved()) {
- resolvedDeployable = processResolveImportsPhase(contribution, resolvedDeployable);
- }
- */
-
+
resolvedDeployables.add(resolvedDeployable);
}
contribution.getDeployables().clear();
contribution.getDeployables().addAll(resolvedDeployables);
- }
-
- /*
- @SuppressWarnings("unchecked")
- private Object processResolveImportsPhase(Contribution contribution, DeployedArtifact artifact) throws ContributionException {
- for(ContributionImport contributionImport : contribution.getImports()) {
- String importedContributionURI = contributionImport.getLocation();
- if (importedContributionURI != null && importedContributionURI.length() > 0) {
- //location provided (contribution uri)
- Contribution importedContribution = this.getContribution(importedContributionURI);
- if (importedContribution != null) {
- this.artifactProcessor.resolve(artifact.getModel(), importedContribution.getModelResolver());
- }
- } else {
- //look into all the contributions that match exported uri
- for(Contribution importedContribution : this.contributionByExportedNamespace.get(contributionImport.getNamespace())) {
- this.artifactProcessor.resolve(artifact.getModel(), importedContribution.getModelResolver());
- }
- }
-
-
- }
-
- return artifact.getModel();
- }
-
- @SuppressWarnings("unchecked")
- private Composite processResolveImportsPhase(Contribution contribution, Composite deployableComposite) throws ContributionException {
- Composite resolvedDeployable = deployableComposite;
-
- for(ContributionImport contributionImport : contribution.getImports()) {
- String importedContributionURI = contributionImport.getLocation();
- if (importedContributionURI != null && importedContributionURI.length() > 0) {
- //location provided (contribution uri)
- Contribution importedContribution = this.getContribution(importedContributionURI);
- if (importedContribution != null) {
- resolvedDeployable = importedContribution.getModelResolver().resolveModel(Composite.class, deployableComposite);
- }
- } else {
- //look into all the contributions that match exported uri
- for(Contribution importedContribution : this.contributionByExportedNamespace.get(contributionImport.getNamespace())) {
- Composite resolvingDeployable = importedContribution.getModelResolver().resolveModel(Composite.class, deployableComposite);
- if (resolvingDeployable != null && resolvingDeployable.isUnresolved() == false) {
- resolvedDeployable = resolvingDeployable;
- break;
- }
- }
- }
- }
-
- return resolvedDeployable;
- }
- */
+ }
}
Copied: incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java (from r560762, incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceModelResolver.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java?view=diff&rev=561072&p1=incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceModelResolver.java&r1=560762&p2=incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceModelResolver.java (original)
+++ incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java Mon Jul 30 11:00:20 2007
@@ -17,13 +17,17 @@
* under the License.
*/
-package org.apache.tuscany.sca.contribution.resolver;
+package org.apache.tuscany.sca.contribution.java.impl;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Map;
import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.java.JavaImport;
+import org.apache.tuscany.sca.contribution.resolver.ClassReference;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
/**
* A Model Resolver for WSDL models.
@@ -49,29 +53,58 @@
return map.remove(((ClassReference)resolved).getClassName());
}
+
+ private ClassReference resolveImportedModel(ClassReference unresolved) {
+ ClassReference resolved = unresolved;
+
+ if( this.contribution != null) {
+ for (Import import_ : this.contribution.getImports()) {
+ if (import_ instanceof JavaImport) {
+ JavaImport javaImport = (JavaImport) import_;
+ String packageName = javaImport.getPackage();
+ if (javaImport.getPackage().equals(packageName)) {
+ // Delegate the resolution to the import resolver
+ resolved = import_.getModelResolver().resolveModel(ClassReference.class, unresolved);
+ }
+ }
+ }
+
+ }
+ return resolved;
+ }
+
+
public <T> T resolveModel(Class<T> modelClass, T unresolved) {
Object resolved = map.get(unresolved);
if (resolved != null ){
- return (T)resolved;
+ return modelClass.cast(resolved);
}
//Load a class on demand
- Class clazz;
+ Class clazz = null;
try {
clazz = Class.forName(((ClassReference)unresolved).getClassName(), true, classLoader.get());
} catch (ClassNotFoundException e) {
+ //we will later try to delegate to imported model resolvers
+ }
+
+
+ if (clazz != null) {
+ //if we load the class
+ // Store a new ClassReference wrappering the loaded class
+ ClassReference classReference = new ClassReference(clazz);
+ map.put(getPackageName(classReference), classReference);
- // Return the unresolved object
- return unresolved;
+ // Return the resolved ClassReference
+ return modelClass.cast(classReference);
+ } else {
+ //delegate resolution of the class
+ resolved = this.resolveImportedModel((ClassReference)unresolved);
+ return modelClass.cast(resolved);
}
- // Store a new ClassReference wrappering the loaded class
- ClassReference classReference = new ClassReference(clazz);
- map.put(getPackageName(classReference), classReference);
-
- // Return the resolved ClassReference
- return (T)classReference;
+
}
/***************
Modified: incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportImpl.java?view=diff&rev=561072&r1=561071&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportImpl.java (original)
+++ incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/JavaImportImpl.java Mon Jul 30 11:00:20 2007
@@ -19,6 +19,8 @@
package org.apache.tuscany.sca.contribution.java.impl;
+import org.apache.tuscany.sca.contribution.Export;
+import org.apache.tuscany.sca.contribution.java.JavaExport;
import org.apache.tuscany.sca.contribution.java.JavaImport;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
@@ -57,4 +59,15 @@
this.modelResolver = modelResolver;
}
+ public boolean match(Export export) {
+ if(export instanceof JavaExport) {
+ if(this.getLocation() == null || this.getLocation().length() == 0) {
+ if (this.getPackage().equals(((JavaExport)export).getPackage())) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
}
Copied: incubator/tuscany/java/sca/modules/contribution-java/src/test/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceArtifactResolverTestCase.java (from r560762, incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceArtifactResolverTestCase.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-java/src/test/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceArtifactResolverTestCase.java?view=diff&rev=561072&p1=incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceArtifactResolverTestCase.java&r1=560762&p2=incubator/tuscany/java/sca/modules/contribution-java/src/test/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceArtifactResolverTestCase.java&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceArtifactResolverTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/contribution-java/src/test/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceArtifactResolverTestCase.java Mon Jul 30 11:00:20 2007
@@ -17,9 +17,14 @@
* under the License.
*/
-package org.apache.tuscany.sca.contribution.resolver;
+package org.apache.tuscany.sca.contribution.java.impl;
import junit.framework.TestCase;
+
+import org.apache.tuscany.sca.contribution.resolver.ClassReference;
+import org.apache.tuscany.sca.contribution.resolver.DefaultModelResolverExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
/**
* Test ClassReferenceArtifactResolver.
Copied: incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceArtifactResolverTestCase.java (from r560762, incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceArtifactResolverTestCase.java)
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceArtifactResolverTestCase.java?view=diff&rev=561072&p1=incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceArtifactResolverTestCase.java&r1=560762&p2=incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceArtifactResolverTestCase.java&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/resolver/ClassReferenceArtifactResolverTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/contribution-java/src/test/resources/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceArtifactResolverTestCase.java Mon Jul 30 11:00:20 2007
@@ -19,6 +19,8 @@
package org.apache.tuscany.sca.contribution.resolver;
+import org.apache.tuscany.sca.contribution.java.impl.ClassReferenceModelResolver;
+
import junit.framework.TestCase;
/**
Modified: incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Import.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Import.java?view=diff&rev=561072&r1=561071&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Import.java (original)
+++ incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/Import.java Mon Jul 30 11:00:20 2007
@@ -43,5 +43,12 @@
*
* @param modelResolver The model resolver
*/
- void setModelResolver(ModelResolver modelResolver);
+ void setModelResolver(ModelResolver modelResolver);
+
+ /**
+ * Verify is a specific export is provider of what is being imported
+ * @param export The Exported being verified
+ * @return true/false
+ */
+ boolean match(Export export);
}
Modified: incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ClassReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ClassReference.java?view=diff&rev=561072&r1=561071&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ClassReference.java (original)
+++ incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ClassReference.java Mon Jul 30 11:00:20 2007
@@ -78,7 +78,7 @@
*
* @return Wether or not the class has been resolved
*/
- boolean isUnresolved() {
+ public boolean isUnresolved() {
return clazz == null;
}
Modified: incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/host/impl/NodeRuntimeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/host/impl/NodeRuntimeBuilder.java?view=diff&rev=561072&r1=561071&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/host/impl/NodeRuntimeBuilder.java (original)
+++ incubator/tuscany/java/sca/modules/distributed/src/main/java/org/apache/tuscany/sca/distributed/host/impl/NodeRuntimeBuilder.java Mon Jul 30 11:00:20 2007
@@ -35,6 +35,7 @@
import org.apache.tuscany.sca.assembly.xml.ConstrainingTypeModelResolver;
import org.apache.tuscany.sca.assembly.xml.ConstrainingTypeProcessor;
import org.apache.tuscany.sca.contribution.ContributionFactory;
+import org.apache.tuscany.sca.contribution.java.impl.ClassReferenceModelResolver;
import org.apache.tuscany.sca.contribution.java.impl.JavaExportProcessor;
import org.apache.tuscany.sca.contribution.java.impl.JavaImportProcessor;
import org.apache.tuscany.sca.contribution.processor.ContributionPostProcessor;
@@ -51,7 +52,6 @@
import org.apache.tuscany.sca.contribution.processor.impl.FolderContributionProcessor;
import org.apache.tuscany.sca.contribution.processor.impl.JarContributionProcessor;
import org.apache.tuscany.sca.contribution.resolver.ClassReference;
-import org.apache.tuscany.sca.contribution.resolver.ClassReferenceModelResolver;
import org.apache.tuscany.sca.contribution.resolver.DefaultModelResolverExtensionPoint;
import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
import org.apache.tuscany.sca.contribution.service.ContributionRepository;
Modified: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java?view=diff&rev=561072&r1=561071&r2=561072
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java (original)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java Mon Jul 30 11:00:20 2007
@@ -50,6 +50,7 @@
import org.apache.tuscany.sca.assembly.xml.ConstrainingTypeProcessor;
import org.apache.tuscany.sca.assembly.xml.SCABindingProcessor;
import org.apache.tuscany.sca.contribution.ContributionFactory;
+import org.apache.tuscany.sca.contribution.java.impl.ClassReferenceModelResolver;
import org.apache.tuscany.sca.contribution.java.impl.JavaExportProcessor;
import org.apache.tuscany.sca.contribution.java.impl.JavaImportProcessor;
import org.apache.tuscany.sca.contribution.processor.ContributionPostProcessor;
@@ -68,7 +69,6 @@
import org.apache.tuscany.sca.contribution.processor.impl.FolderContributionProcessor;
import org.apache.tuscany.sca.contribution.processor.impl.JarContributionProcessor;
import org.apache.tuscany.sca.contribution.resolver.ClassReference;
-import org.apache.tuscany.sca.contribution.resolver.ClassReferenceModelResolver;
import org.apache.tuscany.sca.contribution.resolver.DefaultModelResolverExtensionPoint;
import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;
import org.apache.tuscany.sca.contribution.service.ContributionRepository;
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org