From 846e1304188bcdcd58d8d6c2fc5a455d9efd1aae Mon Sep 17 00:00:00 2001 From: Jonas Werner Date: Sun, 23 Mar 2025 17:46:38 +0100 Subject: [PATCH] added support for speech export on /export page --- .../project/gruppe_05_1/rest/RESTHandler.java | 2 ++ .../rest/SpeechesLatexExportController.java | 11 ++++++-- .../rest/SpeechesXMLExportController.java | 11 ++++++-- src/main/resources/templates/export.ftl | 25 +++++++++++++++++++ 4 files changed, 45 insertions(+), 4 deletions(-) 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 9cbc854..b2d3347 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 @@ -69,12 +69,14 @@ public class RESTHandler { app.get("/reden", SpeechController::listAllSpeeches); // zeige alle Reden an (Filtern möglich) app.get("/export/pdf/speech/{id}", SpeechesLatexExportController::exportSpeech); // exportiere eine Rede als PDF + app.get("/export/pdf/speech", 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/speech", 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 diff --git a/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesLatexExportController.java b/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesLatexExportController.java index abf729e..2b61d76 100644 --- a/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesLatexExportController.java +++ b/src/main/java/org/texttechnologylab/project/gruppe_05_1/rest/SpeechesLatexExportController.java @@ -26,11 +26,18 @@ public class SpeechesLatexExportController { @OpenApiResponse(status = "200") }) public static void exportSpeech(Context ctx) { + String speechId = null; + try { + speechId = ctx.pathParam("id"); + } catch (Exception e) { + // check query param + speechId = ctx.queryParam("speechId"); + } byte[] pdfBytes = new byte[0]; try { - pdfBytes = Base64.getDecoder().decode(getExportedSpeechBase64StringBySpeechId(ctx.pathParam("id"))); + pdfBytes = Base64.getDecoder().decode(getExportedSpeechBase64StringBySpeechId(speechId)); } catch (Exception e) { - Logger.error("Failed to generate Export of Speech with ID " + ctx.pathParam("id")); + Logger.error("Failed to generate Export of Speech with ID " + speechId); Logger.error(e.getMessage()); Logger.debug(Arrays.toString(e.getStackTrace())); } 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 index 2b73910..e2324d0 100644 --- 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 @@ -28,9 +28,16 @@ public class SpeechesXMLExportController { @OpenApiResponse(status = "200") }) public static void exportSpeech(Context ctx) { + String speechId = null; + try { + speechId = ctx.pathParam("id"); + } catch (Exception e) { + // check query param + speechId = ctx.queryParam("speechId"); + } String xmlContent; try { - xmlContent = getExportedSpeechById(ctx.pathParam("id")); + xmlContent = getExportedSpeechById(speechId); ByteArrayInputStream stream = new ByteArrayInputStream(xmlContent.getBytes()); if (stream.available() == 0) { Logger.error("XML stream is empty."); @@ -41,7 +48,7 @@ public class SpeechesXMLExportController { 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("Failed to generate Export of Speech with ID " + speechId); Logger.error(e.getMessage()); Logger.debug(Arrays.toString(e.getStackTrace())); ctx.result("Internal Server Error"); diff --git a/src/main/resources/templates/export.ftl b/src/main/resources/templates/export.ftl index f1570c9..4b2f124 100644 --- a/src/main/resources/templates/export.ftl +++ b/src/main/resources/templates/export.ftl @@ -4,6 +4,7 @@ <#include "header.ftl"> +

Export von Reden

Export von allen Reden (Dieser Prozess kanne einige Zeit dauern):

@@ -14,5 +15,29 @@ +
+
+

Export von allen Reden eines Parlamentariers.

+
+ <#assign formAction = "/members"> + <#include "filterForm.ftl"> +
+
+

Export einer bestimmten Rede nach ID

+
+
+ + + +
+
+
+
+ + + +
+
+
<#include "footer.ftl"> \ No newline at end of file