- move org.eclipse.core.runtime package (IProduct etc.) back to org.eclipse.core.runtime bundle - adds relevant methods to IApplicationContext from IProduct
diff --git a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java index 19f2144..9923ff7 100644 --- a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java +++ b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java
@@ -111,10 +111,11 @@ private ServiceTracker debugTracker = null; private ServiceTracker contentTracker = null; private ServiceTracker preferencesTracker = null; - private ServiceTracker productTracker = null; private ServiceTracker userLocation = null; private ServiceTracker groupProviderTracker = null; + private IProduct product; + public static InternalPlatform getDefault() { return singleton; } @@ -510,8 +511,17 @@ } public IProduct getProduct() { + if (product != null) + return product; EclipseAppContainer container = Activator.getContainer(); - return container == null ? null : container.getProduct(); + IBranding branding = container == null ? null : container.getBranding(); + if (branding == null) + return null; + Object brandingProduct = branding.getProduct(); + if (!(brandingProduct instanceof IProduct)) + brandingProduct = new Product(branding); + product = (IProduct) brandingProduct; + return product; } public IExtensionRegistry getRegistry() { @@ -817,10 +827,6 @@ } private void closeOSGITrackers() { - if (productTracker != null) { - productTracker.close(); - productTracker = null; - } if (preferencesTracker != null) { preferencesTracker.close(); preferencesTracker = null;
diff --git a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/Product.java b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/Product.java index 9024f0f..af27a0f 100644 --- a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/Product.java +++ b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/Product.java
@@ -1,76 +1,46 @@ /******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. + * Copyright (c) 2006 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 - * + * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.core.internal.runtime; -import java.util.HashMap; -import org.eclipse.core.runtime.*; +import org.eclipse.core.runtime.IProduct; +import org.eclipse.equinox.internal.app.IBranding; import org.osgi.framework.Bundle; public class Product implements IProduct { - private static final String ATTR_DESCRIPTION = "description"; //$NON-NLS-1$ - private static final String ATTR_NAME = "name"; //$NON-NLS-1$ - private static final String ATTR_APPLICATION = "application"; //$NON-NLS-1$ - private static final String ATTR_VALUE = "value"; //$NON-NLS-1$ - - String application = null; - String name = null; - String id = null; - String description = null; - HashMap properties; - Bundle definingBundle = null; - - public Product(String id, IConfigurationElement element) { - this.id = id; - if (element == null) - return; - application = element.getAttribute(ATTR_APPLICATION); - name = element.getAttribute(ATTR_NAME); - description = element.getAttribute(ATTR_DESCRIPTION); - loadProperties(element); - } - - private void loadProperties(IConfigurationElement element) { - IConfigurationElement[] children = element.getChildren(); - properties = new HashMap(children.length); - for (int i = 0; i < children.length; i++) { - IConfigurationElement child = children[i]; - String key = child.getAttribute(ATTR_NAME); - String value = child.getAttribute(ATTR_VALUE); - if (key != null && value != null) - properties.put(key, value); - } - definingBundle = Platform.getBundle(element.getContributor().getName()); - } - - public Bundle getDefiningBundle() { - return definingBundle; + IBranding branding; + public Product(IBranding branding) { + this.branding = branding; } public String getApplication() { - return application; + return branding.getApplication(); } - public String getName() { - return name; + public Bundle getDefiningBundle() { + return branding.getDefiningBundle(); } public String getDescription() { - return description; + return branding.getDescription(); } public String getId() { - return id; + return branding.getId(); + } + + public String getName() { + return branding.getName(); } public String getProperty(String key) { - return (String) properties.get(key); + return branding.getProperty(key); } }
diff --git a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/IPlatformRunnable.java b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/IPlatformRunnable.java new file mode 100644 index 0000000..c1bce35 --- /dev/null +++ b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/IPlatformRunnable.java
@@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2003, 2006 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 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.core.runtime; + +import org.eclipse.equinox.app.IApplication; + +/** + * Bootstrap type for the platform. Platform runnables represent executable + * entry points into plug-ins. Runnables can be configured into the Platform's + * <code>org.eclipse.core.runtime.applications</code> extension-point + * or be made available through code or extensions on other plug-in's extension-points. + * + * <p> + * Clients may implement this interface. + * </p> + * + * @since 3.0 + * @deprecated use {@link IApplication} + */ +public interface IPlatformRunnable { + + /** + * Exit object indicating normal termination + */ + public static final Integer EXIT_OK = new Integer(0); + + /** + * Exit object requesting platform restart + */ + public static final Integer EXIT_RESTART = new Integer(23); + + /** + * Exit object requesting that the command passed back be executed. Typically + * this is used to relaunch Eclipse with different command line arguments. When the executable is + * relaunched the command line will be retrieved from the <code>eclipse.exit</code> system property. + */ + public static final Integer EXIT_RELAUNCH = new Integer(24); + + /** + * Runs this runnable with the given args and returns a result. + * The content of the args is unchecked and should conform to the expectations of + * the runnable being invoked. Typically this is a <code>String</code> array. + * Applications can return any object they like. If an <code>Integer</code> is returned + * it is treated as the program exit code if Eclipse is exiting. + * + * @param args the argument(s) to pass to the application + * @return the return value of the application + * @exception Exception if there is a problem running this runnable. + * @see #EXIT_OK + * @see #EXIT_RESTART + * @see #EXIT_RELAUNCH + */ + public Object run(Object args) throws Exception; +}
diff --git a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/IProduct.java b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/IProduct.java new file mode 100644 index 0000000..246be33 --- /dev/null +++ b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/IProduct.java
@@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2004, 2006 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 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.core.runtime; + +import org.osgi.framework.Bundle; + +/** + * Products are the Eclipse unit of branding. From the runtime point of view they have + * a name, id and description and identify the Eclipse application to run. + * <p> + * Since the bulk of the branding related information is + * specific to the UI, products also carry an arbitrary set of properties. The valid set of + * key-value pairs and their interpretation defined by the UI of the target environment. + * For example, in the standard Eclipse UI, <code>org.eclipse.ui.branding.IProductConstants</code> + * the properties of interest to the UI. Other clients may specify additional properties. + * </p><p> + * Products can be defined directly using extensions to the <code>org.eclipse.core.runtime.products</code> + * extension point or by using facilities provided by IProductProvider implementations. + * </p><p> + * For readers familiar with Eclipse 2.1 and earlier, products are roughly equivalent to + * <i>primary features</i>. + * </p> + * + * @see IProductProvider + * @see org.eclipse.ui.branding.IProductConstants + * @since 3.0 + */ +public interface IProduct { + /** + * Returns the application associated with this product. This information is used + * to guide the runtime as to what application extension to create and execute. + * + * @return this product's application or <code>null</code> if none + */ + public String getApplication(); + + /** + * Returns the name of this product. The name is typically used in the title + * bar of UI windows. + * + * @return the name of this product or <code>null</code> if none + */ + public String getName(); + + /** + * Returns the text description of this product + * + * @return the description of this product or <code>null</code> if none + */ + public String getDescription(); + + /** Returns the unique product id of this product. + * + * @return the id of this product + */ + public String getId(); + + /** + * Returns the property of this product with the given key. + * <code>null</code> is returned if there is no such key/value pair. + * + * @param key the name of the property to return + * @return the value associated with the given key or <code>null</code> if none + */ + public String getProperty(String key); + + /** + * Returns the bundle which is responsible for the definition of this product. + * Typically this is used as a base for searching for images and other files + * that are needed in presenting the product. + * + * @return the bundle which defines this product or <code>null</code> if none + */ + public Bundle getDefiningBundle(); +}
diff --git a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/IProductProvider.java b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/IProductProvider.java new file mode 100644 index 0000000..5e72785 --- /dev/null +++ b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/runtime/IProductProvider.java
@@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2004, 2006 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 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.core.runtime; + +/** + * Product providers define products (units of branding) which have been installed in + * the current system. Typically, a configuration agent (i.e., plug-in installer) will + * define a product provider so that it can report to the system the products it has installed. + * <p> + * Products are normally defined and installed in the system using extensions to the + * <code>org.eclipse.core.runtime.products</code> extension point. In cases where + * the notion of product is defined by alternate means (e.g., primary feature), an <code>IProductProvider</code> + * can be installed in this extension point using an executable extension. The provider + * then acts as a proxy for the product extensions that represent the products installed. + * </p> + * + * @see IProduct + * @since 3.0 + */ +public interface IProductProvider { + /** + * Returns the human-readable name of this product provider. + * + * @return the name of this product provider + */ + public String getName(); + + /** + * Returns the products provided by this provider. + * + * @return the products provided by this provider + */ + public IProduct[] getProducts(); +}