package org.egonet.io; import java.io.File; import java.io.IOException; import org.egonet.model.Interview; import org.egonet.model.Study; import org.egonet.model.answer.*; import org.egonet.model.question.Question; import electric.xml.Document; import electric.xml.Element; public class InterviewWriter { private Study study; private File interviewFile; public InterviewWriter(Study study, File interviewFile) { this.study = study; this.interviewFile = interviewFile; } public void setInterview(Interview interview) throws IOException { Document document = new Document(); if (interviewFile != null) { document.setEncoding("UTF-8"); document.setVersion("1.0"); Element interviewDocument = document.setRoot("Interview"); interviewDocument.setAttribute("StudyId", study.getStudyId()); interviewDocument.setAttribute("StudyName", study.getStudyName()); interviewDocument.setAttribute("Creator", org.egonet.model.Shared.version); Element alterListElem = interviewDocument.addElement("AlterList"); Element answerListElem = interviewDocument.addElement("AnswerList"); interviewDocument.addElement("Complete").setBoolean(interview.isComplete()); interviewDocument.addElement("FollowUpProtocol").setBoolean(interview.isFollowup()); String[][] _alterLists = interview.getAlterQuestionPromptAnswers(); for (int i = 0; i < _alterLists.length; i++) { Element questionPrompt = alterListElem.addElement("QuestionPrompt"); for(int j = 0; j < _alterLists[i].length; j++) { questionPrompt.addElement("Name").setText(_alterLists[i][j]); } } Answer[] _answers = interview.get_answers(); for (int i = 0; i < _answers.length; i++) { writeAnswer(answerListElem, interview.getQuestion(i), interview, _answers[i]); } interviewDocument.addElement("notes").setString(interview.getNotes()); document.write(interviewFile); } } public void writeAnswer(Element e, Question question, Interview interview, Answer answer) { Element answerElement = new Element("Answer"); answerElement.addComment("Answer element: " + answer.getString()); if(question != null) answerElement.addComment("Corresp question: " + question.getString()); answerElement.addElement("QuestionId").setLong(answer.getQuestionId().longValue()); answerElement.addElement("Answered").setBoolean(answer.isAnswered()); if (answer.isAnswered()) { if(answer.getQuestionId().equals(1205185478364L)) System.err.println("Printed a value into the XML file that was zero: " + answer.getString()); answerElement.addElement("Value").setInt(answer.getValue()); answerElement.addElement("Index").setInt(answer.getIndex()); answerElement.addElement("Adjacent").setBoolean(answer.adjacent); answerElement.addElement("String").setText(answer.string); answerElement.addElement("TimeStamp").setText(answer.timestamp); } if (answer.getAlters().size() > 0) { String[] alterList = interview.getAlterList(); Element altersElement = answerElement.addElement("Alters"); for (int i = 0; i < answer.getAlters().size(); i++) { int alterNumber = answer.getAlters().get(i); // alter may not have a name yet String alterName = alterList.length > alterNumber ? alterList[alterNumber] : "Undefined alter name (#"+alterNumber+")"; Element thisAlterElement = altersElement.addElement("Index"); thisAlterElement.setInt(alterNumber); // handy extra attribute thisAlterElement.setAttribute("name", alterName); } } e.addElement(answerElement); } }