View | Details | Raw Unified | Return to bug 241477
Collapse All | Expand All

(-)plugin.xml (+20 lines)
Lines 78-83 Link Here
78
 <extension
78
 <extension
79
       point="org.eclipse.equinox.p2.engine.actions">
79
       point="org.eclipse.equinox.p2.engine.actions">
80
    <action
80
    <action
81
          class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.InstallExtensionAction"
82
          name="installExtension"
83
          touchpointType="org.eclipse.equinox.p2.osgi"
84
          touchpointVersion="1.0.0"
85
          version="1.0.0">
86
    </action>
87
 </extension> 
88
<extension
89
       point="org.eclipse.equinox.p2.engine.actions">
90
    <action
81
          class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.InstallFeatureAction"
91
          class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.InstallFeatureAction"
82
          name="installFeature"
92
          name="installFeature"
83
          touchpointType="org.eclipse.equinox.p2.osgi"
93
          touchpointType="org.eclipse.equinox.p2.osgi"
Lines 198-203 Link Here
198
 <extension
208
 <extension
199
       point="org.eclipse.equinox.p2.engine.actions">
209
       point="org.eclipse.equinox.p2.engine.actions">
200
    <action
210
    <action
211
          class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.UninstallExtensionAction"
212
          name="uninstallExtension"
213
          touchpointType="org.eclipse.equinox.p2.osgi"
214
          touchpointVersion="1.0.0"
215
          version="1.0.0">
216
    </action>
217
  </extension>
218
  <extension
219
       point="org.eclipse.equinox.p2.engine.actions">
220
    <action
201
          class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.UninstallFeatureAction"
221
          class="org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.UninstallFeatureAction"
202
          name="uninstallFeature"
222
          name="uninstallFeature"
203
          touchpointType="org.eclipse.equinox.p2.osgi"
223
          touchpointType="org.eclipse.equinox.p2.osgi"
(-)src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/UninstallExtensionAction.java (+72 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
3
 * program and the accompanying materials are made available under the terms of
4
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
5
 * available at http://www.eclipse.org/legal/epl-v10.html
6
 * 
7
 * Contributors: IBM Corporation - initial API and implementation
8
 ******************************************************************************/
9
package org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions;
10
11
import java.io.File;
12
import java.util.Map;
13
import org.eclipse.core.runtime.IStatus;
14
import org.eclipse.core.runtime.Status;
15
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.EclipseTouchpoint;
16
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.Util;
17
import org.eclipse.equinox.internal.provisional.frameworkadmin.BundleInfo;
18
import org.eclipse.equinox.internal.provisional.frameworkadmin.Manipulator;
19
import org.eclipse.equinox.internal.provisional.p2.engine.IProfile;
20
import org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningAction;
21
import org.eclipse.equinox.internal.provisional.p2.metadata.IArtifactKey;
22
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
23
import org.eclipse.osgi.util.NLS;
24
25
public class UninstallExtensionAction extends ProvisioningAction {
26
	public static final String ID = "uninstallBundle"; //$NON-NLS-1$
27
28
	public IStatus execute(Map parameters) {
29
		return UninstallExtensionAction.uninstallExtension(parameters);
30
	}
31
32
	public IStatus undo(Map parameters) {
33
		return InstallExtensionAction.installExtension(parameters);
34
	}
35
36
	public static IStatus uninstallExtension(Map parameters) {
37
		IProfile profile = (IProfile) parameters.get(ActionConstants.PARM_PROFILE);
38
		IInstallableUnit iu = (IInstallableUnit) parameters.get(EclipseTouchpoint.PARM_IU);
39
		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
40
		String bundleId = (String) parameters.get(ActionConstants.PARM_BUNDLE);
41
		if (bundleId == null)
42
			return Util.createError(NLS.bind(Messages.parameter_not_set, ActionConstants.PARM_BUNDLE, ID));
43
44
		IArtifactKey[] artifacts = iu.getArtifacts();
45
		if (artifacts == null || artifacts.length == 0)
46
			return Util.createError(NLS.bind(Messages.iu_contains_no_arifacts, iu));
47
48
		IArtifactKey artifactKey = null;
49
		for (int i = 0; i < artifacts.length; i++) {
50
			if (artifacts[i].toString().equals(bundleId)) {
51
				artifactKey = artifacts[i];
52
				break;
53
			}
54
		}
55
		if (artifactKey == null)
56
			throw new IllegalArgumentException(NLS.bind(Messages.no_matching_artifact, bundleId));
57
58
		// the bundleFile might be null here, that's OK.
59
		File bundleFile = Util.getArtifactFile(artifactKey, profile);
60
61
		String manifest = Util.getManifest(iu.getTouchpointData());
62
		if (manifest == null)
63
			return Util.createError(NLS.bind(Messages.missing_manifest, iu));
64
65
		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, manifest);
66
		if (bundleInfo == null)
67
			return Util.createError(NLS.bind(Messages.failed_bundleinfo, iu));
68
		manipulator.getConfigData().removeExtension(bundleInfo);
69
70
		return Status.OK_STATUS;
71
	}
72
}
(-)src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/actions/InstallExtensionAction.java (+74 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
3
 * program and the accompanying materials are made available under the terms of
4
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
5
 * available at http://www.eclipse.org/legal/epl-v10.html
6
 * 
7
 * Contributors: IBM Corporation - initial API and implementation
8
 ******************************************************************************/
9
package org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions;
10
11
import java.io.File;
12
import java.util.Map;
13
import org.eclipse.core.runtime.IStatus;
14
import org.eclipse.core.runtime.Status;
15
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.EclipseTouchpoint;
16
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.Util;
17
import org.eclipse.equinox.internal.provisional.frameworkadmin.BundleInfo;
18
import org.eclipse.equinox.internal.provisional.frameworkadmin.Manipulator;
19
import org.eclipse.equinox.internal.provisional.p2.engine.IProfile;
20
import org.eclipse.equinox.internal.provisional.p2.engine.ProvisioningAction;
21
import org.eclipse.equinox.internal.provisional.p2.metadata.IArtifactKey;
22
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
23
import org.eclipse.osgi.util.NLS;
24
25
public class InstallExtensionAction extends ProvisioningAction {
26
	public static final String ID = "installBundle"; //$NON-NLS-1$
27
28
	public IStatus execute(Map parameters) {
29
		return InstallExtensionAction.installExtension(parameters);
30
	}
31
32
	public IStatus undo(Map parameters) {
33
		return UninstallExtensionAction.uninstallExtension(parameters);
34
	}
35
36
	public static IStatus installExtension(Map parameters) {
37
		IProfile profile = (IProfile) parameters.get(ActionConstants.PARM_PROFILE);
38
		IInstallableUnit iu = (IInstallableUnit) parameters.get(EclipseTouchpoint.PARM_IU);
39
		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
40
		String bundleId = (String) parameters.get(ActionConstants.PARM_BUNDLE);
41
		if (bundleId == null)
42
			return Util.createError(NLS.bind(Messages.parameter_not_set, ActionConstants.PARM_BUNDLE, ID));
43
44
		IArtifactKey[] artifacts = iu.getArtifacts();
45
		if (artifacts == null || artifacts.length == 0)
46
			return Util.createError(NLS.bind(Messages.iu_contains_no_arifacts, iu));
47
48
		IArtifactKey artifactKey = null;
49
		for (int i = 0; i < artifacts.length; i++) {
50
			if (artifacts[i].toString().equals(bundleId)) {
51
				artifactKey = artifacts[i];
52
				break;
53
			}
54
		}
55
		if (artifactKey == null)
56
			throw new IllegalArgumentException(NLS.bind(Messages.no_matching_artifact, bundleId));
57
58
		File bundleFile = Util.getArtifactFile(artifactKey, profile);
59
		if (bundleFile == null || !bundleFile.exists())
60
			return Util.createError(NLS.bind(Messages.artifact_file_not_found, artifactKey));
61
62
		//By now we always have the manifest in the touchpoint data
63
		String manifest = Util.getManifest(iu.getTouchpointData());
64
		if (manifest == null)
65
			return Util.createError(NLS.bind(Messages.missing_manifest, iu));
66
67
		BundleInfo bundleInfo = Util.createBundleInfo(bundleFile, manifest);
68
		if (bundleInfo == null)
69
			return Util.createError(NLS.bind(Messages.failed_bundleinfo, iu));
70
		manipulator.getConfigData().addExtension(bundleInfo);
71
72
		return Status.OK_STATUS;
73
	}
74
}
(-)src/org/eclipse/equinox/internal/provisional/frameworkadmin/ConfigData.java (+33 lines)
Lines 48-53 Link Here
48
	// List of BundleInfo
48
	// List of BundleInfo
49
	private LinkedHashSet bundlesList = new LinkedHashSet();
49
	private LinkedHashSet bundlesList = new LinkedHashSet();
50
50
51
	// List of BundleInfo
52
	private LinkedHashSet extensionsList = new LinkedHashSet();
53
51
	private Properties properties = new Properties();
54
	private Properties properties = new Properties();
52
55
53
	public ConfigData(String fwName, String fwVersion, String launcherName, String launcherVersion) {
56
	public ConfigData(String fwName, String fwVersion, String launcherName, String launcherVersion) {
Lines 74-79 Link Here
74
		return ret;
77
		return ret;
75
	}
78
	}
76
79
80
	public void addExtension(BundleInfo bundleInfo) {
81
		extensionsList.add(bundleInfo);
82
	}
83
84
	public BundleInfo[] getExtensions() {
85
		if (extensionsList.size() == 0)
86
			return new BundleInfo[0];
87
		BundleInfo[] ret = new BundleInfo[extensionsList.size()];
88
		extensionsList.toArray(ret);
89
		return ret;
90
	}
91
92
	public boolean removeExtension(BundleInfo bundleInfo) {
93
		if (bundleInfo == null || bundleInfo.getSymbolicName() == null || bundleInfo.getVersion() == null)
94
			throw new IllegalArgumentException("Bundle info can't be null:" + bundleInfo); //$NON-NLS-1$
95
		return extensionsList.remove(bundleInfo);
96
	}
97
77
	public String getProperty(String key) {
98
	public String getProperty(String key) {
78
		return properties.getProperty(key);
99
		return properties.getProperty(key);
79
	}
100
	}
Lines 108-113 Link Here
108
		beginningFwStartLevel = BundleInfo.NO_LEVEL;
129
		beginningFwStartLevel = BundleInfo.NO_LEVEL;
109
		initialBundleStartLevel = BundleInfo.NO_LEVEL;
130
		initialBundleStartLevel = BundleInfo.NO_LEVEL;
110
		bundlesList.clear();
131
		bundlesList.clear();
132
		extensionsList.clear();
111
		properties.clear();
133
		properties.clear();
112
		properties.clear();
134
		properties.clear();
113
	}
135
	}
Lines 166-171 Link Here
166
			}
188
			}
167
		}
189
		}
168
190
191
		if (this.extensionsList.size() == 0)
192
			sb.append("extensionsList=null\n"); //$NON-NLS-1$
193
		else {
194
			sb.append("extensionsList=\n"); //$NON-NLS-1$
195
			int i = 0;
196
			for (Iterator iter = extensionsList.iterator(); iter.hasNext();) {
197
				sb.append("\nextensionsList[" + i + "]=" + iter.next().toString() + "\n"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
198
				i++;
199
			}
200
		}
201
169
		sb.append("============ Properties ===============\n"); //$NON-NLS-1$
202
		sb.append("============ Properties ===============\n"); //$NON-NLS-1$
170
		sb.append("fwIndependentProps="); //$NON-NLS-1$
203
		sb.append("fwIndependentProps="); //$NON-NLS-1$
171
		setPropsStrings(sb, properties);
204
		setPropsStrings(sb, properties);
(-)src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxFwConfigFileParser.java (+65 lines)
Lines 83-88 Link Here
83
		return BundleInfo.NO_LEVEL;
83
		return BundleInfo.NO_LEVEL;
84
	}
84
	}
85
85
86
	private void readExtensionsList(Manipulator manipulator, URI osgiInstallArea, String value) throws NumberFormatException {
87
		BundleInfo[] bundles = parseExtensionsList(manipulator, value);
88
		if (bundles == null)
89
			return;
90
91
		ConfigData configData = manipulator.getConfigData();
92
		for (int i = 0; i < bundles.length; i++) {
93
			configData.addExtension(bundles[i]);
94
		}
95
	}
96
97
	private BundleInfo[] parseExtensionsList(Manipulator manipulator, String value) {
98
		if (value == null || value.length() == 0)
99
			return null;
100
101
		List bundles = new ArrayList();
102
		String[] bInfoStrings = Utils.getTokens(value, ","); //$NON-NLS-1$
103
		for (int i = 0; i < bInfoStrings.length; i++) {
104
			String entry = bInfoStrings[i].trim();
105
			entry = FileUtils.removeEquinoxSpecificProtocols(entry);
106
107
			int indexStartInfo = entry.indexOf('@');
108
			String location = (indexStartInfo == -1) ? entry : entry.substring(0, indexStartInfo);
109
			URI realLocation = null;
110
			try {
111
				if (manipulator.getLauncherData().getFwJar() != null) {
112
					realLocation = URIUtil.makeAbsolute(FileUtils.fromFileURL(location), manipulator.getLauncherData().getFwJar().getParentFile().toURI());
113
				}
114
			} catch (URISyntaxException e) {
115
				Log.log(LogService.LOG_ERROR, "Can't make absolute..."); //$NON-NLS-1$
116
				continue;
117
			}
118
119
			if (realLocation != null) {
120
				bundles.add(new BundleInfo(realLocation));
121
				continue;
122
			}
123
			if (location != null && location.startsWith(FILE_PROTOCOL))
124
				try {
125
					bundles.add(new BundleInfo(FileUtils.fromFileURL(location)));
126
					continue;
127
				} catch (URISyntaxException e) {
128
					//Ignore
129
				}
130
131
			//Fallback case, we use the location as a string
132
			bundles.add(new BundleInfo(location, null, null, BundleInfo.NO_LEVEL, false));
133
		}
134
		return (BundleInfo[]) bundles.toArray(new BundleInfo[bundles.size()]);
135
	}
136
137
	private void writeExtensionsList(File fwJar, Properties props, URI base, BundleInfo[] bundles) {
138
		StringBuffer osgiExtensionsList = new StringBuffer();
139
		for (int j = 0; j < bundles.length; j++) {
140
			URI location = fwJar != null ? URIUtil.makeRelative(bundles[j].getLocation(), fwJar.getParentFile().toURI()) : bundles[j].getLocation();
141
			osgiExtensionsList.append(toOSGiBundleListForm(bundles[j], location));
142
			if (j < bundles.length - 1) //If it is not the last entry add a comma to separate the entries
143
				osgiExtensionsList.append(',');
144
		}
145
		props.setProperty(EquinoxConstants.PROP_EXTENSIONS, osgiExtensionsList.toString());
146
	}
147
86
	private void readBundlesList(Manipulator manipulator, URI osgiInstallArea, String value) throws NumberFormatException {
148
	private void readBundlesList(Manipulator manipulator, URI osgiInstallArea, String value) throws NumberFormatException {
87
		BundleInfo[] bundles = parseBundleList(manipulator, value);
149
		BundleInfo[] bundles = parseBundleList(manipulator, value);
88
		if (bundles == null)
150
		if (bundles == null)
Lines 196-201 Link Here
196
		readp2DataArea(props, configArea);
258
		readp2DataArea(props, configArea);
197
		readSimpleConfiguratorURL(props, configArea);
259
		readSimpleConfiguratorURL(props, configArea);
198
		readBundlesList(manipulator, ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), props, launcherData).toURI(), props.getProperty(EquinoxConstants.PROP_BUNDLES));
260
		readBundlesList(manipulator, ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), props, launcherData).toURI(), props.getProperty(EquinoxConstants.PROP_BUNDLES));
261
		readExtensionsList(manipulator, ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), props, launcherData).toURI(), props.getProperty(EquinoxConstants.PROP_EXTENSIONS));
262
199
		readInitialStartLeve(configData, props);
263
		readInitialStartLeve(configData, props);
200
		readDefaultStartLevel(configData, props);
264
		readDefaultStartLevel(configData, props);
201
		//		if (key.equals(EquinoxConstants.PROP_LAUNCHER_NAME))
265
		//		if (key.equals(EquinoxConstants.PROP_LAUNCHER_NAME))
Lines 427-432 Link Here
427
			writep2DataArea(configData, configProps, configArea);
491
			writep2DataArea(configData, configProps, configArea);
428
			writeSimpleConfiguratorURL(configData, configProps, configArea);
492
			writeSimpleConfiguratorURL(configData, configProps, configArea);
429
			writeBundlesList(launcherData.getFwJar(), configProps, ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), configProps, launcherData).toURI(), bInfos);
493
			writeBundlesList(launcherData.getFwJar(), configProps, ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), configProps, launcherData).toURI(), bInfos);
494
			writeExtensionsList(launcherData.getFwJar(), configProps, ParserUtils.getOSGiInstallArea(Arrays.asList(launcherData.getProgramArgs()), configProps, launcherData).toURI(), bInfos);
430
			writeInitialStartLevel(configData, configProps);
495
			writeInitialStartLevel(configData, configProps);
431
			writeDefaultStartLevel(configData, configProps);
496
			writeDefaultStartLevel(configData, configProps);
432
		} catch (URISyntaxException e) {
497
		} catch (URISyntaxException e) {
(-)src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxConstants.java (+1 lines)
Lines 50-55 Link Here
50
	public static final String PROP_LAUNCHER_PATH = "osgi.launcherPath"; //$NON-NLS-1$
50
	public static final String PROP_LAUNCHER_PATH = "osgi.launcherPath"; //$NON-NLS-1$
51
	public static final String PROP_LAUNCHER_NAME = "osgi.launcherIni"; //$NON-NLS-1$
51
	public static final String PROP_LAUNCHER_NAME = "osgi.launcherIni"; //$NON-NLS-1$
52
	public static final String PROP_SHARED_CONFIGURATION_AREA = "osgi.sharedConfiguration.area"; //$NON-NLS-1$	
52
	public static final String PROP_SHARED_CONFIGURATION_AREA = "osgi.sharedConfiguration.area"; //$NON-NLS-1$	
53
	public static final String PROP_EXTENSIONS = "osgi.framework.extensions"; //$NON-NLS-1$
53
54
54
	public static final String INI_EXTENSION = ".ini"; //$NON-NLS-1$
55
	public static final String INI_EXTENSION = ".ini"; //$NON-NLS-1$
55
	public static final String EXE_EXTENSION = ".exe"; //$NON-NLS-1$
56
	public static final String EXE_EXTENSION = ".exe"; //$NON-NLS-1$
(-)testData/eclipseTouchpoint/bundles/NothingFragment_1.0.0.jar (+9 lines)
Added Link Here
1
PK
2
éx<:	META-INF/þÊPK
3
èx<:IÁ‰"èMETA-INF/MANIFEST.MFmÁ
4
Â0Dï…üC~ ÁO9
5
ڃï1]ãB»[“Tôïµ`ƒoïÍLc	¯“:CˆÈdd©7¢ØÍÔ š/Ͱʨµ#Ùrº!ù}°~Jr
6
Yë^ã…tõlýž/÷« “‘¼7àAsô˜{'¸Ï ¯ŸàæôY¨éiéy¬ºZ•z+
7
Q¼PK
8
éx<:	íAMETA-INF/þÊPK
9
èx<:IÁ‰"è¤+META-INF/MANIFEST.MFPK}í
(-)src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/InstallExtensionActionTest.java (+92 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
3
 * program and the accompanying materials are made available under the terms of
4
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
5
 * available at http://www.eclipse.org/legal/epl-v10.html
6
 * 
7
 * Contributors: IBM Corporation - initial API and implementation
8
 ******************************************************************************/
9
package org.eclipse.equinox.p2.tests.touchpoint.eclipse;
10
11
import java.io.File;
12
import java.net.URI;
13
import java.util.*;
14
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.EclipseTouchpoint;
15
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.Util;
16
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.ActionConstants;
17
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.InstallExtensionAction;
18
import org.eclipse.equinox.internal.provisional.frameworkadmin.BundleInfo;
19
import org.eclipse.equinox.internal.provisional.frameworkadmin.Manipulator;
20
import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IArtifactDescriptor;
21
import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IFileArtifactRepository;
22
import org.eclipse.equinox.internal.provisional.p2.engine.*;
23
import org.eclipse.equinox.internal.provisional.p2.metadata.IArtifactKey;
24
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
25
import org.eclipse.equinox.p2.publisher.eclipse.BundlesAction;
26
import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
27
import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
28
import org.eclipse.osgi.service.resolver.BundleDescription;
29
30
public class InstallExtensionActionTest extends AbstractProvisioningTest {
31
32
	public InstallExtensionActionTest(String name) {
33
		super(name);
34
	}
35
36
	public InstallExtensionActionTest() {
37
		super("");
38
	}
39
40
	public void testExecuteUndo() {
41
		Properties profileProperties = new Properties();
42
		File installFolder = getTempFolder();
43
		profileProperties.setProperty(IProfile.PROP_INSTALL_FOLDER, installFolder.toString());
44
		profileProperties.setProperty(IProfile.PROP_CACHE, installFolder.toString());
45
		IProfile profile = createProfile("test", null, profileProperties);
46
47
		IFileArtifactRepository bundlePool = Util.getBundlePoolRepository(profile);
48
		File targetPlugins = new File(installFolder, "plugins");
49
		assertTrue(targetPlugins.mkdir());
50
		File fragSource = getTestData("1.0", "/testData/eclipseTouchpoint/bundles/NothingFragment_1.0.0.jar");
51
		File fragTarget = new File(targetPlugins, "NothingFragment_1.0.0.jar");
52
		copy("2.0", fragSource, fragTarget);
53
		BundleDescription fragDescription = BundlesAction.createBundleDescription(fragTarget);
54
		IArtifactKey fragKey = BundlesAction.createBundleArtifactKey(fragDescription.getSymbolicName(), fragDescription.getVersion().toString());
55
		IArtifactDescriptor fragDescriptor = PublisherHelper.createArtifactDescriptor(fragKey, fragTarget);
56
		IInstallableUnit iufrag = createBundleIU(fragDescription, fragTarget.isDirectory(), fragKey);
57
		bundlePool.addDescriptor(fragDescriptor);
58
59
		Map parameters = new HashMap();
60
		parameters.put(ActionConstants.PARM_PROFILE, profile);
61
		parameters.put(InstallableUnitPhase.PARM_ARTIFACT_REQUESTS, new ArrayList());
62
		EclipseTouchpoint touchpoint = new EclipseTouchpoint();
63
		touchpoint.initializePhase(null, profile, "test", parameters);
64
		InstallableUnitOperand operand = new InstallableUnitOperand(null, iufrag);
65
		parameters.put("iu", operand.second());
66
		touchpoint.initializeOperand(profile, operand, parameters);
67
68
		parameters.put(ActionConstants.PARM_BUNDLE, fragKey.toString());
69
		parameters = Collections.unmodifiableMap(parameters);
70
71
		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
72
		assertNotNull(manipulator);
73
74
		assertFalse(inBundles(manipulator, fragTarget));
75
		InstallExtensionAction action = new InstallExtensionAction();
76
		action.execute(parameters);
77
		assertTrue(inBundles(manipulator, fragTarget));
78
		action.undo(parameters);
79
		assertFalse(inBundles(manipulator, fragTarget));
80
	}
81
82
	private boolean inBundles(Manipulator manipulator, File fragTarget) {
83
		URI location = fragTarget.toURI();
84
		BundleInfo[] bundles = manipulator.getConfigData().getExtensions();
85
		for (int i = 0; i < bundles.length; i++) {
86
			if (location.equals(bundles[i].getLocation()))
87
				return true;
88
		}
89
		return false;
90
	}
91
92
}
(-)src/org/eclipse/equinox/p2/tests/touchpoint/eclipse/UninstallExtensionActionTest.java (+95 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others. All rights reserved. This
3
 * program and the accompanying materials are made available under the terms of
4
 * the Eclipse Public License v1.0 which accompanies this distribution, and is
5
 * available at http://www.eclipse.org/legal/epl-v10.html
6
 * 
7
 * Contributors: IBM Corporation - initial API and implementation
8
 ******************************************************************************/
9
package org.eclipse.equinox.p2.tests.touchpoint.eclipse;
10
11
import java.io.File;
12
import java.net.URI;
13
import java.util.*;
14
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.EclipseTouchpoint;
15
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.Util;
16
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.ActionConstants;
17
import org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.UninstallExtensionAction;
18
import org.eclipse.equinox.internal.provisional.frameworkadmin.BundleInfo;
19
import org.eclipse.equinox.internal.provisional.frameworkadmin.Manipulator;
20
import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IArtifactDescriptor;
21
import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IFileArtifactRepository;
22
import org.eclipse.equinox.internal.provisional.p2.engine.*;
23
import org.eclipse.equinox.internal.provisional.p2.metadata.IArtifactKey;
24
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
25
import org.eclipse.equinox.p2.publisher.eclipse.BundlesAction;
26
import org.eclipse.equinox.p2.tests.AbstractProvisioningTest;
27
import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
28
import org.eclipse.osgi.service.resolver.BundleDescription;
29
30
public class UninstallExtensionActionTest extends AbstractProvisioningTest {
31
32
	public UninstallExtensionActionTest(String name) {
33
		super(name);
34
	}
35
36
	public UninstallExtensionActionTest() {
37
		super("");
38
	}
39
40
	public void testExecuteUndo() {
41
		Properties profileProperties = new Properties();
42
		File installFolder = getTempFolder();
43
		profileProperties.setProperty(IProfile.PROP_INSTALL_FOLDER, installFolder.toString());
44
		profileProperties.setProperty(IProfile.PROP_CACHE, installFolder.toString());
45
		IProfile profile = createProfile("test", null, profileProperties);
46
47
		IFileArtifactRepository bundlePool = Util.getBundlePoolRepository(profile);
48
		File targetPlugins = new File(installFolder, "plugins");
49
		assertTrue(targetPlugins.mkdir());
50
51
		File fragSource = getTestData("1.0", "/testData/eclipseTouchpoint/bundles/NothingFragment_1.0.0.jar");
52
		File fragTarget = new File(targetPlugins, "NothingFragment_1.0.0.jar");
53
		copy("2.0", fragSource, fragTarget);
54
		BundleDescription fragDescription = BundlesAction.createBundleDescription(fragTarget);
55
		IArtifactKey fragKey = BundlesAction.createBundleArtifactKey(fragDescription.getSymbolicName(), fragDescription.getVersion().toString());
56
		IArtifactDescriptor fragDescriptor = PublisherHelper.createArtifactDescriptor(fragKey, fragTarget);
57
		IInstallableUnit iufrag = createBundleIU(fragDescription, fragTarget.isDirectory(), fragKey);
58
		bundlePool.addDescriptor(fragDescriptor);
59
60
		Map parameters = new HashMap();
61
		parameters.put(ActionConstants.PARM_PROFILE, profile);
62
		parameters.put(InstallableUnitPhase.PARM_ARTIFACT_REQUESTS, new ArrayList());
63
		EclipseTouchpoint touchpoint = new EclipseTouchpoint();
64
		touchpoint.initializePhase(null, profile, "test", parameters);
65
		InstallableUnitOperand operand = new InstallableUnitOperand(null, iufrag);
66
		parameters.put("iu", operand.second());
67
		touchpoint.initializeOperand(profile, operand, parameters);
68
69
		parameters.put(ActionConstants.PARM_BUNDLE, fragKey.toString());
70
		parameters = Collections.unmodifiableMap(parameters);
71
72
		Manipulator manipulator = (Manipulator) parameters.get(EclipseTouchpoint.PARM_MANIPULATOR);
73
		assertNotNull(manipulator);
74
75
		BundleInfo bundleInfo = Util.createBundleInfo(fragTarget, Util.getManifest(iufrag.getTouchpointData()));
76
		manipulator.getConfigData().addExtension(bundleInfo);
77
		assertTrue(inBundles(manipulator, fragTarget));
78
		UninstallExtensionAction action = new UninstallExtensionAction();
79
		action.execute(parameters);
80
		assertFalse(inBundles(manipulator, fragTarget));
81
		action.undo(parameters);
82
		assertTrue(inBundles(manipulator, fragTarget));
83
	}
84
85
	private boolean inBundles(Manipulator manipulator, File fragTarget) {
86
		URI location = fragTarget.toURI();
87
		BundleInfo[] bundles = manipulator.getConfigData().getExtensions();
88
		for (int i = 0; i < bundles.length; i++) {
89
			if (location.equals(bundles[i].getLocation()))
90
				return true;
91
		}
92
		return false;
93
	}
94
95
}

Return to bug 241477