diff options
Diffstat (limited to 'old/org.eclipse.emf.parsley.tests.pde.utils.kepler/src/org/eclipse/emf/parsley/tests/pde/utils/PDETargetPlatformUtils.java')
-rw-r--r-- | old/org.eclipse.emf.parsley.tests.pde.utils.kepler/src/org/eclipse/emf/parsley/tests/pde/utils/PDETargetPlatformUtils.java | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/old/org.eclipse.emf.parsley.tests.pde.utils.kepler/src/org/eclipse/emf/parsley/tests/pde/utils/PDETargetPlatformUtils.java b/old/org.eclipse.emf.parsley.tests.pde.utils.kepler/src/org/eclipse/emf/parsley/tests/pde/utils/PDETargetPlatformUtils.java new file mode 100644 index 000000000..a9df53e67 --- /dev/null +++ b/old/org.eclipse.emf.parsley.tests.pde.utils.kepler/src/org/eclipse/emf/parsley/tests/pde/utils/PDETargetPlatformUtils.java @@ -0,0 +1,101 @@ +package org.eclipse.emf.parsley.tests.pde.utils; +/******************************************************************************* + * Copyright (c) 2013 RCP Vision (http://www.rcp-vision.com) 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: + * Lorenzo Bettini - Initial contribution and API + *******************************************************************************/ + + +import java.io.File; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.osgi.baseadaptor.BaseData; +import org.eclipse.osgi.framework.internal.core.AbstractBundle; +import org.eclipse.pde.core.target.ITargetDefinition; +import org.eclipse.pde.core.target.ITargetLocation; +import org.eclipse.pde.core.target.ITargetPlatformService; +import org.eclipse.pde.core.target.LoadTargetDefinitionJob; +import org.eclipse.pde.internal.core.target.TargetPlatformService; +import org.osgi.framework.Bundle; + +/** + * Implements workaround suggested here: + * https://bugs.eclipse.org/bugs/show_bug.cgi?id=343156 + * This is required when running SwtBot tests in Tycho + * that requires the PDE, for example, for testing that the + * imported projects compile fine, or if they use the DSL, which + * requires PDE projects dependencies. + * + * @author Lorenzo Bettini - some adaptations + */ +@SuppressWarnings("restriction") +public class PDETargetPlatformUtils { + + private static boolean targetPlatformAlreadySet = false; + + /** + * Sets a target platform in the test platform to get workspace builds OK + * with PDE. + * + * @throws Exception + */ + public static void setTargetPlatform() throws Exception { + if (System.getProperty("buildingWithTycho") != null) { + if (targetPlatformAlreadySet) { + System.out.println("Target platform already set"); + return; + } + targetPlatformAlreadySet = true; + System.out.println("Generating a target platform"); + } else { + System.out.println("Using the Workbench's target platform"); + return; + } + + ITargetPlatformService tpService = TargetPlatformService.getDefault(); + ITargetDefinition targetDef = tpService.newTarget(); + targetDef.setName("Tycho platform"); + Bundle[] bundles = Platform.getBundle("org.eclipse.core.runtime").getBundleContext().getBundles(); + List<ITargetLocation> bundleContainers = new ArrayList<ITargetLocation>(); + Set<File> dirs = new HashSet<File>(); + System.out.println("Bundles for the target platform:"); + for (Bundle bundle : bundles) { + System.out.print(bundle); + AbstractBundle bundleImpl = (AbstractBundle) bundle; + BaseData bundleData = (BaseData) bundleImpl.getBundleData(); +// EquinoxBundle bundleImpl = (EquinoxBundle) bundle; +// Generation generation = (Generation) bundleImpl.getModule().getCurrentRevision().getRevisionInfo(); + File file = bundleData.getBundleFile().getBaseFile(); + File folder = file.getParentFile(); + if (!dirs.contains(folder)) { + dirs.add(folder); + bundleContainers.add(tpService.newDirectoryLocation(folder.getAbsolutePath())); + } + } + System.out.println(""); + System.out.println("Bundles added the target platform."); + targetDef.setTargetLocations(bundleContainers.toArray(new ITargetLocation[bundleContainers.size()])); + targetDef.setArch(Platform.getOSArch()); + targetDef.setOS(Platform.getOS()); + targetDef.setWS(Platform.getWS()); + targetDef.setNL(Platform.getNL()); + // targetDef.setJREContainer() + tpService.saveTargetDefinition(targetDef); + + System.out.print("Loading target platform... "); + Job job = new LoadTargetDefinitionJob(targetDef); + job.schedule(); + job.join(); + System.out.println("DONE."); + } +} |