Bug 330463 - Optimize manifest TouchPointData memory footprint for MetadataRepositories
diff --git a/bundles/org.eclipse.equinox.p2.metadata/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.metadata/META-INF/MANIFEST.MF
index dd1c720..52afe4b 100644
--- a/bundles/org.eclipse.equinox.p2.metadata/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.p2.metadata/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.metadata;singleton:=true
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.0.1.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.metadata.MetadataActivator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -19,7 +19,8 @@
    org.eclipse.equinox.p2.operations,
    org.eclipse.equinox.p2.publisher,
    org.eclipse.equinox.p2.ql,
-   org.eclipse.equinox.p2.ui",
+   org.eclipse.equinox.p2.ui,
+   org.eclipse.equinox.p2.touchpoint.eclipse",
  org.eclipse.equinox.internal.p2.metadata.expression;
   x-friends:="org.eclipse.equinox.p2.artifact.repository,
    org.eclipse.equinox.p2.directorywatcher,
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/MarkStartedActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/MarkStartedActionTest.java
index d203ecd..84bf1dc 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/MarkStartedActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/MarkStartedActionTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 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
@@ -75,7 +75,7 @@
 		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
 		assertNotNull(manipulator);
 
-		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, Util.getManifest(iu.getTouchpointData()));
+		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, iu);
 		manipulator.getConfigData().addBundle(bundleInfo);
 		assertTrue(isMarkedStarted(manipulator, osgiTarget, false));
 
@@ -121,7 +121,7 @@
 		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
 		assertNotNull(manipulator);
 
-		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, Util.getManifest(iu.getTouchpointData()));
+		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, iu);
 		manipulator.getConfigData().addBundle(bundleInfo);
 		assertTrue(isMarkedStarted(manipulator, osgiTarget, false));
 
@@ -170,7 +170,7 @@
 		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
 		assertNotNull(manipulator);
 
-		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, Util.getManifest(iu.getTouchpointData()));
+		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, iu);
 		manipulator.getConfigData().addBundle(bundleInfo);
 		assertTrue(isMarkedStarted(manipulator, osgiTarget, false));
 
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/SetStartLevelActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/SetStartLevelActionTest.java
index 2dd7d42..371615c 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/SetStartLevelActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/SetStartLevelActionTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 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
@@ -75,7 +75,7 @@
 		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
 		assertNotNull(manipulator);
 
-		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, Util.getManifest(iu.getTouchpointData()));
+		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, iu);
 		manipulator.getConfigData().addBundle(bundleInfo);
 		assertTrue(isStartLevel(manipulator, osgiTarget, -1));
 
@@ -121,7 +121,7 @@
 		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
 		assertNotNull(manipulator);
 
-		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, Util.getManifest(iu.getTouchpointData()));
+		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, iu);
 		manipulator.getConfigData().addBundle(bundleInfo);
 		assertTrue(isStartLevel(manipulator, osgiTarget, -1));
 
@@ -170,7 +170,7 @@
 		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
 		assertNotNull(manipulator);
 
-		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, Util.getManifest(iu.getTouchpointData()));
+		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, iu);
 		manipulator.getConfigData().addBundle(bundleInfo);
 		assertTrue(isStartLevel(manipulator, osgiTarget, -1));
 
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/UninstallBundleActionTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/UninstallBundleActionTest.java
index 70d7f78..7c705b5 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/UninstallBundleActionTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/UninstallBundleActionTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 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
@@ -75,7 +75,7 @@
 		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
 		assertNotNull(manipulator);
 
-		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, Util.getManifest(iu.getTouchpointData()));
+		BundleInfo bundleInfo = Util.createBundleInfo(osgiTarget, iu);
 		manipulator.getConfigData().addBundle(bundleInfo);
 		assertTrue(inBundles(manipulator, osgiTarget));
 		UninstallBundleAction action = new UninstallBundleAction();
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/UtilTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/UtilTest.java
index 2e1176e..4e3e786 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/UtilTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/UtilTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others.
+ * Copyright (c) 2008, 2010 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
@@ -12,15 +12,12 @@
 
 import java.io.File;
 import java.net.MalformedURLException;
-import java.util.Collections;
 import java.util.Properties;
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import org.eclipse.equinox.internal.p2.touchpoint.eclipse.Util;
 import org.eclipse.equinox.p2.core.IAgentLocation;
 import org.eclipse.equinox.p2.engine.IProfile;
-import org.eclipse.equinox.p2.metadata.ITouchpointData;
-import org.eclipse.equinox.p2.metadata.MetadataFactory;
 import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
 
 /**
@@ -54,9 +51,4 @@
 		IProfile profile = createProfile("test", props);
 		assertEquals(cacheDir.toURL().toExternalForm(), Util.getBundlePoolLocation(getAgent(), profile).toString());
 	}
-
-	public void testMissingManifest() {
-		ITouchpointData emptyData = MetadataFactory.createTouchpointData(Collections.EMPTY_MAP);
-		assertNull(Util.getManifest(Collections.singletonList(emptyData)));
-	}
 }
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
index a39151a..62fcbed 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.equinox.p2.touchpoint.eclipse;singleton:=true
-Bundle-Version: 2.0.2.qualifier
+Bundle-Version: 2.0.3.qualifier
 Bundle-Activator: org.eclipse.equinox.internal.p2.touchpoint.eclipse.Activator
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -20,6 +20,7 @@
  org.eclipse.equinox.internal.p2.core.helpers,
  org.eclipse.equinox.internal.p2.engine,
  org.eclipse.equinox.internal.p2.garbagecollector,
+ org.eclipse.equinox.internal.p2.metadata,
  org.eclipse.equinox.internal.provisional.frameworkadmin,
  org.eclipse.equinox.internal.provisional.p2.director;resolution:=optional,
  org.eclipse.equinox.internal.provisional.p2.repository,
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/Util.java b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/Util.java
index d0cb5c6..982e90f 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/Util.java
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/Util.java
@@ -12,12 +12,14 @@
  *******************************************************************************/
 package org.eclipse.equinox.internal.p2.touchpoint.eclipse;
 
-import java.io.*;
+import java.io.File;
+import java.io.IOException;
 import java.net.*;
 import java.util.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.equinox.frameworkadmin.BundleInfo;
 import org.eclipse.equinox.internal.p2.core.helpers.*;
+import org.eclipse.equinox.internal.p2.metadata.IRequiredCapability;
 import org.eclipse.equinox.p2.core.*;
 import org.eclipse.equinox.p2.engine.IProfile;
 import org.eclipse.equinox.p2.metadata.*;
@@ -25,10 +27,7 @@
 import org.eclipse.equinox.p2.repository.artifact.*;
 import org.eclipse.osgi.service.datalocation.Location;
 import org.eclipse.osgi.service.environment.EnvironmentInfo;
-import org.eclipse.osgi.util.ManifestElement;
 import org.eclipse.osgi.util.NLS;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.Constants;
 
 public class Util {
 
@@ -157,43 +156,48 @@
 		return listProperty;
 	}
 
-	public static BundleInfo createBundleInfo(File bundleFile, String manifest) {
+	public static BundleInfo createBundleInfo(File bundleFile, IInstallableUnit unit) {
 		BundleInfo bundleInfo = new BundleInfo();
 		if (bundleFile != null)
 			bundleInfo.setLocation(bundleFile.toURI());
 
-		bundleInfo.setManifest(manifest);
-		try {
-			@SuppressWarnings("unchecked")
-			Map<String, String> headers = ManifestElement.parseBundleManifest(new ByteArrayInputStream(manifest.getBytes("UTF-8")), new HashMap<String, String>()); //$NON-NLS-1$
-			ManifestElement[] element = ManifestElement.parseHeader("bsn", headers.get(Constants.BUNDLE_SYMBOLICNAME)); //$NON-NLS-1$
-			if (element == null || element.length == 0)
-				return null;
-			bundleInfo.setSymbolicName(element[0].getValue());
-
-			String version = headers.get(Constants.BUNDLE_VERSION);
-			if (version == null)
-				return null;
-			// convert to a Version object first to ensure we are consistent with our version number w.r.t.
-			// padding zeros at the end
-			bundleInfo.setVersion(Version.parseVersion(version).toString());
-
-			String fragmentHost = headers.get(Constants.FRAGMENT_HOST);
-			if (fragmentHost != null)
-				bundleInfo.setFragmentHost(fragmentHost.trim());
-
-		} catch (BundleException e) {
-			// unexpected
-			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, e.getMessage(), e));
-			return null;
-		} catch (IOException e) {
-			// unexpected
-			LogHelper.log(new Status(IStatus.ERROR, Activator.ID, e.getMessage(), e));
-			return null;
+		Collection<IProvidedCapability> capabilities = unit.getProvidedCapabilities();
+		for (IProvidedCapability capability : capabilities) {
+			String nameSpace = capability.getNamespace();
+			if (nameSpace.equals("osgi.bundle")) { //$NON-NLS-1$
+				bundleInfo.setSymbolicName(capability.getName());
+				bundleInfo.setVersion(capability.getVersion().toString());
+			} else if (nameSpace.equals("osgi.fragment")) { //$NON-NLS-1$
+				String fragmentName = capability.getName();
+				String fragmentHost = getFragmentHost(unit, fragmentName);
+				// shouldn't happen as long as the metadata is well-formed
+				if (fragmentHost == null)
+					LogHelper.log(createError("Unable to find fragment host for IU: " + unit)); //$NON-NLS-1$
+				else
+					bundleInfo.setFragmentHost(fragmentHost);
+				bundleInfo.setVersion(capability.getVersion().toString());
+			}
 		}
 		return bundleInfo;
 	}
 
+	private static String getFragmentHost(IInstallableUnit unit, String fragmentName) {
+		Collection<IRequirement> requires = unit.getRequirements();
+		for (IRequirement iRequirement : requires) {
+			if (iRequirement instanceof IRequiredCapability) {
+				IRequiredCapability requiredCapability = (IRequiredCapability) iRequirement;
+				if (fragmentName.equals(requiredCapability.getName())) {
+					String fragmentHost = requiredCapability.getName();
+					if (!requiredCapability.getRange().toString().equals("0.0.0")) { //$NON-NLS-1$
+						fragmentHost += ";bundle-version=\"" + requiredCapability.getRange() + '"'; //$NON-NLS-1$
+					}
+					return fragmentHost;
+				}
+			}
+		}
+		return null;
+	}
+
 	public static File getArtifactFile(IProvisioningAgent agent, IArtifactKey artifactKey, IProfile profile) {
 		IFileArtifactRepository aggregatedView = getAggregatedBundleRepository(agent, profile);
 		File bundleJar = aggregatedView.getArtifactFile(artifactKey);
@@ -314,18 +318,6 @@
 		return null;
 	}
 
-	public static String getManifest(Collection<ITouchpointData> data) {
-		for (ITouchpointData td : data) {
-			ITouchpointInstruction manifestInstruction = td.getInstruction("manifest"); //$NON-NLS-1$
-			if (manifestInstruction == null)
-				return null;
-			String manifest = manifestInstruction.getBody();
-			if (manifest != null && manifest.length() > 0)
-				return manifest;
-		}
-		return null;
-	}
-
 	public static IStatus createError(String message) {
 		return createError(message, null);
 	}
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/InstallBundleAction.java b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/InstallBundleAction.java
index fab1f90..4a2ecfe 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/InstallBundleAction.java
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/InstallBundleAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 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
@@ -69,12 +69,7 @@
 		if (bundleFile == null || !bundleFile.exists())
 			return Util.createError(NLS.bind(Messages.artifact_file_not_found, artifactKey));
 
-		//By now we always have the manifest in the touchpoint data
-		String manifest = Util.getManifest(iu.getTouchpointData());
-		if (manifest == null)
-			return Util.createError(NLS.bind(Messages.missing_manifest, iu));
-
-		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, manifest);
+		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, iu);
 		if (bundleInfo == null)
 			return Util.createError(NLS.bind(Messages.failed_bundleinfo, iu));
 		manipulator.getConfigData().addBundle(bundleInfo);
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/MarkStartedAction.java b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/MarkStartedAction.java
index 52e1f68..832c147 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/MarkStartedAction.java
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/MarkStartedAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 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
@@ -47,11 +47,7 @@
 		// the bundleFile might be null here, that's OK.
 		File bundleFile = Util.getArtifactFile(agent, artifactKey, profile);
 
-		String manifest = Util.getManifest(iu.getTouchpointData());
-		if (manifest == null)
-			return Util.createError(NLS.bind(Messages.missing_manifest, iu));
-
-		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, manifest);
+		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, iu);
 		if (bundleInfo == null)
 			return Util.createError(NLS.bind(Messages.failed_bundleinfo, iu));
 
@@ -87,11 +83,7 @@
 		// the bundleFile might be null here, that's OK.
 		File bundleFile = Util.getArtifactFile(agent, artifactKey, profile);
 
-		String manifest = Util.getManifest(iu.getTouchpointData());
-		if (manifest == null)
-			return Util.createError(NLS.bind(Messages.missing_manifest, iu));
-
-		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, manifest);
+		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, iu);
 		if (bundleInfo == null)
 			return Util.createError(NLS.bind(Messages.failed_bundleinfo, iu));
 
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetStartLevelAction.java b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetStartLevelAction.java
index 9d2f3c4..9452c71 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetStartLevelAction.java
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/SetStartLevelAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2008, 2009 IBM Corporation and others.
+ *  Copyright (c) 2008, 2010 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
@@ -46,11 +46,7 @@
 		// the bundleFile might be null here, that's OK.
 		File bundleFile = Util.getArtifactFile(agent, artifactKey, profile);
 
-		String manifest = Util.getManifest(iu.getTouchpointData());
-		if (manifest == null)
-			return Util.createError(NLS.bind(Messages.missing_manifest, iu));
-
-		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, manifest);
+		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, iu);
 		if (bundleInfo == null)
 			return Util.createError(NLS.bind(Messages.failed_bundleinfo, iu));
 
@@ -90,11 +86,7 @@
 		// the bundleFile might be null here, that's OK.
 		File bundleFile = Util.getArtifactFile(agent, artifactKey, profile);
 
-		String manifest = Util.getManifest(iu.getTouchpointData());
-		if (manifest == null)
-			return Util.createError(NLS.bind(Messages.missing_manifest, iu));
-
-		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, manifest);
+		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, iu);
 		if (bundleInfo == null)
 			return Util.createError(NLS.bind(Messages.failed_bundleinfo, iu));
 
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/UninstallBundleAction.java b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/UninstallBundleAction.java
index 0d40709..a20aae9 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/UninstallBundleAction.java
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/UninstallBundleAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
+ * Copyright (c) 2008, 2010 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
@@ -68,11 +68,7 @@
 		// the bundleFile might be null here, that's OK.
 		File bundleFile = Util.getArtifactFile(agent, artifactKey, profile);
 
-		String manifest = Util.getManifest(iu.getTouchpointData());
-		if (manifest == null)
-			return Util.createError(NLS.bind(Messages.missing_manifest, iu));
-
-		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, manifest);
+		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, iu);
 		if (bundleInfo == null)
 			return Util.createError(NLS.bind(Messages.failed_bundleinfo, iu));
 		manipulator.getConfigData().removeBundle(bundleInfo);