blob: 14ae51103123e282ab7c52e83505e16bb79d49c8 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2007 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 Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.common.service.utils;
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.Platform;
import org.osgi.framework.Bundle;
/**
* Utility class for excuting a ICommandLineRunner object's execute method
*
* @author Weiping Lu
* @since 1.2
*/
public class CommandLineRunUtil {
private static CommandLineRunUtil instance = new CommandLineRunUtil();
private boolean needToRun = false;
private boolean neverExcuted = true;
public static CommandLineRunUtil getInstance() {
return instance;
}
public CommandLineRunUtil() {
}
public boolean execute(String[] args) {
setNeverExcuted(false);
//For general case, args should be parsed here to call on right runnerId.
//for now, just hard code it with "commandLinePluginImporter"
executeCommandRunner(args, "commandLinePluginImporter"); //$NON-NLS-1$
return false;
}
protected boolean executeCommandRunner(String[] args, String runnerId) {
ICommandLineRunner runner = getRunner(runnerId);
if (runner != null) {
return runner.execute(args);
}
return false;
}
private static final ICommandLineRunner getRunner(String id) {
IExtensionRegistry extensionRegistry = Platform
.getExtensionRegistry();
IExtensionPoint extensionPoint = extensionRegistry
.getExtensionPoint(
"org.eclipse.epf.common.service", "commandLineRunners"); //$NON-NLS-1$ //$NON-NLS-2$
if (extensionPoint == null) {
return null;
}
IExtension[] extensions = extensionPoint.getExtensions();
for (int i = 0; i < extensions.length; i++) {
IExtension extension = extensions[i];
String pluginId = extension.getNamespaceIdentifier();
Bundle bundle = Platform.getBundle(pluginId);
IConfigurationElement[] configElements = extension
.getConfigurationElements();
for (int j = 0; j < configElements.length; j++) {
IConfigurationElement configElement = configElements[j];
String runnerId = configElement.getAttribute("runnerId"); //$NON-NLS-1$
if (runnerId == null) {
continue;
}
runnerId = runnerId.trim();
if (! runnerId.equals(id)) {
continue;
}
String className = configElement.getAttribute("class"); //$NON-NLS-1$
if (className == null) {
continue;
}
className = className.trim();
try {
ICommandLineRunner runner = (ICommandLineRunner) bundle.loadClass(className).newInstance();
return runner;
} catch (Exception e) {
}
}
}
return null;
}
public boolean isNeedToRun() {
return needToRun;
}
public void setNeedToRun(boolean needToRun) {
this.needToRun = needToRun;
}
public static void setInstance(CommandLineRunUtil instance) {
CommandLineRunUtil.instance = instance;
}
public boolean isNeverExcuted() {
return neverExcuted;
}
protected void setNeverExcuted(boolean neverExcuted) {
this.neverExcuted = neverExcuted;
}
}