| /******************************************************************************* |
| * Copyright (c) 2003, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.osgi.framework.internal.core; |
| |
| import java.util.ArrayList; |
| import org.eclipse.osgi.service.resolver.BundleDescription; |
| import org.eclipse.osgi.service.resolver.ExportPackageDescription; |
| import org.osgi.framework.*; |
| import org.osgi.framework.Constants; |
| import org.osgi.service.packageadmin.ExportedPackage; |
| |
| public class ExportedPackageImpl implements ExportedPackage { |
| |
| String specVersion; |
| ExportPackageDescription exportedPackage; |
| BundleLoaderProxy supplier; |
| |
| public ExportedPackageImpl(ExportPackageDescription exportedPackage, BundleLoaderProxy supplier) { |
| this.exportedPackage = exportedPackage; |
| this.supplier = supplier; |
| Version version = exportedPackage.getVersion(); |
| if (version != null) |
| this.specVersion = version.toString(); |
| } |
| |
| public String getName() { |
| return exportedPackage.getName(); |
| } |
| |
| public org.osgi.framework.Bundle getExportingBundle() { |
| if (supplier.isStale()) |
| return null; |
| return supplier.getBundleHost(); |
| } |
| |
| public Bundle[] getImportingBundles() { |
| if (supplier.isStale()) |
| return null; |
| AbstractBundle bundle = (AbstractBundle) getExportingBundle(); |
| if (bundle == null) |
| return null; |
| AbstractBundle[] bundles = bundle.framework.getAllBundles(); |
| ArrayList importers = new ArrayList(10); |
| PackageSource supplierSource = supplier.createPackageSource(exportedPackage, false); |
| for (int i = 0; i < bundles.length; i++) { |
| if (!(bundles[i] instanceof BundleHost)) |
| continue; |
| BundleLoader loader = ((BundleHost) bundles[i]).getBundleLoader(); |
| if (loader == null) |
| continue; |
| PackageSource importerSource = loader.getPackageSource(getName()); |
| if (supplierSource != null && supplierSource.hasCommonSource(importerSource)) |
| importers.add(bundles[i]); |
| } |
| return (Bundle[]) importers.toArray(new Bundle[importers.size()]); |
| } |
| |
| public String getSpecificationVersion() { |
| return specVersion; |
| } |
| |
| public Version getVersion() { |
| return exportedPackage.getVersion(); |
| } |
| |
| public boolean isRemovalPending() { |
| BundleDescription exporter = exportedPackage.getExporter(); |
| if (exporter != null) |
| return exporter.isRemovalPending(); |
| return true; |
| } |
| |
| public String toString() { |
| StringBuffer result = new StringBuffer(getName()); |
| if (specVersion != null) { |
| result.append("; ").append(Constants.VERSION_ATTRIBUTE); //$NON-NLS-1$ |
| result.append("=\"").append(specVersion).append("\""); //$NON-NLS-1$//$NON-NLS-2$ |
| } |
| return result.toString(); |
| } |
| } |