diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/Speaker_MongoDB_Impl.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/Speaker_MongoDB_Impl.java index 7ff9a03..f3d5133 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/Speaker_MongoDB_Impl.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/Speaker_MongoDB_Impl.java @@ -6,6 +6,7 @@ import org.texttechnologylab.project.gruppe_05_1.database.MongoOperations; import org.texttechnologylab.project.gruppe_05_1.domain.speaker.Membership; import org.texttechnologylab.project.gruppe_05_1.domain.speaker.Speaker; import org.texttechnologylab.project.gruppe_05_1.util.Logger; +import org.w3c.dom.Element; import java.io.File; import java.io.FileOutputStream; @@ -151,4 +152,36 @@ public class Speaker_MongoDB_Impl extends Speaker implements MongoOperations memberships = this.getMemberships(); + for (Membership membership : memberships) { + Element membershipElement = doc.createElement("membership"); + membershipElement.setAttribute("role", membership.getRole()); + membershipElement.setAttribute("member", membership.getMember()); + membershipElement.setAttribute("begin", membership.getBegin() != null ? membership.getBegin().toString() : ""); + membershipElement.setAttribute("end", membership.getEnd() != null ? membership.getEnd().toString() : ""); + membershipElement.setAttribute("label", membership.getLabel()); + membershipElement.setAttribute("wp", String.valueOf(membership.getWp())); + speakerElement.appendChild(membershipElement); + } + + return speakerElement; + } } diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/Speech_MongoDB_Impl.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/Speech_MongoDB_Impl.java index f77d55c..326da2e 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/Speech_MongoDB_Impl.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/Speech_MongoDB_Impl.java @@ -11,6 +11,7 @@ import org.texttechnologylab.project.gruppe_05_1.database.domainimpl.mdb.speechl import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Impls.Speech_File_Impl; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Content; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Speech; +import org.w3c.dom.Element; import java.util.List; @@ -115,4 +116,20 @@ public class Speech_MongoDB_Impl extends Speech_File_Impl implements Speech { return tex.toString(); } + public Element toXML(org.w3c.dom.Document doc) { + Element speech = doc.createElement("speech"); + speech.setAttribute("sessionId", String.valueOf(this.getSessionId())); + speech.setAttribute("agendaItemId", String.valueOf(this.getAgendaItemId())); + speech.setAttribute("speechId", String.valueOf(this.getSpeechId())); + speech.setAttribute("speakerId", String.valueOf(this.getSpeakerId())); + speech.setAttribute("speakerName", this.getSpeakerName()); + speech.setAttribute("fraction", this.getFraction()); + speech.setAttribute("speechKey", this.getSpeechKey()); + + for (Content content: this.getSpeechContents()) { + speech.appendChild(content.toXML(doc)); + } + + return speech; + } } diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Comment_MongoDB_Impl.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Comment_MongoDB_Impl.java index 1ddd2ae..d2ca74d 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Comment_MongoDB_Impl.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Comment_MongoDB_Impl.java @@ -3,6 +3,7 @@ package org.texttechnologylab.project.gruppe_05_1.database.domainimpl.mdb.speech import org.bson.Document; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Impls.Comment_File_Impl; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Comment; +import org.w3c.dom.Element; public class Comment_MongoDB_Impl extends Comment_File_Impl implements Comment { @@ -18,4 +19,13 @@ public class Comment_MongoDB_Impl extends Comment_File_Impl implements Comment { public String toTeX() { return "\\textcolor{blue}{Kommentar}: " + this.getComment() + "\\\\\n"; } + + public Element toXML(org.w3c.dom.Document doc) { + Element comment = doc.createElement("comment"); + comment.setAttribute("contentId", String.valueOf(this.getContentId())); + comment.setAttribute("speechId", String.valueOf(this.getSpeechId())); + comment.setAttribute("commentatorName", this.getCommentatorName()); + comment.setTextContent(this.getComment()); + return comment; + } } diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Line_MongoDB_Impl.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Line_MongoDB_Impl.java index 74bd3c1..d2d81f4 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Line_MongoDB_Impl.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Line_MongoDB_Impl.java @@ -3,6 +3,7 @@ package org.texttechnologylab.project.gruppe_05_1.database.domainimpl.mdb.speech import org.bson.Document; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Impls.Line_File_Impl; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Line; +import org.w3c.dom.Element; public class Line_MongoDB_Impl extends Line_File_Impl implements Line { @@ -16,4 +17,12 @@ public class Line_MongoDB_Impl extends Line_File_Impl implements Line { public String toTeX() { return this.getContent() + "\\\\\n"; } + + public Element toXML(org.w3c.dom.Document doc) { + Element line = doc.createElement("line"); + line.setAttribute("contentId", String.valueOf(this.getContentId())); + line.setAttribute("speechId", String.valueOf(this.getSpeechId())); + line.setTextContent(this.getContent()); + return line; + } } diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Speaker_MongoDB_Impl.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Speaker_MongoDB_Impl.java index 3d80009..4c6ffff 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Speaker_MongoDB_Impl.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/database/domainimpl/mdb/speechline/Speaker_MongoDB_Impl.java @@ -3,6 +3,7 @@ package org.texttechnologylab.project.gruppe_05_1.database.domainimpl.mdb.speech import org.bson.Document; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Impls.Speaker_File_Impl; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Speaker; +import org.w3c.dom.Element; public class Speaker_MongoDB_Impl extends Speaker_File_Impl implements Speaker { public Speaker_MongoDB_Impl(Document mongoDocument) { @@ -17,4 +18,14 @@ public class Speaker_MongoDB_Impl extends Speaker_File_Impl implements Speaker { public String toTeX() { return "\\textcolor{darkgreen}{Redner/Rednerin}: " + this.getSpeakerName() + "\\\\\n"; } + + public Element toXML(org.w3c.dom.Document doc) { + Element speaker = doc.createElement("speaker"); + speaker.setAttribute("contentId", String.valueOf(this.getContentId())); + speaker.setAttribute("speechId", String.valueOf(this.getSpeechId())); + speaker.setAttribute("speakerId", String.valueOf(this.getSpeakerId())); + speaker.setAttribute("speakerName", this.getSpeakerName()); + speaker.setAttribute("fraction", this.getFraction()); + return speaker; + } } diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/export/XMLUtil.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/export/XMLUtil.java new file mode 100644 index 0000000..4011614 --- /dev/null +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/export/XMLUtil.java @@ -0,0 +1,137 @@ +package org.texttechnologylab.project.gruppe_05_1.export; + +import org.eclipse.jetty.xml.XmlParser; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Node; +import org.texttechnologylab.project.gruppe_05_1.database.domainimpl.mdb.Speaker_MongoDB_Impl; +import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Speech; +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.StringWriter; +import java.util.List; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import static org.texttechnologylab.project.gruppe_05_1.database.MongoPprUtils.*; + +public class XMLUtil { + public static String documentToString(Document doc) { + try { + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + DOMSource source = new DOMSource(doc); + + // Writer to store the XML string + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + + // Perform transformation + transformer.transform(source, result); + + return writer.toString(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static Document createXmlDocument() throws ParserConfigurationException { + // create new doc + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + Document doc = factory.newDocumentBuilder().newDocument(); + + Element speechesElement = doc.createElement("speeches"); + doc.appendChild(speechesElement); + + return doc; + } + + public static void addSpeechById(Document doc, String speechId) { + // get speeches element + Element speechesElement = (Element) doc.getElementsByTagName("speeches").item(0); + + // create new speech element + Element speechElement = doc.createElement("speech"); + speechesElement.appendChild(speechElement); + + Speech speech = getSpeechByKey(speechId); + Speaker_MongoDB_Impl speaker = getSpeakerById(String.valueOf(speech.getSpeakerId())); + + speechElement.appendChild(speaker.toXML(doc)); + speechElement.appendChild(speech.toXML(doc)); + } + + public static void addSpeechBySpeech(Document doc, Speech speech) { + // get speeches element + Element speechesElement = (Element) doc.getElementsByTagName("speeches").item(0); + + // create new speech element + Element speechElement = doc.createElement("speech"); + speechesElement.appendChild(speechElement); + + Speaker_MongoDB_Impl speaker = getSpeakerById(String.valueOf(speech.getSpeakerId())); + + speechElement.appendChild(speaker.toXML(doc)); + speechElement.appendChild(speech.toXML(doc)); + } + + public static String getExportedSpeechById(String speechId) throws ParserConfigurationException { + Document doc = createXmlDocument(); + + addSpeechById(doc, speechId); + + return documentToString(doc); + } + + public static String getExportedSpeechesFromSpeakerById(String speakerId) throws ParserConfigurationException { + Document doc = createXmlDocument(); + + List speeches = getSpeechesBySpeakerId(speakerId); + + for (Speech speech : speeches) { + addSpeechBySpeech(doc, speech); + } + + return documentToString(doc); + } + + public static String getExportedAllSpeeches() throws ParserConfigurationException { + Document doc = createXmlDocument(); + + List speeches = getAllSpeeches(); + + for (Speech speech : speeches) { + addSpeechBySpeech(doc, speech); + } + + return documentToString(doc); + } + + public static String getExportedSpeechesWhithTopic(String topic) throws ParserConfigurationException { + Document doc = createXmlDocument(); + + List speeches = getAllSpeechesWithTopic(topic); + + for (Speech speech : speeches) { + addSpeechBySpeech(doc, speech); + } + + return documentToString(doc); + } + + public static String getExportedSpeechesbyIds(List speechIds) throws ParserConfigurationException { + Document doc = createXmlDocument(); + + for (String speechId : speechIds) { + addSpeechById(doc, speechId); + } + + return documentToString(doc); + } +} diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/RESTHandler.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/RESTHandler.java index 7226b07..f45ab21 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/RESTHandler.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/RESTHandler.java @@ -66,10 +66,16 @@ public class RESTHandler { app.get("/reden", SpeechController::listAllSpeeches); // zeige alle Reden an (Filtern möglich) - app.get("/export/pdf/speech/{id}", SpeechesExportController::exportSpeech); // exportiere eine Rede als PDF - app.get("/export/pdf/speaker/{id}", SpeechesExportController::exportSpeechesFromSpeaker); // exportiere alle Reden eines Parlamentariers als PDF - app.get("/export/pdf/topic/{topic}", SpeechesExportController::exportSpeechesWithTopic); // exportiere alle Reden zu einem Thema als PDF - app.get("/export/pdf/all", SpeechesExportController::exportAllSpeeches); // exportiere alle Reden als PDF CAUTION!!!: This will take forever but is required in the exercise - app.get("/export/pdf/speeches/{speechIds}", SpeechesExportController::exportSpeeches); // exportiere eine Liste von Reden als PDF + app.get("/export/pdf/speech/{id}", SpeechesLatexExportController::exportSpeech); // exportiere eine Rede als PDF + app.get("/export/pdf/speaker/{id}", SpeechesLatexExportController::exportSpeechesFromSpeaker); // exportiere alle Reden eines Parlamentariers als PDF + app.get("/export/pdf/topic/{topic}", SpeechesLatexExportController::exportSpeechesWithTopic); // exportiere alle Reden zu einem Thema als PDF + app.get("/export/pdf/all", SpeechesLatexExportController::exportAllSpeeches); // exportiere alle Reden als PDF CAUTION!!!: This will take forever but is required in the exercise + app.get("/export/pdf/speeches/{speechIds}", SpeechesLatexExportController::exportSpeeches); // exportiere eine Liste von Reden als PDF + + app.get("/export/xml/speech/{id}", SpeechesXMLExportController::exportSpeech); // exportiere eine Rede als XML + app.get("/export/xml/speaker/{id}", SpeechesXMLExportController::exportSpeechesFromSpeaker); // exportiere alle Reden eines Parlamentariers als XML + app.get("/export/xml/topic/{topic}", SpeechesXMLExportController::exportSpeechesWithTopic); // exportiere alle Reden zu einem Thema als XML + app.get("/export/xml/all", SpeechesXMLExportController::exportAllSpeeches); // exportiere alle Reden als XML + app.get("/export/xml/speeches/{speechIds}", SpeechesXMLExportController::exportSpeeches); // exportiere eine Liste von Reden als XML } } diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesExportController.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesLatexExportController.java similarity index 99% rename from src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesExportController.java rename to src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesLatexExportController.java index c6ecf99..f3b6205 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesExportController.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesLatexExportController.java @@ -14,7 +14,7 @@ import java.util.List; import static org.texttechnologylab.project.gruppe_05_1.export.TeXUtil.*; -public class SpeechesExportController { +public class SpeechesLatexExportController { @OpenApi( summary = "Get a speech as a PDF", description = "Returns a LaTeX generated pdf of a selected speech", diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesXMLExportController.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesXMLExportController.java new file mode 100644 index 0000000..2b73910 --- /dev/null +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesXMLExportController.java @@ -0,0 +1,181 @@ +package org.texttechnologylab.project.gruppe_05_1.rest; + +import io.javalin.http.Context; +import io.javalin.openapi.HttpMethod; +import io.javalin.openapi.OpenApi; +import io.javalin.openapi.OpenApiResponse; +import org.texttechnologylab.project.gruppe_05_1.util.Logger; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.Base64; +import java.util.List; + +import static org.texttechnologylab.project.gruppe_05_1.export.XMLUtil.*; +import static org.texttechnologylab.project.gruppe_05_1.export.TeXUtil.*; + +public class SpeechesXMLExportController { + @OpenApi( + summary = "Get a speech as XML", + description = "Returns an XML file of a selected speech", + operationId = "getSpeechExport", + path = "/export/xml/speech/{id}", + methods = HttpMethod.GET, + tags = {"Export", "Speeches", "XML"}, + responses = { + @OpenApiResponse(status = "200") + }) + public static void exportSpeech(Context ctx) { + String xmlContent; + try { + xmlContent = getExportedSpeechById(ctx.pathParam("id")); + ByteArrayInputStream stream = new ByteArrayInputStream(xmlContent.getBytes()); + if (stream.available() == 0) { + Logger.error("XML stream is empty."); + ctx.result("Internal Server Error"); + ctx.status(500); + return; + } + ctx.contentType("application/xml"); + ctx.result(stream); + } catch (Exception e) { + Logger.error("Failed to generate Export of Speech with ID " + ctx.pathParam("id")); + Logger.error(e.getMessage()); + Logger.debug(Arrays.toString(e.getStackTrace())); + ctx.result("Internal Server Error"); + ctx.status(500); + } + } + + @OpenApi( + summary = "Get all speeches from a speaker as XML", + description = "Returns an XML file of all speeches of a selected speech", + operationId = "getSpeechesFromSpeakerExport", + path = "/export/xml/speaker/{id}", + methods = HttpMethod.GET, + tags = {"Export", "Speeches", "XML"}, + responses = { + @OpenApiResponse(status = "200") + }) + public static void exportSpeechesFromSpeaker(Context ctx) { + String xmlContent; + try { + xmlContent = getExportedSpeechesFromSpeakerById(ctx.pathParam("id")); + ByteArrayInputStream stream = new ByteArrayInputStream(xmlContent.getBytes()); + if (stream.available() == 0) { + Logger.error("XML stream is empty."); + ctx.result("Internal Server Error"); + ctx.status(500); + return; + } + ctx.contentType("application/xml"); + ctx.result(stream); + } catch (Exception e) { + Logger.error("Failed to generate Export of Speeches from Speaker with ID " + ctx.pathParam("id")); + Logger.error(e.getMessage()); + Logger.debug(Arrays.toString(e.getStackTrace())); + ctx.result("Internal Server Error"); + ctx.status(500); + } + } + + @OpenApi( + summary = "Get all speeches as XML", + description = "Returns an XML file of all speeches", + operationId = "getAllSpeeches", + path = "/export/xml/all", + methods = HttpMethod.GET, + tags = {"Export", "Speeches", "XML"}, + responses = { + @OpenApiResponse(status = "200") + }) + public static void exportAllSpeeches(Context ctx) { + String xmlContent; + try { + xmlContent = getExportedAllSpeeches(); + ByteArrayInputStream stream = new ByteArrayInputStream(xmlContent.getBytes()); + if (stream.available() == 0) { + Logger.error("XML stream is empty."); + ctx.result("Internal Server Error"); + ctx.status(500); + return; + } + ctx.contentType("application/xml"); + ctx.result(stream); + } catch (Exception e) { + Logger.error("Failed to generate Export of all Speeches"); + Logger.error(e.getMessage()); + Logger.debug(Arrays.toString(e.getStackTrace())); + ctx.result("Internal Server Error"); + ctx.status(500); + } + } + + @OpenApi( + summary = "Get all speeches with specific topic as XML", + description = "Returns an XML file of all speeches with specific topic", + operationId = "getAllSpeechesWithTopic", + path = "/export/xml/topic/{topic}", + methods = HttpMethod.GET, + tags = {"Export", "Speeches", "XML"}, + responses = { + @OpenApiResponse(status = "200") + }) + public static void exportSpeechesWithTopic(Context ctx) { + String xmlContent; + try { + xmlContent = getExportedSpeechesWhithTopic(ctx.pathParam("topic")); + ByteArrayInputStream stream = new ByteArrayInputStream(xmlContent.getBytes()); + if (stream.available() == 0) { + Logger.error("XML stream is empty."); + ctx.result("Internal Server Error"); + ctx.status(500); + return; + } + ctx.contentType("application/xml"); + ctx.result(stream); + } catch (Exception e) { + Logger.error("Failed to generate Export of all Speeches"); + Logger.error(e.getMessage()); + Logger.debug(Arrays.toString(e.getStackTrace())); + ctx.result("Internal Server Error"); + ctx.status(500); + } + } + + @OpenApi( + summary = "Get speeches by IDs as XML", + description = "Returns an XML file of the speeches specified by their IDs", + operationId = "getSpeechesByIds", + path = "/export/xml/speeches/{speechIds}", // Comma-separated IDs + methods = HttpMethod.GET, + tags = {"Export", "Speeches", "XML"}, + responses = { + @OpenApiResponse(status = "200") + }) + public static void exportSpeeches(Context ctx) { + String xmlContent; + try { + String speechIdsParam = ctx.pathParam("speechIds"); + List speechIds = Arrays.asList(speechIdsParam.split(",")); + xmlContent = getExportedSpeechesbyIds(speechIds); + ByteArrayInputStream stream = new ByteArrayInputStream(xmlContent.getBytes()); + if (stream.available() == 0) { + Logger.error("XML stream is empty."); + ctx.result("Internal Server Error"); + ctx.status(500); + return; + } + ctx.contentType("application/xml"); + ctx.result(stream); + } catch (Exception e) { + Logger.error("Failed to generate Export of all Speeches"); + Logger.error(e.getMessage()); + Logger.debug(Arrays.toString(e.getStackTrace())); + ctx.result("Internal Server Error"); + ctx.status(500); + } + } +} diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Comment_File_Impl.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Comment_File_Impl.java index 96b802b..4a824b1 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Comment_File_Impl.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Comment_File_Impl.java @@ -3,6 +3,8 @@ package org.texttechnologylab.project.gruppe_05_1.xml.speeches.Impls; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Comment; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Content; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.enums.MongoDBEntryType; +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class Comment_File_Impl implements Content, Comment { @@ -47,4 +49,14 @@ public class Comment_File_Impl implements Content, Comment { public String toTeX() { return "\\textcolor{blue}{Kommentar}: " + this.getComment() + "\\\n"; } + + @Override + public Element toXML(Document doc) { + Element comment = doc.createElement("comment"); + comment.setAttribute("contentId", String.valueOf(this.getContentId())); + comment.setAttribute("speechId", String.valueOf(this.getSpeechId())); + comment.setAttribute("commentatorName", this.getCommentatorName()); + comment.setTextContent(this.getComment()); + return comment; + } } diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Line_File_Impl.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Line_File_Impl.java index f9baea5..72149fc 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Line_File_Impl.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Line_File_Impl.java @@ -3,6 +3,8 @@ package org.texttechnologylab.project.gruppe_05_1.xml.speeches.Impls; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Content; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Line; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.enums.MongoDBEntryType; +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class Line_File_Impl implements Content, Line { private final int contentId; @@ -39,4 +41,13 @@ public class Line_File_Impl implements Content, Line { public String toTeX() { return this.getContent() + "\\\n"; } + + @Override + public Element toXML(Document doc) { + Element line = doc.createElement("line"); + line.setAttribute("contentId", String.valueOf(this.getContentId())); + line.setAttribute("speechId", String.valueOf(this.getSpeechId())); + line.setTextContent(this.getContent()); + return line; + } } \ No newline at end of file diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Speaker_File_Impl.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Speaker_File_Impl.java index 4dfe625..8959244 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Speaker_File_Impl.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Speaker_File_Impl.java @@ -3,6 +3,8 @@ package org.texttechnologylab.project.gruppe_05_1.xml.speeches.Impls; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Content; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Speaker; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.enums.MongoDBEntryType; +import org.w3c.dom.Document; +import org.w3c.dom.Element; public class Speaker_File_Impl implements Content, Speaker { @@ -54,4 +56,15 @@ public class Speaker_File_Impl implements Content, Speaker { public String toTeX() { return "\\textcolor{blue}{Redner/Rednerin}: " + this.getSpeakerName() + "\\\n"; } + + @Override + public Element toXML(Document doc) { + Element speaker = doc.createElement("speaker"); + speaker.setAttribute("contentId", String.valueOf(this.getContentId())); + speaker.setAttribute("speechId", String.valueOf(this.getSpeechId())); + speaker.setAttribute("speakerId", String.valueOf(this.getSpeakerId())); + speaker.setAttribute("speakerName", this.getSpeakerName()); + speaker.setAttribute("fraction", this.getFraction()); + return speaker; + } } diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Speech_File_Impl.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Speech_File_Impl.java index 75eeeaa..aa62491 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Speech_File_Impl.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Impls/Speech_File_Impl.java @@ -5,6 +5,8 @@ import org.apache.uima.jcas.JCas; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Content; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces.Speech; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.enums.MongoDBEntryType; +import org.w3c.dom.Document; +import org.w3c.dom.Element; import java.util.ArrayList; @@ -121,4 +123,22 @@ public class Speech_File_Impl implements Speech { return tex.toString(); } + + @Override + public Element toXML(Document doc) { + Element speech = doc.createElement("speech"); + speech.setAttribute("sessionId", String.valueOf(this.getSessionId())); + speech.setAttribute("agendaItemId", String.valueOf(this.getAgendaItemId())); + speech.setAttribute("speechId", String.valueOf(this.getSpeechId())); + speech.setAttribute("speakerId", String.valueOf(this.getSpeakerId())); + speech.setAttribute("speakerName", this.getSpeakerName()); + speech.setAttribute("fraction", this.getFraction()); + speech.setAttribute("speechKey", this.getSpeechKey()); + + for (Content content: this.getSpeechContents()) { + speech.appendChild(content.toXML(doc)); + } + + return speech; + } } diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Interfaces/Content.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Interfaces/Content.java index 5543428..da5955e 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Interfaces/Content.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Interfaces/Content.java @@ -1,6 +1,7 @@ package org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.enums.MongoDBEntryType; +import org.w3c.dom.Element; public interface Content { /** @@ -31,4 +32,12 @@ public interface Content { * @return The content. */ String toTeX(); + + /** + * Returns the content as XML. + * + * @param doc The XML document. + * @return The content. + */ + Element toXML(org.w3c.dom.Document doc); } diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Interfaces/Speech.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Interfaces/Speech.java index 75032ab..2152a6a 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Interfaces/Speech.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/xml/speeches/Interfaces/Speech.java @@ -3,6 +3,8 @@ package org.texttechnologylab.project.gruppe_05_1.xml.speeches.Interfaces; import org.apache.uima.UIMAException; import org.apache.uima.jcas.JCas; import org.texttechnologylab.project.gruppe_05_1.xml.speeches.enums.MongoDBEntryType; +import org.w3c.dom.Document; +import org.w3c.dom.Element; import java.util.List; @@ -87,4 +89,6 @@ public interface Speech { JCas toCas() throws UIMAException; String toTeX(); + + Element toXML(Document doc); }