public code v1

This commit is contained in:
2026-05-22 11:14:29 +02:00
parent 427197ec5a
commit b8141736eb
28859 changed files with 575079 additions and 0 deletions
@@ -0,0 +1,60 @@
package afryca.ase.engine.Jython;
import javax.script.ScriptException;
import org.python.jsr223.PyScriptEngine;
import afryca.ase.engine.IEngine;
/**
* Jython engine for ASE
*
* @author Sinbad²
* @version 3.0
*/
public class Jython implements IEngine {
public static final String ID = "Jython"; //$NON-NLS-1$
private PyScriptEngine engine;
private String name;
private Jython() {
super();
name = ID;
engine = null;
}
/**
* Build Jython engine
*
* @param engine
* jython engine
*/
public Jython(PyScriptEngine engine) {
this();
assert engine != null;
this.engine = engine;
}
@Override
public String getName() {
return name;
}
@Override
public Object getEngine() {
return engine;
}
@Override
public Object eval(String script) throws ScriptException {
return engine.eval(script);
}
@Override
public void end() {
engine = null;
}
}
@@ -0,0 +1,52 @@
package afryca.ase.engine.Jython.addon;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import afryca.ase.engine.IEngine;
import afryca.ase.engine.Jython.provider.IJythonEngineProvider;
import afryca.ase.service.IASEService;
/**
* Jython engine add-on
*
* @author Sinbad²
* @version 3.0
*/
public class JythonEngineAddon {
@Inject
private IASEService aseService;
@Inject
private IJythonEngineProvider jythonEngineProvider;
@PostConstruct
private void addEngine() {
addEngineJob(IJythonEngineProvider.JYTHON);
}
private void addEngineJob(String scriptName) {
Job job = new Job(scriptName) {
@Override
protected IStatus run(IProgressMonitor monitor) {
IEngine engine = getEngine();
if (engine != null) {
aseService.addEngine(engine);
return Status.OK_STATUS;
}
return Status.CANCEL_STATUS;
}
};
job.schedule();
}
private IEngine getEngine() {
return jythonEngineProvider.getEngine();
}
}
@@ -0,0 +1,21 @@
package afryca.ase.engine.Jython.provider;
import afryca.ase.engine.IEngine;
/**
* Jython engine provider interface
*
* @author Sinbad²
* @version 3.0
*/
public interface IJythonEngineProvider {
public static final String JYTHON = "Jython"; //$NON-NLS-1$
/**
* Return Jython engine instance
*
* @return Jython engine instance
*/
IEngine getEngine();
}
@@ -0,0 +1,118 @@
package afryca.ase.engine.Jython.provider.internal;
import java.io.IOException;
import java.net.URL;
import java.util.Properties;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.script.ScriptEngine;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
import org.python.jsr223.PyScriptEngine;
import org.python.jsr223.PyScriptEngineFactory;
import org.python.util.PythonInterpreter;
import afryca.ase.engine.IEngine;
import afryca.ase.engine.Jython.Jython;
import afryca.ase.engine.Jython.provider.IJythonEngineProvider;
/**
* Jython engine default provider
*
* @author Sinbad²
* @version 3.0
*/
public class JythonEngineDefaultProvider implements IJythonEngineProvider {
private static final String PYTHON_HOME = "python.home"; //$NON-NLS-1$
@Inject
private IEclipseContext context;
private IEclipseContext topContext;
private Jython engine;
private Job job;
@PostConstruct
private void initialize() {
getTopContext();
createEngineJob(JYTHON);
}
private void getTopContext() {
IEclipseContext parent = context;
do {
topContext = parent;
parent = topContext.getParent();
} while (parent != null);
}
@Override
public IEngine getEngine() {
try {
job.join();
} catch (InterruptedException e) {
// Nothing to do
}
return (afryca.ase.engine.IEngine) topContext.get(JYTHON);
}
private void createEngineJob(String scriptName) {
job = new Job(scriptName) {
@Override
protected IStatus run(IProgressMonitor monitor) {
createEngine();
return (topContext.get(scriptName) != null)
? Status.OK_STATUS
: Status.CANCEL_STATUS;
}
};
job.schedule();
}
private void createEngine() {
ScriptEngine scriptEngine = null;
String home = getPythonHome();
if (home != null) {
Properties postProperties = new Properties();
postProperties.put(PYTHON_HOME, home);
PythonInterpreter.initialize(System.getProperties(), postProperties, null);
PyScriptEngineFactory factory = new PyScriptEngineFactory();
try {
scriptEngine = factory.getScriptEngine();
} catch(Exception e) {
//Nothing to do
}
}
topContext.set(JYTHON, (scriptEngine != null)
? new Jython((PyScriptEngine) scriptEngine)
: null);
}
private static String getPythonHome() {
try {
Bundle bundle = FrameworkUtil.getBundle(PythonInterpreter.class);
URL url = FileLocator.find(bundle, new Path("."), null); //$NON-NLS-1$
return FileLocator.toFileURL(url).getFile();
} catch (IOException ioException) {
return null;
}
}
public void end() {
if (engine != null) {
engine.end();
}
}
}
@@ -0,0 +1,27 @@
package afryca.ase.engine.Jython.provider.internal;
import org.eclipse.e4.core.contexts.ContextFunction;
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.model.application.MApplication;
import afryca.ase.engine.Jython.provider.IJythonEngineProvider;
/**
* Jython engine provider context function
*
* @author Sinbad²
* @version 3.0
*/
public class JythonEngineProviderContextFunction extends ContextFunction {
@Override
public Object compute(IEclipseContext context, String contextKey) {
IJythonEngineProvider jythonEngineProvider = ContextInjectionFactory.make(JythonEngineDefaultProvider.class,
context);
MApplication application = context.get(MApplication.class);
IEclipseContext applicationContext = application.getContext();
applicationContext.set(IJythonEngineProvider.class, jythonEngineProvider);
return jythonEngineProvider;
}
}