package ${package};
import java.io.File;
import javax.xml.parsers.*;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public final class XMLShelfWriter implements ShelfWriter {
private String filename = "bookshelf.xml";
public String getFilename() {
return filename;
}
public void setFilename(final String file) {
this.filename = file;
}
@Override
public Bookshelf load() {
return null;
}
@Override
public void write(final Bookshelf shelf) {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try {
builder = builderFactory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
throw new RuntimeException(e);
}
Document document = builder.newDocument();
Element root = document.createElement("shelf");
for (int i = 0; i < shelf.bookCount(); ++i) {
Element book = document.createElement("book");
book.setAttribute("id", Integer.toString(i));
Element e = document.createElement("author");
e.appendChild(document.createTextNode(shelf.get(i).getAuthor()));
book.appendChild(e);
e = document.createElement("title");
e.appendChild(document.createTextNode(shelf.get(i).getTitle().toString()));
book.appendChild(e);
e = document.createElement("isbn");
e.appendChild(document.createTextNode(shelf.get(i).getIsbn().stripped()));
book.appendChild(e);
e = document.createElement("price");
e.appendChild(document.createTextNode(Float.toString(shelf.get(i).getPrice())));
book.appendChild(e);
root.appendChild(book);
}
document.appendChild(root);
DOMSource source = new DOMSource(document);
StreamResult output = new StreamResult(new File(filename));
Transformer transformer;
try {
transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
transformer.transform(source, output);
} catch (TransformerConfigurationException e) {
throw new RuntimeException(e);
} catch (TransformerFactoryConfigurationError e) {
throw new RuntimeException(e);
} catch (TransformerException e) {
throw new RuntimeException(e);
}
}
}