diff options
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductFileAdvice.java')
-rw-r--r-- | bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductFileAdvice.java | 315 |
1 files changed, 0 insertions, 315 deletions
diff --git a/bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductFileAdvice.java b/bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductFileAdvice.java deleted file mode 100644 index e054e7fc5..000000000 --- a/bundles/org.eclipse.equinox.p2.publisher/src/org/eclipse/equinox/p2/publisher/eclipse/ProductFileAdvice.java +++ /dev/null @@ -1,315 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2009 Code 9 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: - * Code 9 - initial API and implementation - * EclipseSource - ongoing development - * IBM Corporation - ongoing development - ******************************************************************************/ -package org.eclipse.equinox.p2.publisher.eclipse; - -import java.io.File; -import java.util.*; -import org.eclipse.equinox.frameworkadmin.BundleInfo; -import org.eclipse.equinox.internal.p2.core.helpers.CollectionUtils; -import org.eclipse.equinox.internal.p2.publisher.eclipse.DataLoader; -import org.eclipse.equinox.internal.p2.publisher.eclipse.IProductDescriptor; -import org.eclipse.equinox.internal.provisional.frameworkadmin.ConfigData; -import org.eclipse.equinox.p2.metadata.IVersionedId; -import org.eclipse.equinox.p2.metadata.Version; -import org.eclipse.equinox.p2.publisher.AbstractAdvice; -import org.eclipse.equinox.p2.publisher.AbstractPublisherAction; -import org.eclipse.equinox.p2.publisher.actions.ILicenseAdvice; - -/** - * Provide advice derived from the .product file. The product can give some info on - * launching as well as the configuration (bundles, properties, ...) - */ -public class ProductFileAdvice extends AbstractAdvice implements ILicenseAdvice, IExecutableAdvice, IConfigAdvice, IBrandingAdvice { - private final static String OSGI_SPLASH_PATH = "osgi.splashPath"; //$NON-NLS-1$ - private final static String SPLASH_PREFIX = "platform:/base/plugins/"; //$NON-NLS-1$ - private IProductDescriptor product; - private String configSpec; - private String ws; - private String os; - private String arch; - private ConfigData configData = null; - - protected String getId() { - return product.getId(); - } - - protected Version getVersion() { - return Version.parseVersion(product.getVersion()); - } - - /** - * Constructs a new ProductFileAdvice for a given product file and a - * particular configuration. Configurations are - * specified as: ws.os.arch where: - * ws is the windowing system - * os is the operating system - * arch is the architecture - */ - public ProductFileAdvice(IProductDescriptor product, String configSpec) { - this.product = product; - this.configSpec = configSpec; - - String[] config = AbstractPublisherAction.parseConfigSpec(configSpec); - ws = config[0]; - if (ws == null) - ws = AbstractPublisherAction.CONFIG_ANY; - os = config[1]; - if (os == null) - os = AbstractPublisherAction.CONFIG_ANY; - arch = config[2]; - if (arch == null) - arch = AbstractPublisherAction.CONFIG_ANY; - - configData = getConfigData(); - } - - /** - * Returns the program arguments for this product. - */ - public String[] getProgramArguments() { - String line = product.getProgramArguments(os); - return AbstractPublisherAction.getArrayFromString(line, " "); //$NON-NLS-1$ - } - - /** - * Returns the VM arguments for this product. - */ - public String[] getVMArguments() { - String line = product.getVMArguments(os); - return AbstractPublisherAction.getArrayFromString(line, " "); //$NON-NLS-1$ - } - - /** - * Returns the Bundles that constitute this product. These - * bundles may be specified in the .product file, .product file configuration - * area, config.ini file, or a combination of these three places. - */ - public BundleInfo[] getBundles() { - return configData.getBundles(); - } - - /** - * Returns the properties associated with this product. These - * properties may be defined in the .product file, the config.ini - * file, or both. - */ - public Map<String, String> getProperties() { - Map<String, String> result = new HashMap<String, String>(); - CollectionUtils.putAll(configData.getProperties(), result); - result.putAll(product.getConfigurationProperties()); - return result; - } - - /** - * Returns the name of the launcher. This should be the OS-independent - * name. That is, ".exe" etc. should not be included. - * - * @return the name of the branded launcher or <code>null</code> if none. - */ - public String getExecutableName() { - return product.getLauncherName(); - } - - /** - * Returns the product file parser that this advice is working on - */ - public IProductDescriptor getProductFile() { - return product; - } - - /** - * Returns the icons defined for this product - */ - public String[] getIcons() { - return product.getIcons(os); - } - - /** - * Returns the operating system that this advice is configured to work with. - */ - public String getOS() { - return this.os; - } - - /** - * Returns the license text for this product - */ - public String getLicenseURL() { - return product.getLicenseURL(); - } - - /** - * Returns the license URL for this product - */ - public String getLicenseText() { - return product.getLicenseText(); - } - - private ConfigData getConfigData() { - DataLoader loader = createDataLoader(); - ConfigData result; - if (loader != null) { - result = loader.getConfigData(); - } else - result = generateConfigData(); - - addProductFileBundles(result); // these are the bundles specified in the <plugins/> tag - addProductFileConfigBundles(result); // these are the bundles specified in the <configurations> tag in the product file - - if (product.getProductId() != null) - result.setProperty("eclipse.product", product.getProductId()); //$NON-NLS-1$ - if (product.getApplication() != null) - result.setProperty("eclipse.application", product.getApplication()); //$NON-NLS-1$ - String location = getSplashLocation(); - if (location != null) - result.setProperty(OSGI_SPLASH_PATH, SPLASH_PREFIX + location); - return result; - } - - private void addProductFileConfigBundles(ConfigData data) { - Set<BundleInfo> versionBoundBundles = new HashSet<BundleInfo>(); - Map<String, List<BundleInfo>> unboundedBundles = new HashMap<String, List<BundleInfo>>(); - - BundleInfo[] bundles = data.getBundles(); - for (int i = 0; i < bundles.length; i++) { - // For each bundle we know about, cache it. If the bundle doesn't have a version - // add it to a list of bundles by name - BundleInfo bundleInfo = bundles[i]; - if (bundleInfo.getVersion().equals(BundleInfo.EMPTY_VERSION)) { - addUnboundedBundle(unboundedBundles, bundleInfo); - } else { - versionBoundBundles.add(bundleInfo); - addUnboundedBundle(unboundedBundles, bundleInfo); - } - } - - List<BundleInfo> bundleInfos = product.getBundleInfos(); - for (BundleInfo bundleInfo : bundleInfos) { - // For each bundle that has configuration information, if the bundle is in the - // bundles bound by version, add the "configured" bundle instead - // If the bundle is not bound to a version, then replace all bounded versions - // with this one. Otherwise, just add this one (don't replace) - if (versionBoundBundles.contains(bundleInfo)) { - // If we found a version with the same name and version, replace it with the "configured" bundle - data.removeBundle(bundleInfo); - data.addBundle(bundleInfo); - } else if (bundleInfo.getVersion().equals(BundleInfo.EMPTY_VERSION)) { - // If we don't have a version number, look for all bundles that match by name - List<BundleInfo> list = unboundedBundles.get(bundleInfo.getSymbolicName()); - if (list == null) - data.addBundle(bundleInfo); - else - for (BundleInfo target : list) { - target.setStartLevel(bundleInfo.getStartLevel()); - target.setMarkedAsStarted(bundleInfo.isMarkedAsStarted()); - } - } else { - // Otherwise we have a version, but we could not match it, so just add this one. - data.addBundle(bundleInfo); - } - - } - } - - private void addUnboundedBundle(Map<String, List<BundleInfo>> data, BundleInfo bundleInfo) { - if (!data.containsKey(bundleInfo.getSymbolicName())) - data.put(bundleInfo.getSymbolicName(), new LinkedList<BundleInfo>()); - data.get(bundleInfo.getSymbolicName()).add(bundleInfo); - } - - private void addProductFileBundles(ConfigData data) { - List<IVersionedId> bundles = product.getBundles(true); - Set<BundleInfo> set = new HashSet<BundleInfo>(); - set.addAll(Arrays.asList(data.getBundles())); - - for (IVersionedId vid : bundles) { - BundleInfo bundleInfo = new BundleInfo(); - bundleInfo.setSymbolicName(vid.getId()); - bundleInfo.setVersion(vid.getVersion().toString()); - if (!set.contains(bundleInfo)) - data.addBundle(bundleInfo); - } - } - - private ConfigData generateConfigData() { - ConfigData result = new ConfigData(null, null, null, null); - if (product.useFeatures()) - return result; - - // Add all the bundles here. We replace / update them later - // if we find configuration information - List<IVersionedId> bundles = product.getBundles(true); - for (IVersionedId vid : bundles) { - BundleInfo bundleInfo = new BundleInfo(); - bundleInfo.setSymbolicName(vid.getId()); - bundleInfo.setVersion(vid.getVersion().toString()); - result.addBundle(bundleInfo); - } - return result; - } - - private String getSplashLocation() { - return product.getSplashLocation(); - } - - protected String getConfigSpec() { - return configSpec; - } - - protected boolean matchConfig(String spec, boolean includeDefault) { - if (spec != null) { - String targetWS = AbstractPublisherAction.parseConfigSpec(spec)[0]; - if (targetWS == null) - targetWS = AbstractPublisherAction.CONFIG_ANY; - if (!ws.equals(targetWS) && !ws.equals(AbstractPublisherAction.CONFIG_ANY) && !targetWS.equals(AbstractPublisherAction.CONFIG_ANY)) { - return false; - } - - String targetOS = AbstractPublisherAction.parseConfigSpec(spec)[1]; - if (targetOS == null) - targetOS = AbstractPublisherAction.CONFIG_ANY; - if (!os.equals(targetOS) && !os.equals(AbstractPublisherAction.CONFIG_ANY) && !targetOS.equals(AbstractPublisherAction.CONFIG_ANY)) { - return false; - } - - String targetArch = AbstractPublisherAction.parseConfigSpec(spec)[2]; - if (targetArch == null) - targetArch = AbstractPublisherAction.CONFIG_ANY; - if (!arch.equals(targetArch) && !arch.equals(AbstractPublisherAction.CONFIG_ANY) && !targetArch.equals(AbstractPublisherAction.CONFIG_ANY)) { - return false; - } - } - return true; - } - - private DataLoader createDataLoader() { - String location = product.getConfigIniPath(os); - if (location == null) - location = product.getConfigIniPath(null); - if (location == null) - return null; - - File configFile = new File(location); - // We are assuming we are always relative from the product file - // However PDE tooling puts us relative from the workspace, that "relative" path also looks like an absolute path on linux - // Build may have copied the file to the correct place for us - if (!configFile.isAbsolute() || !configFile.exists()) - configFile = new File(product.getLocation().getParentFile(), location); - - //We don't really have an executable location, get something reasonable based on the config.ini location - File parent = configFile.getParentFile(); - if (parent.getName().equals("configuration") && parent.getParentFile() != null) //$NON-NLS-1$ - parent = parent.getParentFile(); - return new DataLoader(configFile, parent); - } - -} |