From af466dde2eddbc7b9805178f157d22b3f2f891bf Mon Sep 17 00:00:00 2001 From: Michael Hoennig Date: Sun, 7 Jul 2024 19:40:01 +0200 Subject: [PATCH] generate PlantUML --- doc/hs-hosting-asset-type-structure.md | 135 +++++++++--------- .../hs/booking/item/HsBookingItemType.java | 4 +- .../hs/hosting/asset/HsHostingAssetType.java | 64 +++++---- 3 files changed, 106 insertions(+), 97 deletions(-) diff --git a/doc/hs-hosting-asset-type-structure.md b/doc/hs-hosting-asset-type-structure.md index b80d1814..ddd86373 100644 --- a/doc/hs-hosting-asset-type-structure.md +++ b/doc/hs-hosting-asset-type-structure.md @@ -1,77 +1,84 @@ ### HostingAsset Type Structure -```mermaid -%%{init:{'flowchart':{'htmlLabels':false}}}%% -flowchart RL +```plantuml +@startuml -subgraph Booking - style Booking fill:white,stroke:white,stroke-width:0px - BI:PRIVATE_CLOUD - BI:CLOUD_SERVER - BI:MANAGED_SERVER - BI:MANAGED_WEBSPACE - BI:DOMAIN_DNS_SETUP - BI:DOMAIN_EMAIL_SUBMISSION_SETUP -end +left to right direction -%% subgraph Hosting -subgraph Server[ ] - style Server fill:white,stroke:white,stroke-width:0px -HA:CLOUD_SERVER -HA:MANAGED_SERVER -HA:IP_NUMBER -end +package Booking #99bcdb { + entity BI_PRIVATE_CLOUD + entity BI_CLOUD_SERVER + entity BI_MANAGED_SERVER + entity BI_MANAGED_WEBSPACE + entity BI_DOMAIN_DNS_SETUP + entity BI_DOMAIN_EMAIL_SUBMISSION_SETUP +} -subgraph Domain[ ] - style Domain fill:white,stroke:white,stroke-width:0px -HA:DOMAIN_DNS_SETUP -HA:DOMAIN_HTTP_SETUP -HA:DOMAIN_EMAIL_SUBMISSION_SETUP -HA:DOMAIN_EMAIL_MAILBOX_SETUP -HA:EMAIL_ADDRESS -end +package Hosting #white { + package Server #99bcdb { + entity HA_CLOUD_SERVER + entity HA_MANAGED_SERVER + entity HA_IP_NUMBER + } -subgraph Webspace[ ] - style Webspace fill:white,stroke:white,stroke-width:0px -HA:MANAGED_WEBSPACE -HA:UNIX_USER -HA:EMAIL_ALIAS -end + package PostgreSQL #99bcdb { + entity HA_PGSQL_INSTANCE + entity HA_PGSQL_USER + entity HA_PGSQL_DATABASE + } -%% end + package MariaDB #99bcdb { + entity HA_MARIADB_INSTANCE + entity HA_MARIADB_USER + entity HA_MARIADB_DATABASE + } -style HA:CLOUD_SERVER fill:#99bcdb,stroke:#274d6e,stroke-width:4px -style HA:MANAGED_SERVER fill:#99bcdb,stroke:#274d6e,stroke-width:4px -style HA:MANAGED_WEBSPACE fill:#99bcdb,stroke:#274d6e,stroke-width:4px -style HA:UNIX_USER fill:#99bcdb,stroke:#274d6e,stroke-width:4px -style HA:DOMAIN_DNS_SETUP fill:#99bcdb,stroke:#274d6e,stroke-width:4px -style HA:DOMAIN_HTTP_SETUP fill:#99bcdb,stroke:#274d6e,stroke-width:4px -style HA:DOMAIN_EMAIL_SUBMISSION_SETUP fill:#99bcdb,stroke:#274d6e,stroke-width:4px -style HA:DOMAIN_EMAIL_MAILBOX_SETUP fill:#99bcdb,stroke:#274d6e,stroke-width:4px -style HA:EMAIL_ALIAS fill:#99bcdb,stroke:#274d6e,stroke-width:4px -style HA:EMAIL_ADDRESS fill:#99bcdb,stroke:#274d6e,stroke-width:4px -style HA:IP_NUMBER fill:#99bcdb,stroke:#274d6e,stroke-width:4px + package Domain #99bcdb { + entity HA_DOMAIN_DNS_SETUP + entity HA_DOMAIN_HTTP_SETUP + entity HA_DOMAIN_EMAIL_SUBMISSION_SETUP + entity HA_DOMAIN_EMAIL_MAILBOX_SETUP + entity HA_EMAIL_ADDRESS + } -BI:CLOUD_SERVER --> BI:PRIVATE_CLOUD -BI:MANAGED_SERVER --> BI:PRIVATE_CLOUD -BI:MANAGED_WEBSPACE --> BI:MANAGED_SERVER + package Webspace #99bcdb { + entity HA_MANAGED_WEBSPACE + entity HA_UNIX_USER + entity HA_EMAIL_ALIAS + } -HA:CLOUD_SERVER ==> BI:CLOUD_SERVER -HA:MANAGED_SERVER ==> BI:MANAGED_SERVER -HA:MANAGED_WEBSPACE ==> BI:MANAGED_WEBSPACE -HA:MANAGED_WEBSPACE ==o HA:MANAGED_SERVER -HA:UNIX_USER ==> HA:MANAGED_WEBSPACE -HA:DOMAIN_DNS_SETUP ==> BI:DOMAIN_DNS_SETUP -HA:DOMAIN_HTTP_SETUP ==> HA:MANAGED_WEBSPACE -HA:DOMAIN_HTTP_SETUP -.-> HA:UNIX_USER -HA:DOMAIN_EMAIL_SUBMISSION_SETUP ==> BI:DOMAIN_EMAIL_SUBMISSION_SETUP -HA:DOMAIN_EMAIL_SUBMISSION_SETUP -.-o HA:MANAGED_WEBSPACE -HA:DOMAIN_EMAIL_MAILBOX_SETUP ==> HA:MANAGED_WEBSPACE -HA:EMAIL_ALIAS ==> HA:MANAGED_WEBSPACE -HA:EMAIL_ADDRESS ==> HA:DOMAIN_EMAIL_MAILBOX_SETUP -HA:IP_NUMBER -.-> HA:CLOUD_SERVER -HA:IP_NUMBER -.-> HA:MANAGED_SERVER -HA:IP_NUMBER -.-> HA:MANAGED_WEBSPACE +} + +BI_CLOUD_SERVER o..> BI_PRIVATE_CLOUD +BI_MANAGED_SERVER o..> BI_PRIVATE_CLOUD +BI_MANAGED_WEBSPACE o..> BI_MANAGED_SERVER + +HA_CLOUD_SERVER *==> BI_CLOUD_SERVER +HA_MANAGED_SERVER *==> BI_MANAGED_SERVER +HA_MANAGED_WEBSPACE *==> BI_MANAGED_WEBSPACE +HA_MANAGED_WEBSPACE o..> HA_MANAGED_SERVER +HA_UNIX_USER *==> HA_MANAGED_WEBSPACE +HA_DOMAIN_DNS_SETUP *==> BI_DOMAIN_DNS_SETUP +HA_DOMAIN_HTTP_SETUP *==> HA_MANAGED_WEBSPACE +HA_DOMAIN_HTTP_SETUP o..> HA_UNIX_USER +HA_DOMAIN_EMAIL_SUBMISSION_SETUP *==> BI_DOMAIN_EMAIL_SUBMISSION_SETUP +HA_DOMAIN_EMAIL_SUBMISSION_SETUP o..> HA_MANAGED_WEBSPACE +HA_DOMAIN_EMAIL_MAILBOX_SETUP *==> HA_MANAGED_WEBSPACE +HA_EMAIL_ALIAS *==> HA_MANAGED_WEBSPACE +HA_EMAIL_ADDRESS *==> HA_DOMAIN_EMAIL_MAILBOX_SETUP +HA_PGSQL_INSTANCE *==> HA_MANAGED_SERVER +HA_PGSQL_USER *==> HA_PGSQL_INSTANCE +HA_PGSQL_USER o..> HA_MANAGED_WEBSPACE +HA_PGSQL_DATABASE *==> HA_MANAGED_WEBSPACE +HA_PGSQL_DATABASE o..> HA_PGSQL_INSTANCE +HA_MARIADB_INSTANCE *==> HA_MANAGED_SERVER +HA_MARIADB_USER *==> HA_MARIADB_INSTANCE +HA_MARIADB_USER o..> HA_MANAGED_WEBSPACE +HA_MARIADB_DATABASE *==> HA_MANAGED_WEBSPACE +HA_MARIADB_DATABASE o..> HA_MARIADB_INSTANCE +HA_IP_NUMBER o..> HA_CLOUD_SERVER +HA_IP_NUMBER o..> HA_MANAGED_SERVER +HA_IP_NUMBER o..> HA_MANAGED_WEBSPACE ``` This code generated was by HsHostingAssetType.main, do not amend manually. diff --git a/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemType.java b/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemType.java index 6cb9c34f..dfc0129e 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemType.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/booking/item/HsBookingItemType.java @@ -25,13 +25,13 @@ public enum HsBookingItemType implements Node { @Override public List edges() { return ofNullable(parentItemType) - .map(p -> (nodeName() + " --> " + p.nodeName())) + .map(p -> (nodeName() + " o..> " + p.nodeName())) .stream().toList(); } @Override public String nodeName() { - return "BI:" + name(); + return "BI_" + name(); } } diff --git a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetType.java b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetType.java index 5ae68f21..243f435b 100644 --- a/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetType.java +++ b/src/main/java/net/hostsharing/hsadminng/hs/hosting/asset/HsHostingAssetType.java @@ -9,10 +9,11 @@ import java.nio.file.Path; import java.nio.file.StandardOpenOption; import java.util.Collection; import java.util.List; -import java.util.Set; +import java.util.stream.Collectors; import static java.util.Arrays.stream; import static java.util.stream.Collectors.joining; +import static java.util.stream.Collectors.toSet; import static net.hostsharing.hsadminng.hs.hosting.asset.EntityTypeRelation.*; public enum HsHostingAssetType implements Node { @@ -100,7 +101,7 @@ public enum HsHostingAssetType implements Node { assignedTo(MANAGED_WEBSPACE) ); - private final String groupName; + final String groupName; private final EntityTypeRelation[] relations; HsHostingAssetType( @@ -125,7 +126,7 @@ public enum HsHostingAssetType implements Node { @Override public String nodeName() { - return "HA:" + name(); + return "HA_" + name(); } public static > HsHostingAssetType of(final T value) { @@ -138,17 +139,20 @@ public enum HsHostingAssetType implements Node { public static void main(final String[] args) throws IOException { - final var includedHostingGroups = Set.of("Domain", "Server", "Webspace"); + final var includedHostingGroups = stream(HsHostingAssetType.values()) + .map(t -> t.groupName) + .collect(toSet()); +// final var includedHostingGroups = Set.of("Domain", "Server", "Webspace"); final String bookingNodes = stream(HsBookingItemType.values()) - .map(t -> " " + t.nodeName()) + .map(t -> " entity " + t.nodeName()) .collect(joining("\n")); final String hostingGroups = includedHostingGroups.stream() .map(HsHostingAssetType::generateGroup) .collect(joining("\n")); - final String hostingAssetNodeStyles = stream(HsHostingAssetType.values()) - .filter(t -> includedHostingGroups.contains(t.groupName)) - .map(n -> "style HA:"+n.name()+" fill:#99bcdb,stroke:#274d6e,stroke-width:4px") + final String hostingAssetNodes = stream(HsHostingAssetType.values()) + .filter(a -> includedHostingGroups.contains(a.groupName)) + .map(a -> "entity "+a.nodeName()) .collect(joining("\n")); final String bookingItemEdges = stream(HsBookingItemType.values()) .map(HsBookingItemType::edges) @@ -164,20 +168,19 @@ public enum HsHostingAssetType implements Node { """ ### HostingAsset Type Structure - ```mermaid - %%{init:{'flowchart':{'htmlLabels':false}}}%% - flowchart RL - - subgraph Booking - style Booking fill:white,stroke:white,stroke-width:0px - %{bookingNodes} - end - - %% subgraph Hosting - %{hostingGroups} - %% end + ```plantuml + @startuml + left to right direction - %{hostingAssetNodeStyles} + package Booking #99bcdb { + %{bookingNodes} + } + + package Hosting #white { + %{hostingGroups} + } + + Booking -left-> Hosting %{bookingItemEdges} @@ -189,20 +192,19 @@ public enum HsHostingAssetType implements Node { .replace("%{this}", HsHostingAssetType.class.getSimpleName()) .replace("%{bookingNodes}", bookingNodes) .replace("%{hostingGroups}", hostingGroups) - .replace("%{hostingAssetNodeStyles}", hostingAssetNodeStyles) + .replace("%{hostingAssetNodeStyles}", hostingAssetNodes) .replace("%{bookingItemEdges}", bookingItemEdges) .replace("%{hostingAssetEdges}", hostingAssetEdges), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); } private static String generateGroup(final String group) { - return "subgraph " + group + "[ ]\n" - + " style " + group + " fill:white,stroke:white,stroke-width:0px\n" + return " package " + group + " #99bcdb {\n" + stream(HsHostingAssetType.values()) .filter(t -> t.groupName.equals(group)) - .map(HsHostingAssetType::nodeName) + .map(t -> " entity " + t.nodeName()) .collect(joining(" \n")) - + "\nend\n"; + + "\n }\n"; } } @@ -222,22 +224,22 @@ class EntityTypeRelation { } static EntityTypeRelation requires(final HsBookingItemType bookingItemType) { - return new EntityTypeRelation<>(" ==> ", TypeRelationType.REQUIRED, bookingItemType); + return new EntityTypeRelation<>(" *==> ", TypeRelationType.REQUIRED, bookingItemType); } static EntityTypeRelation optionalParent(final HsHostingAssetType hostingAssetType) { - return new EntityTypeRelation<>(" ==o ", TypeRelationType.OPTIONAL, hostingAssetType); + return new EntityTypeRelation<>(" o..> ", TypeRelationType.OPTIONAL, hostingAssetType); } static EntityTypeRelation requiredParent(final HsHostingAssetType hostingAssetType) { - return new EntityTypeRelation<>(" ==> ", TypeRelationType.REQUIRED, hostingAssetType); + return new EntityTypeRelation<>(" *==> ", TypeRelationType.REQUIRED, hostingAssetType); } static EntityTypeRelation assignedTo(final HsHostingAssetType hostingAssetType) { - return new EntityTypeRelation<>(" -.-> ", TypeRelationType.REQUIRED, hostingAssetType); + return new EntityTypeRelation<>(" o..> ", TypeRelationType.REQUIRED, hostingAssetType); } static EntityTypeRelation optionallyAssignedTo(final HsHostingAssetType hostingAssetType) { - return new EntityTypeRelation<>(" -.-o ", TypeRelationType.OPTIONAL, hostingAssetType); + return new EntityTypeRelation<>(" o..> ", TypeRelationType.OPTIONAL, hostingAssetType); } }