blob: e91dbcde9f317d40454c523446d3455e878ab73a [file] [log] [blame]
/*
-----------------------------------------------------------------------
-- 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();
}
}