package kr.ac.snu.selab.soot.util;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import org.apache.log4j.Logger;
import org.znerd.xmlenc.LineBreak;
import org.znerd.xmlenc.XMLOutputter;
public class XMLWriter {
private static Logger log = Logger.getLogger(XMLWriter.class);
private XMLOutputter outputter;
private Writer writer;
public XMLWriter(String filePath) {
try {
open(new FileWriter(filePath));
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
public XMLWriter(Writer writer) {
open(writer);
}
private void open(Writer w) {
this.writer = w;
try {
outputter = new XMLOutputter(writer, "UTF-8");
String os = System.getProperty("os.name").toLowerCase();
if (os.indexOf("win") >= 0) {
outputter.setLineBreak(LineBreak.DOS);
} else if (os.indexOf("mac") >= 0) {
outputter.setLineBreak(LineBreak.MACOS);
} else {
outputter.setLineBreak(LineBreak.UNIX);
}
outputter.setIndentation("\t");
outputter.declaration();
} catch (IllegalStateException e) {
log.error(e.getMessage(), e);
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
public void close() {
if (outputter != null)
try {
outputter.endDocument();
} catch (Exception e) {
}
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
}
}
}
public void startElement(String name) throws IOException {
outputter.startTag(name);
}
public void attribute(String name, String value) throws IOException {
outputter.attribute(name, value);
}
public void endElement() throws IOException {
outputter.endTag();
}
public void pcData(String data) throws IOException {
outputter.pcdata(data);
}
public void simpleElement(String elementName, String pcdata)
throws IOException {
outputter.startTag(elementName);
outputter.pcdata(pcdata);
outputter.endTag();
}
}