diff --git a/core/src/main/java/de/srsoftware/umbrella/core/Util.java b/core/src/main/java/de/srsoftware/umbrella/core/Util.java index d869a805..39c1447a 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/Util.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/Util.java @@ -40,6 +40,7 @@ public class Util { private static final JParsedown MARKDOWN = new JParsedown(); public static final String SHA1 = "SHA-1"; private static final MessageDigest SHA1_DIGEST; + private static final Map umlCache = new HashMap<>(); static { try { @@ -84,6 +85,14 @@ public class Util { var start = matcher.start(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"); var ignored = processBuilder.redirectErrorStream(); var process = processBuilder.start(); @@ -94,7 +103,8 @@ public class Util { try (InputStream is = process.getInputStream()) { 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); matcher = UML_PATTERN.matcher(source); }