From 85ad05a77ed04786be8bb382d68777b8da751f0e Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Thu, 15 Feb 2024 17:20:50 +0100 Subject: [PATCH] improve RbacGrantsMermaidService formatting --- .../rbacgrant/RbacGrantsMermaidService.java | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantsMermaidService.java b/src/main/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantsMermaidService.java index 80aae84e..914ba43a 100644 --- a/src/main/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantsMermaidService.java +++ b/src/main/java/net/hostsharing/hsadminng/rbac/rbacgrant/RbacGrantsMermaidService.java @@ -11,9 +11,9 @@ import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.*; -import java.util.stream.Collectors; +import java.util.stream.Stream; -import static java.lang.String.join; +import static java.util.stream.Collectors.joining; import static net.hostsharing.hsadminng.rbac.rbacgrant.RbacGrantsMermaidService.Include.*; @Service @@ -103,11 +103,22 @@ public class RbacGrantsMermaidService { private String toMermaidFlowchart(final HashSet graph) { return "%%{init:{'flowchart':{'htmlLabels':false}}}%%\n" + - "flowchart TB\n\n" + graph.stream().sorted() - .map(g -> node(g.getAscendantIdName(), g.getAscendingUuid()) + + "flowchart TB\n\n" + + graph.stream() + .flatMap(g -> Stream.of( + new Node(g.getAscendantIdName(), g.getAscendingUuid()), + new Node(g.getAscendantIdName(), g.getAscendingUuid())) + ) + .map(n -> node(n.idName(), n.uuid())) + .sorted() + .collect(joining("\n\n")) + + "\n" + + graph.stream() + .map(g -> quoted(g.getAscendantIdName()) + (g.isAssumed() ? " --> " : " -.-> ") + - node(g.getDescendantIdName(), g.getDescendantUuid())) - .collect(Collectors.joining("\n")); + quoted(g.getDescendantIdName())) + .sorted() + .collect(joining("\n")); } private String node(final String idName, final UUID uuid) { @@ -128,7 +139,7 @@ public class RbacGrantsMermaidService { final var objectName = idName.substring(refType.length()+1, idName.length() - roleType.length() - 1); final var tableName = objectName.contains("#") ? objectName.split("#")[0] : ""; final var instanceName = objectName.contains("#") ? objectName.split("#", 2)[1] : objectName; - final var displayName = "\n" + (tableName.equals("global") ? "" : tableName) + "\n" + instanceName + "\n" + uuid + "\n" + roleType; + final var displayName = (tableName.equals("global") ? "" : tableName) + "\n" + instanceName + "\n" + uuid + "\n" + roleType; return "[" + displayName + "]"; } if (refType.equals("perm")) { @@ -146,3 +157,7 @@ public class RbacGrantsMermaidService { return idName.replace(" ", ":").replaceAll("@.*", ""); } } + +record Node(String idName, UUID uuid) { + +}