Merge remote-tracking branch 'origin/main'

This commit is contained in:
Artorias 2025-03-23 17:33:00 +01:00
commit 02c8de4459
7 changed files with 194 additions and 59 deletions

View file

@ -53,16 +53,6 @@ public class TeXUtil {
tex.append(speech.toTeX());
Map<String, Double> topics = Topic.condenseTopicInformation(getHtmlSpeechByKey(speechId).getNlp().getTopics());
// loop through topics and Logger.pink them
for (Map.Entry<String, Double> entry : topics.entrySet()) {
Logger.pink(entry + " " + entry.getValue());
}
/*Map<String, Integer> pos = getPOSInformationCardinalitiesForSpeechById(speechId);
// loop through topics and Logger.pink them
for (Map.Entry<String, Integer> entry : pos.entrySet()) {
Logger.pink(entry + " " + entry.getValue());
}*/
return tex.toString().replace("$$SPEAKERINFO$$", speaker.toTeX())
.replace("$$NLPMETADATA$$",
@ -79,7 +69,20 @@ public class TeXUtil {
tex.append(speech.toTeX());
return tex.toString().replace("$$SPEAKERINFO$$", speaker.toTeX());
Map<String, Double> topics = null;
Logger.pink(String.valueOf(speech.getSpeechKey()));
try {
topics = Topic.condenseTopicInformation(getHtmlSpeechByKey(speech.getSpeechKey()).getNlp().getTopics());
} catch (Exception e) {
topics = Map.of();
}
return tex.toString().replace("$$SPEAKERINFO$$", speaker.toTeX()).replace("$$NLPMETADATA$$",
generateChartView(generateBubbleChartLatex(topics),
generateBarChartLatex(getPOSInformationCardinalitiesForSpeechById(speech.getSpeechKey())),
generateRadarChartLatex(getHtmlSpeechByKey(speech.getSpeechKey()).getNlp().getSentiments()), ""));
}
public static String getExportedSpeechBase64StringBySpeechId(String speechId) throws IOException, InterruptedException {
@ -163,6 +166,7 @@ public class TeXUtil {
// Format tex string to UTF-8
tex = new String(tex.getBytes("UTF-8"));
tex = tex.replaceAll("#", "\\\\#"); // Replace all # with \#
tex = tex.replaceAll("[^\\x00-\\x7F]", ""); // Replace all non-ASCII characters
// Local datetime stamp
@ -229,6 +233,16 @@ public class TeXUtil {
});
}
public static void tryDeleteTeXTempDirContents() {
try {
deleteTeXTempDirContents();
} catch (IOException e) {
Logger.error("Failed to delete temporary folder.");
Logger.error(e.getMessage());
Logger.debug(Arrays.toString(e.getStackTrace()));
}
}
public static boolean isTeXSdkInstalled() {
try {
Process process = Runtime.getRuntime().exec("pdflatex --version");
@ -299,8 +313,8 @@ public class TeXUtil {
StringBuilder xCords = new StringBuilder();
xCords.append("{");
for (Map.Entry<String, Integer> entry : barData.entrySet()) {
xCords.append(entry.getKey()).append(", ");
graphData.append("\t(").append(entry.getKey()).append(", ").append(entry.getValue()).append(")\n");
xCords.append(entry.getKey().replace(",", "\\,")).append(", ");
graphData.append("\t(").append(entry.getKey().replace(",", "\\,")).append(", ").append(entry.getValue()).append(")\n");
}
xCords.append("}");
String xCordsString = xCords.toString().replace("$", "\\$");

View file

@ -124,6 +124,9 @@ public class XMLUtil {
Speaker_MongoDB_Impl speaker = getSpeakerById(String.valueOf(speech.getSpeakerId()));
HtmlSpeech htmlSpeech = getHtmlSpeechByKey(speech.getSpeechKey());
addNlpData(doc, htmlSpeech);
speechElement.appendChild(speaker.toXML(doc));
speechElement.appendChild(speech.toXML(doc));
}

View file

@ -48,14 +48,7 @@ public class SpeechesLatexExportController {
// Send the PDF as a response
ctx.result(stream);
try {
// delete the temporary folder
deleteTeXTempDirContents();
} catch (IOException e) {
Logger.error("Failed to delete temporary folder.");
Logger.error(e.getMessage());
Logger.debug(Arrays.toString(e.getStackTrace()));
}
tryDeleteTeXTempDirContents();
}
@OpenApi(
@ -91,15 +84,7 @@ public class SpeechesLatexExportController {
// Send the PDF as a response
ctx.result(stream);
try {
// delete the temporary folder
deleteTeXTempDirContents();
Logger.debug("Temporary folder deleted.");
} catch (IOException e) {
Logger.error("Failed to delete temporary folder.");
Logger.error(e.getMessage());
Logger.debug(Arrays.toString(e.getStackTrace()));
}
tryDeleteTeXTempDirContents();
}
@OpenApi(
@ -135,15 +120,7 @@ public class SpeechesLatexExportController {
// Send the PDF as a response
ctx.result(stream);
try {
// delete the temporary folder
deleteTeXTempDirContents();
Logger.debug("Temporary folder deleted.");
} catch (IOException e) {
Logger.error("Failed to delete temporary folder.");
Logger.error(e.getMessage());
Logger.debug(Arrays.toString(e.getStackTrace()));
}
tryDeleteTeXTempDirContents();
}
@OpenApi(
@ -179,15 +156,7 @@ public class SpeechesLatexExportController {
// Send the PDF as a response
ctx.result(stream);
try {
// delete the temporary folder
deleteTeXTempDirContents();
Logger.debug("Temporary folder deleted.");
} catch (IOException e) {
Logger.error("Failed to delete temporary folder.");
Logger.error(e.getMessage());
Logger.debug(Arrays.toString(e.getStackTrace()));
}
tryDeleteTeXTempDirContents();
}
@OpenApi(
@ -230,14 +199,6 @@ public class SpeechesLatexExportController {
// Send the PDF as response
ctx.result(stream);
try {
// Clean up temporary files
deleteTeXTempDirContents();
Logger.debug("Temporary folder deleted.");
} catch (IOException e) {
Logger.error("Failed to delete temporary folder.");
Logger.error(e.getMessage());
Logger.debug(Arrays.toString(e.getStackTrace()));
}
tryDeleteTeXTempDirContents();
}
}

View file

@ -296,3 +296,9 @@ select {
margin-bottom: 20px;
border-radius: 10px;
}
.export-button {
flex: 1;
flex-direction: row;
justify-content: center;
}

View file

@ -32,6 +32,18 @@
<div class="red-button centered-flex-button">
<a href="/reden/${p.id}">${speechesCount} Reden vorhanden</a>
</div>
<br>
<h2>Reden Export von allen Reden von ${p.vorname} ${p.nachname}</h2>
<div class="export-button centered-flex-button">
<div class="red-button centered-flex-button">
<a href="/export/pdf/speaker/${p.id}">PDF Export</a>
</div>
<br>
<div class="red-button centered-flex-button">
<a href="/export/xml/speaker/${p.id}">XML Export</a>
</div>
</div>
<#else>
Keine Reden vorhanden
</#if>

View file

@ -48,6 +48,20 @@
</#if>
<br>
<br>
<h2>Reden Export von dieser Rede</h2>
<div class="export-button centered-flex-button">
<div class="red-button centered-flex-button">
<a href="/export/pdf/speech/${s.speechKey}">PDF Export</a>
</div>
<br>
<div class="red-button centered-flex-button">
<a href="/export/xml/speech/${s.speechKey}">XML Export</a>
</div>
</div>
<br>
<br>
<#list s.content as c>
<#if sentimentIcons??>