/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.script;
import java.io.Serializable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import org.geoserver.script.app.AppHook;
import org.geoserver.script.function.FunctionHook;
import org.geoserver.script.wfs.WfsTxHook;
import org.geoserver.script.wps.WpsHook;
/**
* Base class for script plugins.
* <p>
* Instances of this class must be registered in the application context.
* </p>
* @author Justin Deoliveira, OpenGeo
*
*/
public abstract class ScriptPlugin implements Serializable {
String extension;
Class<? extends ScriptEngineFactory> scriptEngineFactoryClass;
/**
* Constructor.
*
* @param extension The associated extension for the plugin.
* @param factoryClass The associated jsr-223 script engine factory class.
*/
protected ScriptPlugin(String extension, Class<? extends ScriptEngineFactory> factoryClass) {
this.extension = extension;
this.scriptEngineFactoryClass = factoryClass;
}
public void init(ScriptManager scriptMgr) throws Exception {
}
/**
* The associated extension for the script plugin, examples: "py", "js", "rb", etc...
*/
public String getExtension() {
return extension;
}
/**
* The id of the script plugin, examples: "python", "javascript", "ruby", etc...
*/
public abstract String getId();
/**
* The id of the script plugin, meant for display, examples: "Python", "JavaScript", "Ruby",
* etc...
*/
public abstract String getDisplayName();
/**
* The value of the mode parameter to use for the CodeMirror editor.
* <p>
* Subclasses may override, the default for this method is to return {@link #getId()}.
* </p>
*/
public String getEditorMode() {
return getId();
}
/**
* The associated script engine factory for the script plugin.
*/
public Class<? extends ScriptEngineFactory> getScriptEngineFactoryClass() {
return scriptEngineFactoryClass;
}
/**
* Callback to initialize a new script engine.
* <p>
* This method is called whenever a new script engine is created and before any scripts are
* created. Plugins may use this method to set up any context they wish to make avialable to
* scripts running in the engine. This default implementation does nothing.
* </p>
*/
public void initScriptEngine(ScriptEngine engine) {
}
/**
* Creates the hook for "app" requests.
* <p>
* This default implementation returns <code>null</code>, subclass should override in order to
* implement a custom app hook.
* </p>
*/
public AppHook createAppHook() {
return new AppHook(this);
}
/**
* Creates the hook for wps processes.
* <p>
* This default implementation returns <code>null</code>, subclass should override in order to
* implement a custom hook.
* </p>
*/
public WpsHook createWpsHook() {
return new WpsHook(this);
}
/**
* Creates the hook for functions.
* <p>
* This default implementation returns <code>null</code>, subclass should override in order to
* implement a custom hook.
* </p>
*/
public FunctionHook createFunctionHook() {
return new FunctionHook(this);
}
/**
* Creates the hook for WFS transactions.
* <p>
* This default implementation returns a default implementation, subclass should override in
* order to implement a custom hook.
* </p>
*/
public WfsTxHook createWfsTxHook() {
return new WfsTxHook(this);
}
}