/**
* Copyright (c) 2005-2013 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
/*
* Created on Mar 19, 2006
*/
package org.python.pydev.editor.scripting;
import java.util.HashMap;
import java.util.ListResourceBundle;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.IDocument;
import org.python.pydev.jython.IPythonInterpreter;
import org.python.pydev.jython.JythonPlugin;
import org.python.pydev.shared_ui.editor.BaseEditor;
import org.python.pydev.shared_ui.editor.IPyEditListener;
/**
* This class is used for scripting in Pydev.
* It listens to the PyEdit actions and passes what is needed for the interpreter.
*
* A new PyEditScripting is created for each editor. Therefore, we have one interpreter for each editor.
*
* @author Fabio
*/
public class PyEditScripting implements IPyEditListener {
private IPythonInterpreter interpreter;
private static Object systemGlobals = null;
public PyEditScripting() {
createInterpreter();
}
private void createInterpreter() {
if (interpreter == null) {
interpreter = JythonPlugin.newPythonInterpreter();
if (systemGlobals == null) {
interpreter.exec("systemGlobals = {}");
systemGlobals = interpreter.get("systemGlobals");
}
}
}
private void doExec(HashMap<String, Object> locals) {
createInterpreter();
locals.put("systemGlobals", systemGlobals);
JythonPlugin.execAll(locals, "pyedit", interpreter); //execute all the files that start with 'pyedit' that are located beneath
//the org.python.pydev.jython/jysrc directory and some user specified dir (if any).
}
@Override
public void onSave(BaseEditor edit, IProgressMonitor monitor) {
HashMap<String, Object> locals = new HashMap<String, Object>();
locals.put("cmd", "onSave");
locals.put("editor", edit);
doExec(locals);
}
@Override
public void onCreateActions(ListResourceBundle resources, BaseEditor edit, IProgressMonitor monitor) {
HashMap<String, Object> locals = new HashMap<String, Object>();
locals.put("cmd", "onCreateActions");
locals.put("editor", edit);
doExec(locals);
}
@Override
public void onDispose(BaseEditor edit, IProgressMonitor monitor) {
HashMap<String, Object> locals = new HashMap<String, Object>();
locals.put("cmd", "onDispose");
locals.put("editor", edit);
doExec(locals);
interpreter.cleanup();
interpreter = null;
}
@Override
public void onSetDocument(IDocument document, BaseEditor edit, IProgressMonitor monitor) {
HashMap<String, Object> locals = new HashMap<String, Object>();
locals.put("cmd", "onSetDocument");
locals.put("document", document);
locals.put("editor", edit);
doExec(locals);
}
}