diff options
author | Todor Boev | 2017-05-30 16:12:40 +0000 |
---|---|---|
committer | Todor Boev | 2017-09-29 10:37:06 +0000 |
commit | 872431089780603782ca6de7c774059ed8620e3c (patch) | |
tree | 626fd9da24d2d9071237ae48b1a3b3e9271634b3 | |
parent | aa4390e03ef4b5f6676c9e2991779df068b38f2b (diff) | |
download | rt.equinox.p2-872431089780603782ca6de7c774059ed8620e3c.tar.gz rt.equinox.p2-872431089780603782ca6de7c774059ed8620e3c.tar.xz rt.equinox.p2-872431089780603782ca6de7c774059ed8620e3c.zip |
Bug 313553 - Capability: add handling to BundlesActionI20171002-2000
Update BundlesAction to publish the bundle generic
capabilities.
Fix BundlesActionTest to handle the newly published
capabilities.
Change-Id: I4b3d11b64706b4fc77b9084f27f8e1583f15580e
Signed-off-by: Todor Boev <rinsvind@gmail.com>
4 files changed, 44 insertions, 6 deletions
diff --git a/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ProvidedCapability.java b/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ProvidedCapability.java index be7aea670..2c68d5ecc 100644 --- a/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ProvidedCapability.java +++ b/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/ProvidedCapability.java @@ -93,7 +93,9 @@ public class ProvidedCapability implements IProvidedCapability, IMemberProvider } public String getName() { - return (String) attributes.get(MEMBER_NAME); + // There is always a "name" member, but it may not always be a string. + // Convert it here so that it is still possible to get the real type via getAttributes(). + return attributes.get(MEMBER_NAME).toString(); } public String getNamespace() { diff --git a/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IProvidedCapability.java b/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IProvidedCapability.java index e895d5bc2..47aa3ee51 100644 --- a/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IProvidedCapability.java +++ b/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/IProvidedCapability.java @@ -31,7 +31,7 @@ public interface IProvidedCapability { /** * - * @return String the special "name" attribute of this capability. + * @return String the String representation of the special "name" attribute of this capability. * @noreference This method is not intended to be referenced by clients. */ public String getName(); diff --git a/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java b/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java index eaaa780cf..4cf0fc352 100644 --- a/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java +++ b/bundles/org.eclipse.equinox.p2.publisher.eclipse/src/org/eclipse/equinox/p2/publisher/eclipse/BundlesAction.java @@ -22,6 +22,7 @@ import org.eclipse.core.runtime.*; import org.eclipse.equinox.frameworkadmin.BundleInfo; import org.eclipse.equinox.internal.p2.core.helpers.LogHelper; import org.eclipse.equinox.internal.p2.metadata.ArtifactKey; +import org.eclipse.equinox.internal.p2.metadata.ProvidedCapability; import org.eclipse.equinox.internal.p2.publisher.Messages; import org.eclipse.equinox.internal.p2.publisher.eclipse.GeneratorBundleInfo; import org.eclipse.equinox.p2.metadata.*; @@ -206,11 +207,43 @@ public class BundlesAction extends AbstractPublisherAction { providedCapabilities.add(MetadataFactory.createProvidedCapability(CAPABILITY_NS_OSGI_BUNDLE, bd.getSymbolicName(), PublisherHelper.fromOSGiVersion(bd.getVersion()))); // Process exported packages - ExportPackageDescription[] exportedPackages = bd.getExportPackages(); - for (ExportPackageDescription packageExport : exportedPackages) { + for (ExportPackageDescription packageExport : bd.getExportPackages()) { providedCapabilities.add(MetadataFactory.createProvidedCapability(PublisherHelper.CAPABILITY_NS_JAVA_PACKAGE, packageExport.getName(), PublisherHelper.fromOSGiVersion(packageExport.getVersion()))); } + // Process generic capabilities + + // TODO + // IProvidedCapability may have to be extended to contain the OSGi directives as well which may be needed for + // Bug 360659, Bug 525368. E.g. with IProvidedCapability.getDirectives() + + // TODO + // The "osgi.wiring.bundle" capability seems equal to p2 "osgi.bundle" capability. + // It may be better to derive it at runtime. + + // TODO + // It may be possible map the "osgi.identity" capability to elements of the IU like the id, the license, etc. + // It may be better to derive it at runtime. + + int numCapName = 0; + for (GenericDescription genericCap : bd.getGenericCapabilities()) { + String capNs = genericCap.getType(); + + Map<String, Object> capAttrs = genericCap.getDeclaredAttributes(); + + // Some capabilities do not follow the OSGi convention to have an attribute with a key equal to their namespace (e.g. "osgi.service") + // In such cases synthesize a unique name + if (!capAttrs.containsKey(capNs)) { + capAttrs = new HashMap<>(capAttrs); + capAttrs.put( + ProvidedCapability.MEMBER_NAME, + String.format("%s_%s-%s", iu.getId(), iu.getVersion(), numCapName++)); //$NON-NLS-1$ + numCapName++; + } + + providedCapabilities.add(MetadataFactory.createProvidedCapability(capNs, capAttrs)); + } + // Add capability to describe the type of bundle if (manifest != null && manifest.containsKey("Eclipse-SourceBundle")) { //$NON-NLS-1$ providedCapabilities.add(SOURCE_BUNDLE_CAPABILITY); diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/BundlesActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/BundlesActionTest.java index dd53c2aee..75eef92d0 100644 --- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/BundlesActionTest.java +++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/publisher/actions/BundlesActionTest.java @@ -40,6 +40,7 @@ import org.eclipse.equinox.spi.p2.publisher.PublisherHelper; public class BundlesActionTest extends ActionTest { private static final String OSGI = PublisherHelper.OSGI_BUNDLE_CLASSIFIER; + private static final String OSGI_IDENTITY = "osgi.identity"; private static final String JAVA_PACKAGE = "java.package";//$NON-NLS-1$ private static final String JAVA_EE_1_4_REQ = "providedCapabilities.exists(pc | pc ~= filter('(&(namespace=osgi.ee)(|(&(osgi.ee=JavaSE)(version=1.4))(&(osgi.ee=CDC/Foundation)(version=1.1))))'))"; private static final String JAVA_EE_1_6_REQ = "providedCapabilities.exists(pc | pc ~= filter('(&(namespace=osgi.ee)(&(osgi.ee=JavaSE)(version=1.6)))'))"; @@ -223,10 +224,11 @@ public class BundlesActionTest extends ActionTest { // check provided capabilities Collection<IProvidedCapability> providedCapabilities = bundle1IU.getProvidedCapabilities(); verifyProvidedCapability(providedCapabilities, PROVBUNDLE_NAMESPACE, TEST1_PROVBUNDLE_NAME, BUNDLE1_VERSION); + verifyProvidedCapability(providedCapabilities, OSGI_IDENTITY, TEST1_PROVBUNDLE_NAME, BUNDLE1_VERSION); verifyProvidedCapability(providedCapabilities, OSGI, TEST1_PROVBUNDLE_NAME, BUNDLE1_VERSION); verifyProvidedCapability(providedCapabilities, TEST1_PROV_Z_NAMESPACE, TEST1_PROVZ_NAME, TEST2_PROVZ_VERSION); verifyProvidedCapability(providedCapabilities, PublisherHelper.NAMESPACE_ECLIPSE_TYPE, "source", Version.create("1.0.0"));//$NON-NLS-1$//$NON-NLS-2$ - assertEquals("2.1", 4, providedCapabilities.size()); + assertEquals("2.1", 5, providedCapabilities.size()); Collection<ITouchpointData> data = bundle1IU.getTouchpointData(); boolean found = false; @@ -262,11 +264,12 @@ public class BundlesActionTest extends ActionTest { Collection<IProvidedCapability> providedCapabilities = bundle2IU.getProvidedCapabilities(); verifyProvidedCapability(providedCapabilities, PROVBUNDLE_NAMESPACE, TEST2_PROV_BUNDLE_NAME, PROVBUNDLE2_VERSION); verifyProvidedCapability(providedCapabilities, OSGI, TEST2_PROV_BUNDLE_NAME, BUNDLE2_VERSION); + verifyProvidedCapability(providedCapabilities, OSGI_IDENTITY, TEST2_PROV_BUNDLE_NAME, BUNDLE2_VERSION); verifyProvidedCapability(providedCapabilities, TEST2_PROV_Z_NAMESPACE, TEST2_PROV_Z_NAME, TEST2_PROVZ_VERSION); verifyProvidedCapability(providedCapabilities, TEST2_PROV_Y_NAMESPACE, TEST2_PROV_Y_NAME, TEST2_PROVY_VERSION); verifyProvidedCapability(providedCapabilities, TEST2_PROV_X_NAMESPACE, TEST2_PROV_X_NAME, TEST2_PROVX_VERSION); verifyProvidedCapability(providedCapabilities, PublisherHelper.NAMESPACE_ECLIPSE_TYPE, "bundle", Version.create("1.0.0"));//$NON-NLS-1$//$NON-NLS-2$ - assertEquals(6, providedCapabilities.size()); /*number of tested elements*/ + assertEquals(7, providedCapabilities.size()); /*number of tested elements*/ // check %bundle name is correct Map<String, String> prop = bundle2IU.getProperties(); |