/******************************************************************************* * Copyright (c) 2012 Pivotal Software, Inc. * 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: * Pivotal Software, Inc. - initial API and implementation *******************************************************************************/ package org.springsource.ide.eclipse.commons.internal.configurator; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.preferences.DefaultScope; import org.eclipse.ui.internal.WorkbenchPlugin; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; import org.springsource.ide.eclipse.commons.core.StatusHandler; /** * The activator class controls the plug-in life cycle * @author Steffen Pingel * @author Christian Dupuis * @author Leo Dos Santos */ public class Activator extends AbstractUIPlugin { public static final String PLUGIN_ID = "org.springsource.ide.eclipse.commons.configurator"; public static final String PROPERTY_CONFIGURATOR_PROCESSED = PLUGIN_ID + ".processed"; public static final String PROPERTY_CONFIGURE_TARGETS = PLUGIN_ID + ".configuretargets"; public static final String PROPERTY_USER_INSTALL_PATH = PLUGIN_ID + ".installPath"; private static Activator plugin; public static Activator getDefault() { return plugin; } private boolean configurationActionRegistered; public boolean isConfigurationActionRegistered() { return configurationActionRegistered; } @Override public void start(BundleContext context) throws Exception { super.start(context); plugin = this; new DefaultScope().getNode(PLUGIN_ID).putBoolean(PROPERTY_CONFIGURATOR_PROCESSED, false); try { IExtension extension = Platform.getExtensionRegistry().getExtension( "org.eclipse.equinox.p2.engine.actions", "org.springsource.ide.eclipse.commons.configure"); configurationActionRegistered = extension != null; if (!configurationActionRegistered) { getLog().log( new Status(IStatus.ERROR, PLUGIN_ID, "Registeration of configure action failed. This may cause extension install to fail.")); } } catch (Throwable t) { getLog().log( new Status(IStatus.ERROR, PLUGIN_ID, "Registeration of configure action failed. This may cause extension install to fail.", t)); } } @Override public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } static class ConfiguratorExtensionPointReader { private static final String EXTENSION_ID_CONFIGURATOR = "com.springsource.sts.ide.ui.configurator"; private static final String ELEMENT_CONFIGURATOR = "configurator"; private static final String ELEMENT_CLASS = "class"; public static IConfigurator getConfigurator() { IExtensionRegistry registry = Platform.getExtensionRegistry(); IExtensionPoint extensionPoint = registry.getExtensionPoint(EXTENSION_ID_CONFIGURATOR); IExtension[] extensions = extensionPoint.getExtensions(); for (IExtension extension : extensions) { IConfigurationElement[] elements = extension.getConfigurationElements(); for (IConfigurationElement element : elements) { if (element.getName().compareTo(ELEMENT_CONFIGURATOR) == 0) { IConfigurator configurator = readConfiguratorExtension(element); if (configurator != null) { return configurator; } } } } return null; } private static IConfigurator readConfiguratorExtension(IConfigurationElement configurationElement) { try { Object object = WorkbenchPlugin.createExtension(configurationElement, ELEMENT_CLASS); if (!(object instanceof IConfigurator)) { StatusHandler.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Could not load " + object.getClass().getCanonicalName() + " must implement " + IConfigurator.class.getCanonicalName())); } return (IConfigurator) object; } catch (CoreException e) { StatusHandler.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Could not load configurator extension", e)); } return null; } } public static IConfigurator getConfigurator() { return ConfiguratorExtensionPointReader.getConfigurator(); } }