package ls.graph.script;
import java.awt.Color;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.script.ScriptException;
import ls.graph.ControlListener;
import ls.graph.Controller;
import ls.graph.ui.ScriptableVertexPaintFunction;
import ls.script.ConfigurableScriptEngine;
import ls.script.ScriptUtils;
public class GraphScriptEngine
extends ConfigurableScriptEngine
implements ControlListener
{
public void graphChanged(ScriptableGraph sg)
{
configureScriptEngine(); //refresh the engine configuration
}
private ScriptUIUtils scriptUIUtils = null;
private Controller controller = null;
public GraphScriptEngine(Controller c)
{
super();
this.controller = c;
this.controller.addListener(this);
this.init();
//getScriptEngine(); //make sure it's initalized and configured
//configureScriptEngine();
}
@Override
protected void configureScriptEngine(/*ScriptEngine eng*/)
{
Map<String, Object> bindings = new HashMap<String, Object>();
ScriptableGraph graph = controller.getGraph();
bindings.put(graph.getBindingName(), graph);
List<AlgorithmListener> algListeners =
this.scriptUIUtils == null ?
null : this.scriptUIUtils.getAlgorithmListeners();
this.scriptUIUtils =
new ScriptUIUtils(
graph,
new ScriptableVertexPaintFunction(Color.RED),
new ScriptableVertexStringer());
if (algListeners != null)
for (AlgorithmListener l : algListeners)
this.scriptUIUtils.addAlgorithmListener(l);
bindings.put(scriptUIUtils.getBindingName(), scriptUIUtils);
bindings.put(VertexColors.BLACK.getBindingName(), VertexColors.BLACK);
bindings.put(VertexColors.RED.getBindingName(), VertexColors.RED);
bindings.put(VertexColors.GREY.getBindingName(), VertexColors.GREY);
bindings.put(VertexColors.WHITE.getBindingName(), VertexColors.WHITE);
bindings.put(VertexColors.BLUE.getBindingName(), VertexColors.BLUE);
// Algorithm alg = new Algorithm();
// bindings.put(alg.getBindingName(), alg);
ScriptUtils su = new ScriptUtils();
bindings.put(su.getBindingName(), su);
this.setBindings(bindings);
this.packageImport("edu.uci.ics.jung.graph");
//eng.javaImport("edu.uci.ics.jung.graph.visualization");
this.packageImport("Packages.ls.graph.script"); //For ScriptUIUtils, VertexColors
this.classImport("Packages.ls.graph.script.AlgorithmStep");
this.classImport("Packages.ls.graph.script.Algorithm");
}
public ScriptUIUtils getScriptUIUtils()
{
return scriptUIUtils;
}
public void invokeScriptFunc(String funcName)
throws NoSuchMethodException,ScriptException
{
super.invokeScriptFunc(funcName);
}
public void graphLoaded(File graphFile) {/* NOP */}
public void scriptLoaded(File scriptFile, String scriptText) {/* NOP*/}
} //end of GraphScriptEngine class