package org.vaadin.mideaas.model;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import org.vaadin.mideaas.app.MideaasConfig;
import org.vaadin.mideaas.test.Script;
import org.vaadin.mideaas.test.ScriptContainer;
public class XmlWriter {
static int indentation = 0;
static BufferedWriter out = null;
public synchronized void startWriting(String projectName) {
try {
out = new BufferedWriter(new FileWriter(MideaasConfig.getProjectsDir() + "/" + projectName + "/" + "TestDataStorage.xml"));
this.childLoop(ScriptContainer.getContainer(), ServerContainer.getServerContainer(), projectName);
out.close();
}
catch (Exception e) {
e.printStackTrace();
try {
out.close(); //trying to close the FileWriter in case it was left open
} catch (IOException ioe) {
// apparently it's closed already
}
}
}
private void childLoop(ScriptContainer scriptcontainer, ServerContainer servercontainer, String projectName) {
this.startDocument();
this.startElement("project", "name", projectName);
this.startElement("tests", "", "");
for (Script script : scriptcontainer.getItemIds()) {
this.startElement("test", "name", script.getName());
this.startElement("location", "", "");
this.characters(script.getLocation());
this.endElement("location");
this.startElement("description", "", "");
this.characters(script.getDescription());
this.endElement("description");
this.startElement("location", "", "");
this.characters(script.getLocation());
this.endElement("location");
this.startElement("result", "", "");
this.characters(script.getResult());
this.endElement("result");
this.startElement("check", "", "");
this.characters(String.valueOf(script.getCheck()));
this.endElement("check");
this.startElement("notes", "", "");
this.characters(script.getNotes());
this.endElement("notes");
this.startElement("testengine", "", "");
this.characters(script.getEngine());
this.endElement("testengine");
this.endElement("test");
}
this.endElement("tests");
System.out.println(servercontainer.getItemIds());
this.startElement("servers", "", "");
for (Server server : servercontainer.getItemIds()) {
this.startElement("server", "IP", server.getIP());
this.startElement("engines", "", "");
String engines = "";
for (String e : server.getEngines()) {
if (engines.isEmpty()) {
engines = e;
} else {
engines = engines + ", " + e;
}
}
this.characters(engines);
this.endElement("engines");
this.startElement("details", "", "");
this.characters(server.getDetails());
this.endElement("details");
this.endElement("server");
}
this.endElement("servers");
this.endElement("project");
}
private void startDocument() {
try {
out.write("<?xml version=\"1.0\" encoding=\"" + "UTF-8" + "\"?>");
} catch (IOException e) {
e.printStackTrace();
}
}
private String getIndents() {
String indents = "";
for (int i = 0; i < indentation; i++) {
indents += " ";
}
return indents;
}
private void startElement(String elementName, String attrName, String attrValue) {
try {
if (!attrName.isEmpty()) {
out.write("\n" + this.getIndents() + "<" + elementName + " " + attrName + "=\"" + attrValue + "\">");
} else {
out.write("\n" + this.getIndents() + "<" + elementName + ">");
}
indentation += 1;
} catch (IOException e) {
e.printStackTrace();
}
}
private void characters(String elementContent) {
try {
out.write(elementContent);
} catch (IOException e) {
e.printStackTrace();
}
}
private void endElement(String elementName) {
indentation -= 1;
try {
if (elementName.matches("test") || elementName.matches("tests") || elementName.matches("server") || elementName.matches("servers") || elementName.matches("project")) {
out.write("\n" + this.getIndents() + "</" + elementName + ">");
} else {
out.write("</" + elementName + ">");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}