package ql.semantics;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import ql.ast.statement.Question;
import ql.semantics.values.Value;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
/**
* Created by Nik on 09-03-2015
*/
public class FileStore extends DataStore
{
private final File file;
public FileStore(CondQuestionTable condQuestionTable, ValueTable valueTable, File file)
{
super(condQuestionTable, valueTable);
this.file = file;
}
@Override
public void save() throws Exception
{
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = this.createDocument(docBuilder);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(this.file);
transformer.transform(source, result);
}
private Document createDocument(DocumentBuilder docBuilder)
{
Document doc = docBuilder.newDocument();
Element rootElement = doc.createElement("questionnaire");
doc.appendChild(rootElement);
for (Question question : this.getQuestions())
{
Element questionElem = this.createElementForQuestion(doc, question);
rootElement.appendChild(questionElem);
}
return doc;
}
private Element createElementForQuestion(Document doc, Question question)
{
Value answer = this.getAnswer(question.getId());
Element questionElem = doc.createElement("question");
questionElem.setAttribute("text", question.getLabel());
questionElem.setAttribute("answer", answer.toString());
return questionElem;
}
}