summaryrefslogtreecommitdiffstats
path: root/branches/sca-trunk-20080910/modules/contribution-osgi/src
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sca-trunk-20080910/modules/contribution-osgi/src')
-rw-r--r--branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/BundleReference.java161
-rw-r--r--branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleContributionProcessor.java161
-rw-r--r--branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleProcessor.java141
-rw-r--r--branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleReferenceModelResolver.java154
-rw-r--r--branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiClassReferenceModelResolver.java137
-rw-r--r--branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiImportExportListener.java215
-rw-r--r--branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiModelResolverImpl.java119
-rw-r--r--branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.PackageProcessor18
-rw-r--r--branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver18
-rw-r--r--branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.service.ContributionListener18
10 files changed, 0 insertions, 1142 deletions
diff --git a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/BundleReference.java b/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/BundleReference.java
deleted file mode 100644
index 0bbb8b707a..0000000000
--- a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/BundleReference.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * 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.osgi;
-
-
-/**
- * A weak reference to a class, which should be used to register classes
- * with an ArtifactResolver and resolve these classes later.
- *
- * @version $Rev$ $Date$
- */
-public class BundleReference {
-
- /**
- * The bundle.
- */
- private Object bundle;
-
- /**
- * The bundle name.
- */
- private String bundleName;
-
- /**
- * The bundle version.
- */
- private String bundleVersion;
-
- /**
- * The bundle name and version.
- */
- private String bundleUniqueName;
-
- /**
- * The bundle relative path.
- */
- private String bundleRelativePath;
-
- /**
- * Constructs a new BundleReference.
- *
- * @param bundle The bundle reference
- * @param bundleName The bundle name
- * @param bundleVersion The bundle version
- * @param bundleRelativePath The relative path for the bundle
- */
- public BundleReference(Object bundle, String bundleName, String bundleVersion, String bundleRelativePath) {
- this.bundle = bundle;
- this.bundleName = bundleName;
- this.bundleVersion = bundleVersion;
- this.bundleRelativePath = bundleRelativePath;
- this.bundleUniqueName = bundleName + "(" + (bundleVersion == null?"0.0.0":bundleVersion) + ")";
- }
-
- /**
- * Constructs a new BundleReference.
- *
- * @param bundleName The bundle name
- * @param bundleVersion The bundle version
- */
- public BundleReference(String bundleName, String bundleVersion) {
- this.bundleName = bundleName;
- this.bundleVersion = bundleVersion;
- this.bundleUniqueName = bundleName + "(" + (bundleVersion == null?"0.0.0":bundleVersion) + ")";
- }
-
- /**
- * Get the referenced bundle.
- *
- * @return The referenced bundle
- */
- public Object getBundle() {
- return bundle;
- }
-
- /**
- * Get the referenced bundle name.
- *
- * @return The bundle name
- */
- public String getBundleName() {
- return bundleName;
- }
-
- /**
- * Get the referenced bundle version.
- *
- * @return The bundle version
- */
- public String getBundleVersion() {
- return bundleVersion;
- }
-
- /**
- * Get the referenced bundle name and version.
- *
- * @return The bundle name
- */
- public String getBundleUniqueName() {
- return bundleUniqueName;
- }
-
- /**
- * Get the relative location of the bundle inside its contribution.
- *
- * @return The bundle path
- */
- public String getBundleRelativePath() {
- return bundleRelativePath;
- }
-
-
-
- /**
- * Returns true if the bundle reference is unresolved.
- *
- * @return Whether or not the bundle has been resolved
- */
- public boolean isUnresolved() {
- return bundle == null;
- }
-
- @Override
- public int hashCode() {
- return bundleUniqueName.hashCode();
- }
-
- @Override
- public boolean equals(Object obj) {
- if (obj == this) {
- return true;
- } else {
- if (obj instanceof BundleReference) {
- BundleReference ref = (BundleReference)obj;
- return bundleName.equals(ref.bundleName) &&
- (bundleVersion == null || ref.bundleVersion == null ||
- bundleVersion.equals(ref.bundleVersion));
- } else {
- return false;
- }
- }
- }
-
-}
diff --git a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleContributionProcessor.java b/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleContributionProcessor.java
deleted file mode 100644
index 5033d7eefc..0000000000
--- a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleContributionProcessor.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * 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.osgi.impl;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.jar.JarEntry;
-import java.util.jar.JarInputStream;
-
-import org.apache.tuscany.sca.contribution.PackageType;
-import org.apache.tuscany.sca.contribution.processor.PackageProcessor;
-import org.apache.tuscany.sca.contribution.service.ContributionException;
-import org.apache.tuscany.sca.osgi.runtime.OSGiRuntime;
-import org.osgi.framework.Bundle;
-
-/**
- * Bundle Contribution package processor.
- *
- * @version $Rev$ $Date$
- */
-public class OSGiBundleContributionProcessor implements PackageProcessor {
-
- public OSGiBundleContributionProcessor() {
- }
-
- public String getPackageType() {
- return PackageType.BUNDLE;
- }
-
- public URL getArtifactURL(URL sourceURL, URI artifact) throws MalformedURLException {
- Bundle bundle = null;
- try {
- bundle = OSGiRuntime.findInstalledBundle(sourceURL);
- if (bundle != null) {
- URL url = bundle.getResource(artifact.getPath());
- if (url == null)
- System.out.println("Could not load resource " + artifact);
- return url;
- }
- } catch (Exception e) {
- }
- return null;
- }
-
- public List<URI> getJarArtifacts(URL packageSourceURL, InputStream inputStream) throws ContributionException,
- IOException {
- if (packageSourceURL == null) {
- throw new IllegalArgumentException("Invalid null package source URL.");
- }
-
- if (inputStream == null) {
- throw new IllegalArgumentException("Invalid null source inputstream.");
- }
-
- // Assume the root is a jar file
- JarInputStream jar = new JarInputStream(inputStream);
- try {
- Set<String> names = new HashSet<String>();
- while (true) {
- JarEntry entry = jar.getNextJarEntry();
- if (entry == null) {
- // EOF
- break;
- }
-
- // FIXME: Maybe we should externalize the filter as a property
- String name = entry.getName();
- if (!name.startsWith(".") && !entry.isDirectory()) {
-
- // Trim trailing /
- if (name.endsWith("/")) {
- name = name.substring(0, name.length() - 1);
- }
-
- // Add the entry name
- if (!names.contains(name) && name.length() > 0) {
- names.add(name);
-
- }
- }
- }
-
- // Return list of URIs
- List<URI> artifacts = new ArrayList<URI>();
- for (String name: names) {
- artifacts.add(URI.create(name));
- }
- return artifacts;
-
- } finally {
- jar.close();
- }
-}
-
- public List<URI> getArtifacts(URL packageSourceURL, InputStream inputStream) throws ContributionException,
- IOException {
-
- Bundle bundle = null;
- try {
- bundle = OSGiRuntime.findInstalledBundle(packageSourceURL);
- } catch (Exception e) {
- }
-
- if (bundle == null) {
- throw new IllegalArgumentException("Could not find OSGi bundle " + packageSourceURL);
- }
-
- if (packageSourceURL == null) {
- throw new IllegalArgumentException("Invalid null package source URL.");
- }
-
- List<URI> artifacts = new ArrayList<URI>();
-
- try {
- Enumeration entries = bundle.findEntries("/", "*", true);
- while (entries.hasMoreElements()) {
- URL entry = (URL)entries.nextElement();
- String entryName = entry.getPath();
- if (entryName.startsWith("/"))
- entryName = entryName.substring(1);
- artifacts.add(new URI(entryName));
-
- if (entryName.endsWith(".jar")) {
-
- URL jarResource = bundle.getResource(entryName);
- artifacts.addAll(getJarArtifacts(jarResource, jarResource.openStream()));
- }
-
- }
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
-
- return artifacts;
- }
-}
diff --git a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleProcessor.java b/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleProcessor.java
deleted file mode 100644
index b3c2302f60..0000000000
--- a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleProcessor.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * 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.osgi.impl;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.List;
-import java.util.jar.Attributes;
-import java.util.jar.JarInputStream;
-import java.util.jar.Manifest;
-
-import org.apache.tuscany.sca.contribution.Artifact;
-import org.apache.tuscany.sca.contribution.Contribution;
-import org.apache.tuscany.sca.contribution.osgi.BundleReference;
-import org.apache.tuscany.sca.osgi.runtime.OSGiRuntime;
-
-/**
- * OSGi bundle processor
- *
- * @version $Rev$ $Date$
- */
-public class OSGiBundleProcessor {
-
- private boolean initializedOSGi;
- private OSGiRuntime osgiRuntime;
-
- public OSGiBundleProcessor() {
- }
-
- public Object installContributionBundle(Contribution contribution) {
-
- JarInputStream jar = null;
- Object bundle = null;
-
- try {
-
- URL contribURL = new URL(contribution.getLocation());
- jar = new JarInputStream(contribURL.openStream());
-
- Manifest manifest = jar.getManifest();
- if (manifest != null && manifest.getMainAttributes()
- .containsKey(new Attributes.Name("Bundle-SymbolicName"))) {
-
- initialize();
- if (osgiRuntime != null)
- bundle = osgiRuntime.installBundle(contribURL.toString(), null);
- }
- } catch (Exception e) {
- // If OSGi cannot process the jar, treat the bundle as a plain jar file.
- } finally {
-
- try {
- if (jar != null)
- jar.close();
- } catch (IOException e) {
- }
- }
-
- return bundle;
- }
-
- public BundleReference installNestedBundle(Contribution contribution,
- String bundleSymbolicName,
- String bundleVersion) {
-
- BundleReference bundleReference = null;
-
- initialize();
- if (osgiRuntime == null)
- return null;
-
- List<Artifact> artifacts = contribution.getArtifacts();
- for (Artifact a : artifacts) {
- if (a.getURI().endsWith(".jar")) {
-
- InputStream stream;
- JarInputStream jar = null;
- Object name;
- Object version;
- try {
-
- URL artifactURL = new URL(a.getLocation());
- stream = artifactURL.openStream();
- jar = new JarInputStream(artifactURL.openStream());
- Manifest manifest = jar.getManifest();
- name = manifest.getMainAttributes().get(new Attributes.Name("Bundle-SymbolicName"));
- version = manifest.getMainAttributes().get(new Attributes.Name("Bundle-Version"));
-
- if (bundleSymbolicName.equals(name) && (bundleVersion == null || version == null || bundleVersion
- .equals(version))) {
-
- Object bundle = osgiRuntime.installBundle(a.getLocation(), stream);
-
- bundleReference = new BundleReference(bundle, bundleSymbolicName, bundleVersion, a.getURI());
-
- break;
- }
-
- } catch (Exception e) {
-
- // If OSGi cannot process the jar, treat the bundle as a plain jar file.
- } finally {
- try {
- if (jar != null)
- jar.close();
- } catch (IOException e) {
- }
- }
- }
- }
- return bundleReference;
- }
-
- private void initialize() {
- try {
- if (!initializedOSGi) {
- initializedOSGi = true;
- osgiRuntime = OSGiRuntime.getRuntime();
- }
- } catch (Exception e) {
- }
- }
-}
diff --git a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleReferenceModelResolver.java b/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleReferenceModelResolver.java
deleted file mode 100644
index 07e80f66f3..0000000000
--- a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiBundleReferenceModelResolver.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * 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.osgi.impl;
-
-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.ModelFactoryExtensionPoint;
-import org.apache.tuscany.sca.contribution.osgi.BundleReference;
-import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
-import org.apache.tuscany.sca.osgi.runtime.OSGiRuntime;
-import org.osgi.framework.Bundle;
-
-/**
- * A Model Resolver for BundleReferences.
- *
- * @version $Rev$ $Date$
- */
-public class OSGiBundleReferenceModelResolver implements ModelResolver {
- private Contribution contribution;
- private Map<String, BundleReference> map = new HashMap<String, BundleReference>();
-
- OSGiRuntime osgiRuntime;
- private OSGiBundleProcessor bundleProcessor;
-
- public OSGiBundleReferenceModelResolver(Contribution contribution, ModelFactoryExtensionPoint modelFactories) {
- this.contribution = contribution;
- this.bundleProcessor = new OSGiBundleProcessor();
- }
-
- public void addModel(Object resolved) {
- BundleReference bundleRef = (BundleReference)resolved;
- map.put(bundleRef.getBundleUniqueName(), bundleRef);
- }
-
- public Object removeModel(Object resolved) {
- return map.remove(((BundleReference)resolved).getBundleUniqueName());
- }
-
- /**
- * Handle artifact resolution when the specific class reference is imported from another contribution
- * @param unresolved
- * @return
- */
- private BundleReference resolveImportedModel(BundleReference unresolved) {
- BundleReference resolved = unresolved;
-
- if( this.contribution != null) {
- for (Import import_ : this.contribution.getImports()) {
-
- resolved = import_.getModelResolver().resolveModel(BundleReference.class, unresolved);
- if (resolved != unresolved)
- break;
- }
-
- }
- return resolved;
- }
-
-
- public <T> T resolveModel(Class<T> modelClass, T unresolved) {
- Object resolved = map.get(unresolved);
-
- if (resolved != null ){
- return modelClass.cast(resolved);
- }
-
- try {
- if (osgiRuntime == null)
- osgiRuntime = OSGiRuntime.getRuntime();
- } catch (Exception e) {
- }
- if (osgiRuntime == null)
- return unresolved;
-
- //Load a class on demand
- Object bundle = null;
- String bundleName = ((BundleReference)unresolved).getBundleName();
- String bundleVersion = ((BundleReference)unresolved).getBundleVersion();
-
- bundle = osgiRuntime.findBundle(bundleName, bundleVersion);
- BundleReference bundleReference;
-
- if (bundle == null)
- bundleReference = bundleProcessor.installNestedBundle(contribution, bundleName, bundleVersion);
- else {
- bundleReference = new BundleReference(bundle,
- ((BundleReference)unresolved).getBundleName(),
- bundleVersion,
- getBundleFileName(bundle)
- );
- }
-
-
- if (bundleReference != null) {
- //if we load the class
-
- map.put(((BundleReference)unresolved).getBundleUniqueName(), bundleReference);
-
- // Return the resolved BundleReference
- return modelClass.cast(bundleReference);
- } else {
- //delegate resolution of the class
- resolved = this.resolveImportedModel((BundleReference)unresolved);
- return modelClass.cast(resolved);
- }
-
-
- }
-
-
- private String getBundleFileName(Object bundle) {
- if (bundle instanceof Bundle) {
- String path = ((Bundle)bundle).getLocation();
- if (path.endsWith("/"))
- path = path.substring(0, path.length()-1);
- if (path.startsWith(contribution.getLocation())) {
- if (path.equals(contribution.getLocation())) {
- int index = path.lastIndexOf('/');
- if (index > 0 && index < path.length()-1)
- path = path.substring(index+1);
- } else {
- path = path.substring(contribution.getLocation().length());
- if (path.startsWith("/"))
- path = path.substring(1);
- }
- } else if (path.lastIndexOf('/') >= 0)
- path = path.substring(path.lastIndexOf('/')+1);
- return path;
- }
- return null;
-
- }
-
-}
diff --git a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiClassReferenceModelResolver.java b/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiClassReferenceModelResolver.java
deleted file mode 100644
index 528a287328..0000000000
--- a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiClassReferenceModelResolver.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * 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.osgi.impl;
-
-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.ModelFactoryExtensionPoint;
-import org.apache.tuscany.sca.contribution.resolver.ClassReference;
-import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
-import org.apache.tuscany.sca.osgi.runtime.OSGiRuntime;
-import org.osgi.framework.Bundle;
-
-/**
- * A Model Resolver for ClassReferences.
- *
- * @version $Rev$ $Date$
- */
-public class OSGiClassReferenceModelResolver implements ModelResolver {
- private Contribution contribution;
- private Map<String, ClassReference> map = new HashMap<String, ClassReference>();
- private Bundle bundle;
- private boolean initialized;
- private boolean useOSGi;
-
- public OSGiClassReferenceModelResolver(Contribution contribution, ModelFactoryExtensionPoint modelFactories) {
- this.contribution = contribution;
- }
-
- public void addModel(Object resolved) {
- ClassReference clazz = (ClassReference)resolved;
- map.put(clazz.getClassName(), clazz);
- }
-
- public Object removeModel(Object resolved) {
- return map.remove(((ClassReference)resolved).getClassName());
- }
-
- /**
- * Handle artifact resolution when the specific class reference is imported from another contribution
- * @param unresolved
- * @return
- */
- private ClassReference resolveImportedModel(ClassReference unresolved) {
- ClassReference resolved = unresolved;
-
- if (this.contribution != null) {
- for (Import import_ : this.contribution.getImports()) {
-
- if (resolved == unresolved && bundle != null) {
- resolved = import_.getModelResolver().resolveModel(ClassReference.class, unresolved);
- if (resolved != unresolved)
- break;
- }
- }
-
- }
- return resolved;
- }
-
- public <T> T resolveModel(Class<T> modelClass, T unresolved) {
- Object resolved = map.get(unresolved);
-
- if (resolved != null) {
- return modelClass.cast(resolved);
- }
- initialize();
- if (!useOSGi)
- return unresolved;
-
- //Load a class on demand
- Class clazz = null;
- if (bundle != null) {
- try {
- clazz = bundle.loadClass(((ClassReference)unresolved).getClassName());
- } catch (Exception e) {
- // we will later try to delegate to imported model resolvers
- }
- }
-
- if (clazz != null) {
- //if we load the class
- // Store a new ClassReference wrapping the loaded class
- ClassReference classReference = new ClassReference(clazz);
- map.put(getPackageName(classReference), classReference);
-
- // Return the resolved ClassReference
- return modelClass.cast(classReference);
- } else {
- //delegate resolution of the class
- resolved = this.resolveImportedModel((ClassReference)unresolved);
- return modelClass.cast(resolved);
- }
-
- }
-
- /***************
- * Helper methods
- ***************/
-
- private String getPackageName(ClassReference clazz) {
- int pos = clazz.getClassName().lastIndexOf(".");
- return clazz.getClassName().substring(0, pos - 1);
- }
-
- private void initialize() {
- if (initialized)
- return;
-
- initialized = true;
- try {
- bundle = OSGiRuntime.findInstalledBundle(contribution.getLocation());
- useOSGi = bundle != null;
- } catch (Throwable e) {
- // Ignore errors, default to ClassReferenceModelResolver
- }
- }
-}
diff --git a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiImportExportListener.java b/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiImportExportListener.java
deleted file mode 100644
index 15ad0bd948..0000000000
--- a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiImportExportListener.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- * 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.osgi.impl;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.HashSet;
-import java.util.jar.JarOutputStream;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-
-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.java.JavaExport;
-import org.apache.tuscany.sca.contribution.java.JavaImport;
-import org.apache.tuscany.sca.contribution.service.ContributionListener;
-import org.apache.tuscany.sca.contribution.service.ContributionRepository;
-import org.apache.tuscany.sca.osgi.runtime.OSGiRuntime;
-
-/**
- * Namespace Import/Export contribution listener
- * The listener would process all import/export from a given contribution
- * and initialize the model resolvers properly
- *
- * @version $Rev$ $Date$
- */
-public class OSGiImportExportListener implements ContributionListener {
-
- private OSGiBundleProcessor bundleProcessor;
-
- public OSGiImportExportListener() {
- bundleProcessor = new OSGiBundleProcessor();
- }
-
- /**
- * Initialize the import/export model resolvers
- * Export model resolvers are same as Contribution model resolver
- * Import model resolvers are matched to a specific contribution if a location URI is specified,
- * otherwise it try to resolve against all the other contributions
- */
- public void contributionAdded(ContributionRepository repository, Contribution contribution) {
-
- OSGiRuntime osgiRuntime = null;
- try {
- if (bundleProcessor.installContributionBundle(contribution) == null) {
- return;
- } else {
- osgiRuntime = OSGiRuntime.getRuntime();
- }
- } catch (Exception e) {
- return;
- }
-
- HashSet<Contribution> bundlesToInstall = new HashSet<Contribution>();
- // Initialize the contribution imports
- for (Import import_ : contribution.getImports()) {
- boolean initialized = false;
-
- if (import_ instanceof JavaImport) {
- JavaImport javaImport = (JavaImport)import_;
- String packageName = javaImport.getPackage();
-
- //Find a matching contribution
- if (javaImport.getLocation() != null) {
- Contribution targetContribution = repository.getContribution(javaImport.getLocation());
- if (targetContribution != null) {
-
- // Find a matching contribution export
- for (Export export : targetContribution.getExports()) {
- if (export instanceof JavaExport) {
- JavaExport javaExport = (JavaExport)export;
- if (packageName.equals(javaExport.getPackage())) {
-
- if (osgiRuntime.findBundle(targetContribution.getLocation()) == null)
- bundlesToInstall.add(targetContribution);
-
- initialized = true;
-
- }
- }
- if (initialized)
- break;
- }
- }
- }
- }
- if (!initialized) {
- for (Contribution c : repository.getContributions()) {
-
- // Go over all exports in the contribution
- for (Export export : c.getExports()) {
- // If the export matches our namespace, try to the resolve the model object
- if (import_.match(export) && osgiRuntime.findBundle(c.getLocation()) == null) {
- bundlesToInstall.add(c);
- }
- }
- }
- }
- }
- for (Contribution c : bundlesToInstall) {
- try {
- installDummyBundle(osgiRuntime, c);
- } catch (Exception e) {
- }
- }
-
- }
-
- public void contributionRemoved(ContributionRepository repository, Contribution contribution) {
-
- }
-
- public void contributionUpdated(ContributionRepository repository,
- Contribution oldContribution,
- Contribution contribution) {
-
- }
-
- private void installDummyBundle(OSGiRuntime osgiRuntime, Contribution contribution) throws Exception {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
-
- String EOL = System.getProperty("line.separator");
-
- String bundleName = contribution.getURI();
- URL contribURL = new URL(contribution.getLocation());
- String contribName = contribURL.getPath();
- if (contribName.endsWith("/"))
- contribName = contribName.substring(0, contribName.length()-1);
- if (contribName.lastIndexOf("/") >= 0)
- contribName = contribName.substring(contribName.lastIndexOf("/")+1);
-
- StringBuffer exportPackageNames = new StringBuffer();
- for (Export export : contribution.getExports()) {
- if (export instanceof JavaExport) {
- if (exportPackageNames.length() > 0)
- exportPackageNames.append(",");
- exportPackageNames.append(((JavaExport)export).getPackage());
- }
- }
- StringBuffer importPackageNames = new StringBuffer();
- for (Import import_ : contribution.getImports()) {
- if (import_ instanceof JavaImport) {
- if (importPackageNames.length() > 0)
- importPackageNames.append(",");
- importPackageNames.append(((JavaImport)import_).getPackage());
- }
- }
-
- String manifestStr =
- "Manifest-Version: 1.0" + EOL
- + "Bundle-ManifestVersion: 2"
- + EOL
- + "Bundle-Name: "
- + bundleName
- + EOL
- + "Bundle-SymbolicName: "
- + bundleName
- + EOL
- + "Bundle-Version: "
- + "1.0.0"
- + EOL
- + "Bundle-Localization: plugin"
- + EOL;
-
- StringBuilder manifestBuf = new StringBuilder();
- manifestBuf.append(manifestStr);
- manifestBuf.append("Export-Package: " + exportPackageNames + EOL);
- manifestBuf.append("Import-Package: " + importPackageNames + EOL);
- manifestBuf.append("Bundle-ClassPath: .," + contribName + EOL);
-
- ByteArrayInputStream manifestStream = new ByteArrayInputStream(manifestBuf.toString().getBytes());
- Manifest manifest = new Manifest();
- manifest.read(manifestStream);
-
- JarOutputStream jarOut = new JarOutputStream(out, manifest);
-
- ZipEntry ze = new ZipEntry(contribName);
- jarOut.putNextEntry(ze);
- InputStream stream = contribURL.openStream();
-
- byte[] bytes = new byte[stream.available()];
- stream.read(bytes);
- jarOut.write(bytes);
- stream.close();
-
- jarOut.close();
- out.close();
-
- ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
-
- osgiRuntime.installBundle("file://" + bundleName + ".jar", in);
-
- }
-
-}
diff --git a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiModelResolverImpl.java b/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiModelResolverImpl.java
deleted file mode 100644
index e624b1d3b5..0000000000
--- a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiModelResolverImpl.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * 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.osgi.impl;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Map;
-
-import org.apache.tuscany.sca.contribution.osgi.BundleReference;
-import org.apache.tuscany.sca.contribution.resolver.ClassReference;
-import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
-import org.osgi.framework.Bundle;
-
-/**
- * An implementation of an artifact resolver for OSGi bundles.
- *
- * @version $Rev$ $Date$
- */
-public class OSGiModelResolverImpl implements ModelResolver {
- private static final long serialVersionUID = -7826976465762296634L;
-
- private Map<Object, Object> map = new HashMap<Object, Object>();
-
- private Hashtable<String, Bundle> bundles;
- public OSGiModelResolverImpl(Hashtable<String, Bundle> bundles) {
- this.bundles = bundles;
- }
-
-
- public <T> T resolveModel(Class<T> modelClass, T unresolved) {
- Object resolved = map.get(unresolved);
- if (resolved != null) {
-
- // Return the resolved object
- return modelClass.cast(resolved);
-
- } else if (unresolved instanceof ClassReference) {
-
- // Load a class on demand
- ClassReference classReference = (ClassReference)unresolved;
- Class clazz = null;
- for (Bundle bundle : bundles.values()) {
- try {
- clazz = bundle.loadClass(classReference.getClassName());
- } catch (ClassNotFoundException e) {
- continue;
- }
- break;
- }
- if (clazz == null) {
-
- // Return the unresolved object
- return unresolved;
- }
-
- // Store a new ClassReference wrapping the loaded class
- resolved = new ClassReference(clazz);
- map.put(resolved, resolved);
-
- // Return the resolved ClassReference
- return modelClass.cast(resolved);
-
- } else if (unresolved instanceof BundleReference) {
- for (String bundlePath: bundles.keySet()) {
- Bundle bundle = bundles.get(bundlePath);
- BundleReference bundleRef = (BundleReference)unresolved;
- String bundleVersion = (String)bundle.getHeaders().get("Bundle-Version");
- if (bundle.getSymbolicName().equals(bundleRef.getBundleName())&&
- (bundleVersion == null || bundleRef.getBundleVersion() == null ||
- bundleVersion.equals(bundleRef.getBundleVersion()))) {
-
- resolved = new BundleReference(bundle,
- bundle.getSymbolicName(),
- bundleVersion,
- bundlePath);
- map.put(resolved, resolved);
-
- // Return the resolved BundleReference
- return modelClass.cast(resolved);
-
- }
- }
- }
-
- // Return the unresolved object
- return unresolved;
- }
-
- public void addModel(Object resolved) {
- map.put(resolved, resolved);
- }
-
- public Object removeModel(Object resolved) {
- return map.remove(resolved);
- }
-
- public Collection<Object> getModels() {
- return map.values();
- }
-
-}
diff --git a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.PackageProcessor b/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.PackageProcessor
deleted file mode 100644
index 632d135cb5..0000000000
--- a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.PackageProcessor
+++ /dev/null
@@ -1,18 +0,0 @@
-# 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.
-
-org.apache.tuscany.sca.contribution.osgi.impl.OSGiBundleContributionProcessor;type=application/osgi.bundle
diff --git a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver b/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
deleted file mode 100644
index 02e8b411eb..0000000000
--- a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
+++ /dev/null
@@ -1,18 +0,0 @@
-# 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.
-
-org.apache.tuscany.sca.contribution.osgi.impl.OSGiBundleReferenceModelResolver;model=org.apache.tuscany.sca.contribution.osgi.BundleReference
diff --git a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.service.ContributionListener b/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.service.ContributionListener
deleted file mode 100644
index 8dec190930..0000000000
--- a/branches/sca-trunk-20080910/modules/contribution-osgi/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.service.ContributionListener
+++ /dev/null
@@ -1,18 +0,0 @@
-# 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.
-
-org.apache.tuscany.sca.contribution.osgi.impl.OSGiImportExportListener