| /* |
| ----------------------------------------------------------------------- |
| -- CHESS core plugin -- |
| -- -- |
| -- Copyright (C) 2011-2012 -- |
| -- University of Padova, ITALY -- |
| -- -- |
| -- Author: Alessandro Zovi azovi@math.unipd.it -- |
| -- -- |
| -- 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-v20.html -- |
| ----------------------------------------------------------------------- |
| */ |
| |
| package org.polarsys.chess.core.transformationExecutor; |
| |
| import java.util.Hashtable; |
| |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.IExtensionRegistry; |
| import org.eclipse.core.runtime.Platform; |
| import org.osgi.framework.Bundle; |
| |
| /** |
| * Manages the extension-point 'org.polarsys.chess.transformationExecutor' |
| * |
| */ |
| public class TransformationExecutorManager { |
| |
| /** The executor registry. */ |
| // list of of listener |
| private Hashtable<String, ITransformationExecutor> executorRegistry; |
| |
| /** The listenerid extension id. */ |
| // extension point ID |
| private String LISTENERID_EXTENSION_ID = "org.polarsys.chess.transformationExecutor"; |
| |
| /** The name id. */ |
| private String NAME_ID = "name"; |
| |
| /** The realization id. */ |
| private String REALIZATION_ID = "realization"; |
| |
| /** The instance. */ |
| private static TransformationExecutorManager instance; |
| |
| |
| /** |
| * Creates the singleton instance of the manager. |
| * |
| * @return the transformation executor manager |
| */ |
| public static TransformationExecutorManager instance(){ |
| if (instance == null) |
| instance = new TransformationExecutorManager(); |
| return instance; |
| } |
| |
| /** |
| * Instantiates a new transformation executor manager. |
| */ |
| private TransformationExecutorManager() { |
| super(); |
| executorRegistry = new Hashtable<String, ITransformationExecutor>(); |
| initializeExecutorList(); |
| } |
| |
| /** |
| * Loads all listeners of the model. |
| */ |
| private void initializeExecutorList() { |
| // Reading data from plugins |
| IExtensionRegistry reg = Platform.getExtensionRegistry(); |
| |
| IConfigurationElement[] configElements = Platform.getExtensionRegistry().getConfigurationElementsFor(LISTENERID_EXTENSION_ID); |
| |
| for(int i = 0; i < configElements.length; i++) { |
| inializeOneRule(configElements[i]); |
| } |
| } |
| |
| /** |
| * Loads one listener. |
| * |
| * @param element the extension point |
| */ |
| private void inializeOneRule(IConfigurationElement element) { |
| String listenerName = element.getAttribute(NAME_ID); |
| try { |
| ITransformationExecutor listener = (ITransformationExecutor)createExtension(element, element.getAttribute(REALIZATION_ID)); |
| executorRegistry.put(listenerName, listener); |
| } catch (Exception e) { |
| //Activator.log.error("- " + listenerName + " can not be loaded: "+e.getLocalizedMessage(), e); |
| } |
| |
| } |
| |
| /** |
| * Creates the extension. |
| * |
| * @param element the element |
| * @param classAttribute the class attribute |
| * @return the object |
| * @throws Exception the exception |
| */ |
| private static Object createExtension(final IConfigurationElement element, final String classAttribute) throws Exception { |
| try { |
| Bundle extensionBundle = Platform.getBundle(element.getDeclaringExtension().getNamespaceIdentifier()); |
| Class clazz = extensionBundle.loadClass(classAttribute); |
| Object obj = clazz.newInstance(); |
| return obj; |
| // return element.createExecutableExtension(classAttribute); |
| } catch (Exception e) { |
| throw new Exception("unable to create Extension " + e); |
| } |
| } |
| |
| /** |
| * Retrieves the transformation to execute given its name. |
| * |
| * @param name the name of the transformation |
| * @return the executor |
| */ |
| public ITransformationExecutor getExecutor(final String name){ |
| return executorRegistry.get(name); |
| } |
| |
| /** |
| * Initializes the manager. |
| */ |
| public static void init() { |
| instance(); |
| } |
| } |