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);
}
}
}