package org.geogebra.common.plugin;
import java.util.HashMap;
import org.geogebra.common.main.App;
import org.geogebra.common.plugin.script.GgbScript;
import org.geogebra.common.plugin.script.JsScript;
import org.geogebra.common.plugin.script.Script;
/**
* @author arno Script classes should get registered here.
*/
public enum ScriptType {
/**
* GgbScript
*/
GGBSCRIPT("Script", "ggbscript") {
@Override
public Script newScript(App app, String text) {
return new GgbScript(app, text);
}
},
/**
* JsScript
*/
JAVASCRIPT("JavaScript", "javascript") {
@Override
public Script newScript(App app, String text) {
return new JsScript(app, text);
}
};
private String name;
private String xmlName;
private static HashMap<String, ScriptType> xmlMap = new HashMap<String, ScriptType>();
ScriptType(String name, String xmlName) {
this.name = name;
this.xmlName = xmlName;
}
/**
* Create a new script of this type
*
* @param app
* the application where the script lives
* @param text
* the source code of the script
* @return a new Script object
*/
public abstract Script newScript(App app, String text);
/**
* Get the script type's name
*
* @return the name of the script type
*/
public String getName() {
return name;
}
/**
* Get the script type XML attribute name
*
* @return the XML attribute name
*/
public String getXMLName() {
return xmlName;
}
/**
* @param eName
* the xml name of the script type
* @return the script type with this name or null if none exists
*/
public static ScriptType getTypeWithXMLName(String eName) {
return xmlMap.get(eName);
}
static {
for (ScriptType tp : ScriptType.values()) {
xmlMap.put(tp.getXMLName(), tp);
}
}
}