blob: 7edd011205141c81cb7c07366686b0369a3b8f24 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2014 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 - Initial API and implementation
* Obeo - Introduce generics and add documentation
*******************************************************************************/
package org.eclipse.emf.compare.rcp.extension;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
/**
* Simple utility class to create proxy of extension that are
* {@link IConfigurationElement#createExecutableExtension(String) instantiable}.
* <p>
* No test of the {@link IConfigurationElement#isValid() validity} of the wrapped
* {@link IConfigurationElement} is performed. As such you should always extend this class while listening to
* the {@link org.eclipse.core.runtime.IExtensionRegistry} and react properly the removal of the wrapped
* {@link IConfigurationElement}.
* <p>
* Note: this is based on {@code org.eclipse.emf.ecore.plugin.RegistryReader.PluginClassDescriptor}
*
* @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
* @param <T>
* Type of the instances created from this descriptor.
*/
public class PluginClassDescriptor<T> {
/**
* The element from which create an instance.
*/
protected IConfigurationElement element;
/**
* The name of the attribute that holds the class full name to be instantiated.
*/
protected String attributeName;
/**
* Creates a new descriptor for given element keeping the class name to be instantiated in an attribute
* named {@code attributeName}.
*
* @param element
* The element from which create an instance.
* @param attributeName
* The name of the attribute that holds the class full name to be instantiated.
*/
public PluginClassDescriptor(IConfigurationElement element, String attributeName) {
this.element = element;
this.attributeName = attributeName;
}
/**
* Creates a new instance.
*
* @return the new instance.
* @throws RuntimeException
* wraps a CoreException if an instance of the executable extension could not be created for
* any reason.
*/
@SuppressWarnings("unchecked")
protected T createInstance() {
try {
return (T)element.createExecutableExtension(attributeName);
} catch (CoreException e) {
throw new RuntimeException(e);
}
}
}