now caching plantuml diagrams

Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
2026-01-22 23:46:20 +01:00
parent 1059164b4a
commit 4cd1ea3277

View File

@@ -40,6 +40,7 @@ public class Util {
private static final JParsedown MARKDOWN = new JParsedown(); private static final JParsedown MARKDOWN = new JParsedown();
public static final String SHA1 = "SHA-1"; public static final String SHA1 = "SHA-1";
private static final MessageDigest SHA1_DIGEST; private static final MessageDigest SHA1_DIGEST;
private static final Map<Integer,String> umlCache = new HashMap<>();
static { static {
try { try {
@@ -84,6 +85,14 @@ public class Util {
var start = matcher.start(0); var start = matcher.start(0);
var end = matcher.end(0); var end = matcher.end(0);
var umlHash = uml.hashCode();
var svg = umlCache.get(umlHash);
if (svg != null){
source = source.substring(0, start) + svg + source.substring(end);
matcher = UML_PATTERN.matcher(source);
continue;
}
ProcessBuilder processBuilder = new ProcessBuilder("java", "-jar", plantumlJar.getAbsolutePath(), "-tsvg", "-pipe"); ProcessBuilder processBuilder = new ProcessBuilder("java", "-jar", plantumlJar.getAbsolutePath(), "-tsvg", "-pipe");
var ignored = processBuilder.redirectErrorStream(); var ignored = processBuilder.redirectErrorStream();
var process = processBuilder.start(); var process = processBuilder.start();
@@ -94,7 +103,8 @@ public class Util {
try (InputStream is = process.getInputStream()) { try (InputStream is = process.getInputStream()) {
byte[] out = is.readAllBytes(); byte[] out = is.readAllBytes();
var svg = new String(out, UTF_8); svg = new String(out, UTF_8);
umlCache.put(umlHash,svg);
source = source.substring(0, start) + svg + source.substring(end); source = source.substring(0, start) + svg + source.substring(end);
matcher = UML_PATTERN.matcher(source); matcher = UML_PATTERN.matcher(source);
} }