package jetbrains.mps.tool.common; /*Generated by MPS */ import org.jdom.Element; import org.apache.log4j.Level; import java.util.Map; import java.util.LinkedHashMap; import java.io.File; import java.io.IOException; import org.jdom.Document; import org.jdom.JDOMException; public class ScriptData { public static final String ROOT_TASKDATA = "taskdata"; public static final String PROP_WORKER = "worker"; public static final String PROP_FAILONERROR = "failOnError"; public static final String PROP_LOGLEVEL = "logLevel"; public static final String PROP_LOADBOOTSTRAPLIBRARIES = "loadBootstrapLibraries"; public static final String ELEM_PROPERTIES = "properties"; public static final String ELEM_MACROS = "macros"; public static final String NAME = "name"; public static final String VALUE = "value"; public static final String PATH = "path"; public static final String ELEM_LIBRARIES = "libraries"; public static final String ELEM_LIBRARY = "library"; private Element myXML; private String myWorker; private boolean myFailOnError = true; private Level myLogLevel = Level.INFO; private boolean myLoadBootstrapLibraries = true; private Map<String, String> myProperties = new LinkedHashMap<String, String>(); private Map<String, String> myMacros = new LinkedHashMap<String, String>(); private Map<String, File> myLibraries = new LinkedHashMap<String, File>(); private Map<String, Element> myData = new LinkedHashMap<String, Element>(); public ScriptData() { } public void save(File file) throws IOException { myXML = new Element(ROOT_TASKDATA); if (myWorker != null) { myXML.setAttribute(PROP_WORKER, myWorker); } myXML.setAttribute(PROP_FAILONERROR, myFailOnError + ""); myXML.setAttribute(PROP_LOGLEVEL, myLogLevel.toInt() + ""); myXML.setAttribute(PROP_LOADBOOTSTRAPLIBRARIES, myLoadBootstrapLibraries + ""); for (String key : myProperties.keySet()) { myXML.addContent(new Element(ELEM_PROPERTIES).setAttribute(NAME, key).setAttribute(VALUE, myProperties.get(key))); } for (String key : myMacros.keySet()) { myXML.addContent(new Element(ELEM_MACROS).setAttribute(NAME, key).setAttribute(VALUE, myMacros.get(key))); } if (!(myLibraries.isEmpty())) { saveLibraries(); } for (Element element : myData.values()) { myXML.addContent(element); } JDOMUtil.writeDocument(new Document(myXML), file); } public void load(File file) throws IOException, JDOMException { myXML = JDOMUtil.loadDocument(file).getRootElement(); myWorker = myXML.getAttributeValue(PROP_WORKER); myFailOnError = Boolean.parseBoolean(myXML.getAttributeValue(PROP_FAILONERROR)); int logLevelInt = Integer.parseInt(myXML.getAttributeValue(PROP_LOGLEVEL)); myLogLevel = Level.toLevel(logLevelInt, Level.INFO); myLoadBootstrapLibraries = Boolean.parseBoolean(myXML.getAttributeValue(PROP_LOADBOOTSTRAPLIBRARIES)); for (Object o : myXML.getChildren()) { Element elem = (Element) o; if (elem.getName().equals(ELEM_PROPERTIES)) { addProperty(elem.getAttributeValue(NAME), elem.getAttributeValue(VALUE)); } else if (elem.getName().equals(ELEM_MACROS)) { addMacro(elem.getAttributeValue(NAME), elem.getAttributeValue(VALUE)); } else { myData.put(elem.getName(), elem); } } if (myData.containsKey(ELEM_LIBRARIES)) { loadLibraries(myData.remove(ELEM_LIBRARIES)); } } private void loadLibraries(Element libraries) { for (Object o : libraries.getChildren(ELEM_LIBRARY)) { Element elem = (Element) o; File file = new File(elem.getAttributeValue(PATH)); addLibrary(elem.getAttributeValue(NAME), file); } } private void saveLibraries() { Element elem = new Element(ELEM_LIBRARIES); for (String key : myLibraries.keySet()) { elem.addContent(new Element(ELEM_LIBRARY).setAttribute(NAME, key).setAttribute(PATH, myLibraries.get(key).getAbsolutePath())); } setData(ELEM_LIBRARIES, elem); } public void setWorker(String workerClass) { myWorker = workerClass; } public String getWorker() { return myWorker; } public void setFailOnError(boolean failOnError) { myFailOnError = failOnError; } public boolean getFailOnError() { return myFailOnError; } public void setLogLevel(Level logLevel) { myLogLevel = logLevel; } public Level getLogLevel() { return myLogLevel; } public void setLoadBootstrapLibraries(boolean isLoadBootstrapLibraries) { myLoadBootstrapLibraries = isLoadBootstrapLibraries; } public boolean getLoadBootstrapLibraries() { return myLoadBootstrapLibraries; } public void setProperties(Map<String, String> properties) { myProperties = properties; } public Map<String, String> getProperties() { return myProperties; } public void addProperty(String key, String value) { myProperties.put(key, value); } public void setMacros(Map<String, String> macros) { myMacros = macros; } public Map<String, String> getMacros() { return myMacros; } public void addMacro(String key, String value) { myMacros.put(key, value); } public void setLibraries(Map<String, File> libraries) { myLibraries = libraries; } public Map<String, File> getLibraries() { return myLibraries; } public void addLibrary(String name, File library) { myLibraries.put(name, library); } public Element getData(String key) { return (myData.containsKey(key) ? myData.get(key) : null); } public void setData(String key, Element data) { if (data == null) { myData.remove(key); } else { data.setName(key); myData.put(key, data); } } }