Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ExportedPackageImpl.java')
-rw-r--r--bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ExportedPackageImpl.java83
1 files changed, 83 insertions, 0 deletions
diff --git a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ExportedPackageImpl.java b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ExportedPackageImpl.java
new file mode 100644
index 000000000..c2e0b347d
--- /dev/null
+++ b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/ExportedPackageImpl.java
@@ -0,0 +1,83 @@
+package org.eclipse.osgi.framework.internal.core;
+
+import java.util.ArrayList;
+
+import org.eclipse.osgi.service.resolver.BundleDescription;
+import org.eclipse.osgi.service.resolver.PackageSpecification;
+import org.eclipse.osgi.service.resolver.Version;
+import org.osgi.framework.Constants;
+
+
+public class ExportedPackageImpl extends SingleSourcePackage implements org.osgi.service.packageadmin.ExportedPackage {
+
+ String specVersion;
+ PackageSpecification packageSpec;
+
+ public ExportedPackageImpl(PackageSpecification packageSpec, BundleLoaderProxy supplier) {
+ super(packageSpec.getName(), supplier);
+ this.packageSpec = packageSpec;
+ Version version = this.packageSpec.getActualVersion();
+ if (version != null) {
+ this.specVersion = version.toString();
+ }
+ }
+
+ public String getName() {
+ return getId();
+ }
+
+ public org.osgi.framework.Bundle getExportingBundle() {
+ if (supplier.isStale()) {
+ return null;
+ }
+ return supplier.getBundle();
+ }
+
+ public org.osgi.framework.Bundle[] getImportingBundles() {
+ if (supplier.isStale()) {
+ return null;
+ }
+
+ Bundle[] dependentBundles = supplier.getDependentBundles();
+ ArrayList importingBundles = new ArrayList();
+
+ // always add self
+ importingBundles.add(supplier.getBundle());
+
+ for(int i=0; i<dependentBundles.length; i++) {
+ Bundle bundle = dependentBundles[i];
+ BundleLoader bundleLoader = bundle.getBundleLoader();
+ /* check to make sure this package is really imported;
+ * do not call bundleLoader.getPackageExporter() here because we do
+ * not want to cause the bundle to dynamically import any packages
+ * that may not have been referenced yet.
+ */
+ if (bundleLoader.importedPackages != null &&
+ bundleLoader.importedPackages.getByKey(getId()) != null){
+ importingBundles.add(bundle);
+ }
+ }
+
+ Bundle[] result = new Bundle[importingBundles.size()];
+ importingBundles.toArray(result);
+ return result;
+ }
+
+ public String getSpecificationVersion() {
+ return specVersion;
+ }
+
+ public boolean isRemovalPending() {
+ Bundle bundle = supplier.getBundle();
+ return bundle.framework.packageAdmin.removalPending.contains(supplier);
+ }
+
+ public String toString(){
+ StringBuffer result = new StringBuffer(getId());
+ if (specVersion != null) {
+ result.append("; ").append(Constants.PACKAGE_SPECIFICATION_VERSION);
+ result.append("=\"").append(specVersion).append("\"");
+ }
+ return result.toString();
+ }
+}

Back to the top