// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea
// Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com
// Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology
// Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/
package graphtea.plugins.commandline;
import graphtea.graph.atributeset.GraphAttrSet;
import graphtea.graph.graph.GraphModel;
import graphtea.graph.ui.GHTMLPageComponent;
import graphtea.platform.Application;
import graphtea.platform.core.BlackBoard;
import graphtea.platform.core.Listener;
import graphtea.platform.core.exception.ExceptionHandler;
import graphtea.platform.extension.ExtensionLoader;
import graphtea.platform.plugin.PluginInterface;
import graphtea.plugins.commandline.extensionloader.BSHExtensionLoader;
import graphtea.ui.UI;
import graphtea.ui.extension.ExtensionShellCommandProvider;
import org.xml.sax.SAXException;
import java.io.IOException;
/**
* @author Mohammad Ali Rostami
* @email rostamiev@gmail.com
*/
public class Init implements PluginInterface {
Shell shell;
BlackBoard bb;
//added shell's sidebar
public void init(BlackBoard blackboard) {
bb = blackboard;
UI ui = blackboard.getData(UI.name);
try {
ui.addXML("/graphtea/plugins/commandline/config.xml", getClass());
shell = new Shell(blackboard);
shell.performJob("SS");
bb.setData(Shell.NAME, shell);
ExtensionLoader.registerUnknownExtensionLoader(new BSHExtensionLoader(shell));
GHTMLPageComponent.registerHyperLinkHandler("BSH", new ShellHyperlinkHandler(shell));
blackboard.addListener(Application.POST_INIT_EVENT, new Listener() {
public void keyChanged(String key, Object value) {
postInit();
}
});
} catch (IOException e) {
ExceptionHandler.catchException(e);
System.out.println("xml file was not found , or IO error");
} catch (SAXException e) {
ExceptionHandler.catchException(e);
}
}
//added commands for all extensions
void postInit() {
for (ExtensionShellCommandProvider c : ExtensionShellCommandProvider.commands) {
try {
String var = shell.newVariable();
shell.set_variable("_" + c.trgClass.getClass().getSimpleName(), c.trgClass);
shell.set_variable(var, c.ths);
c.command += c.help
+ "return " + var + "." + "performExtensionInCommandLine()" + ";"
+ "}";
shell.evaluateCommand(c.command, c.name, c.abrv);
shell.addCodeCompletionDictionary(c.name, c.trgClass.getClass());
} catch (Exception e) {
ExceptionHandler.catchException(e);
}
}
// G0 Initialization
GraphModel gm = bb.getData(GraphAttrSet.name);
if (gm != null)
shell.set_variable(gm.getLabel(), gm);
shell.ext_console.shell = shell;
}
}