Skip to content
Snippets Groups Projects

Ozg 4095 abrufen aller nachrichten

Closed Jan Zickermann requested to merge OZG-4095-Abrufen-aller-Nachrichten into main
7 files
+ 185
21
Compare changes
  • Side-by-side
  • Inline
Files
7
package de.ozgcloud.nachrichten.postfach.osiv2.transfer;
import java.util.List;
import java.util.function.Function;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public record Osi2HtmlDocument(String html) {
private record SpanRendering(String tag, Function<Element, String> markdownReplacement) {
static SpanRendering of(String tag, Function<Element, String> markdownReplacement) {
return new SpanRendering(tag, markdownReplacement);
}
void replaceElementsWithMarkdownSpansIn(Document document) {
document.body()
.select(tag)
.replaceAll(anchor -> new Element("span")
.text(markdownReplacement.apply(anchor))
);
}
}
static final List<SpanRendering> SPAN_RENDERINGS = List.of(
SpanRendering.of("a", anchor -> "[" + anchor.text() + "](" + anchor.attr("href") + ")"),
SpanRendering.of("img", image -> "![" + image.attr("alt") + "](" + image.attr("src") + ")"),
SpanRendering.of("i", italic -> "_" + italic.text() + "_"),
SpanRendering.of("em", italic -> "_" + italic.text() + "_"),
SpanRendering.of("b", bold -> "__" + bold.text() + "__"),
SpanRendering.of("strong", bold -> "__" + bold.text() + "__"),
SpanRendering.of("h1", heading -> "# " + heading.text()),
SpanRendering.of("h2", heading -> "## " + heading.text()),
SpanRendering.of("h3", heading -> "### " + heading.text()),
SpanRendering.of("blockquote", bold -> "> " + bold.text())
);
public String renderToPlainText() {
var document = Jsoup.parse(html);
applySpanRenderings(document);
return document.wholeText();
}
private void applySpanRenderings(Document document) {
for (var entry : SPAN_RENDERINGS) {
entry.replaceElementsWithMarkdownSpansIn(document);
}
}
public static String renderToPlainText(String html) {
return new Osi2HtmlDocument(html).renderToPlainText();
}
}
Loading