/*
* Copyright (c) 2012 Data Harmonisation Panel
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.ui.scripting;
import java.util.List;
import org.eclipse.core.runtime.IConfigurationElement;
import de.fhg.igd.eclipse.util.extension.AbstractExtension;
import de.fhg.igd.eclipse.util.extension.ExtensionObjectFactoryCollection;
import de.fhg.igd.eclipse.util.extension.FactoryFilter;
import de.fhg.igd.slf4jplus.ALogger;
import de.fhg.igd.slf4jplus.ALoggerFactory;
import eu.esdihumboldt.hale.common.scripting.ScriptExtension;
/**
* Extension for {@link ScriptUI}s.
*
* @author Kai Schwierczek
*/
public class ScriptUIExtension extends AbstractExtension<ScriptUI, ScriptUIFactory> {
private static final ALogger log = ALoggerFactory.getLogger(ScriptUIExtension.class);
/**
* The extension point ID.
*/
public static final String ID = "eu.esdihumboldt.hale.ui.script";
private static ScriptUIExtension instance;
/**
* Get the configuration page extension instance
*
* @return the extension instance
*/
public static ScriptUIExtension getInstance() {
if (instance == null) {
instance = new ScriptUIExtension();
}
return instance;
}
/**
* Default constructor.
*/
private ScriptUIExtension() {
super(ID);
}
/**
* @see de.fhg.igd.eclipse.util.extension.AbstractExtension#createFactory(org.eclipse.core.runtime.IConfigurationElement)
*/
@Override
protected ScriptUIFactory createFactory(IConfigurationElement conf) throws Exception {
return new ScriptUIFactory(conf);
}
/**
* Returns the first found ScriptUI for the given script id or
* <code>null</code> if there is none.
*
* @param scriptId the script id
* @return a ScriptUI for the given script id or <code>null</code>
*/
public ScriptUI getScriptUI(final String scriptId) {
// XXX return all available ScriptUIs for the given id?
List<ScriptUIFactory> factories = getFactories(new FactoryFilter<ScriptUI, ScriptUIFactory>() {
@Override
public boolean acceptFactory(ScriptUIFactory factory) {
return factory.getScriptId().equals(scriptId);
}
@Override
public boolean acceptCollection(
ExtensionObjectFactoryCollection<ScriptUI, ScriptUIFactory> arg0) {
return true;
}
});
if (factories.isEmpty())
return null;
else
try {
ScriptUI scriptUI = factories.get(0).createExtensionObject();
scriptUI.setScript(ScriptExtension.getInstance().getFactory(scriptId)
.createExtensionObject());
return scriptUI;
} catch (Exception e) {
log.warn("Exception creating ScriptUI", e);
return null;
}
}
}