HostingAsset-Hierarchie spec in enum HsHostingAssetType and generates PlantUML #72
@ -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.
|
||||
|
@ -25,13 +25,13 @@ public enum HsBookingItemType implements Node {
|
||||
@Override
|
||||
public List<String> 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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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 <T extends Enum<?>> 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<T extends Node> {
|
||||
}
|
||||
|
||||
static EntityTypeRelation<HsBookingItemType> requires(final HsBookingItemType bookingItemType) {
|
||||
return new EntityTypeRelation<>(" ==> ", TypeRelationType.REQUIRED, bookingItemType);
|
||||
return new EntityTypeRelation<>(" *==> ", TypeRelationType.REQUIRED, bookingItemType);
|
||||
}
|
||||
|
||||
static EntityTypeRelation<HsHostingAssetType> optionalParent(final HsHostingAssetType hostingAssetType) {
|
||||
return new EntityTypeRelation<>(" ==o ", TypeRelationType.OPTIONAL, hostingAssetType);
|
||||
return new EntityTypeRelation<>(" o..> ", TypeRelationType.OPTIONAL, hostingAssetType);
|
||||
}
|
||||
|
||||
static EntityTypeRelation<HsHostingAssetType> requiredParent(final HsHostingAssetType hostingAssetType) {
|
||||
return new EntityTypeRelation<>(" ==> ", TypeRelationType.REQUIRED, hostingAssetType);
|
||||
return new EntityTypeRelation<>(" *==> ", TypeRelationType.REQUIRED, hostingAssetType);
|
||||
}
|
||||
|
||||
static EntityTypeRelation<HsHostingAssetType> assignedTo(final HsHostingAssetType hostingAssetType) {
|
||||
return new EntityTypeRelation<>(" -.-> ", TypeRelationType.REQUIRED, hostingAssetType);
|
||||
return new EntityTypeRelation<>(" o..> ", TypeRelationType.REQUIRED, hostingAssetType);
|
||||
}
|
||||
|
||||
static EntityTypeRelation<HsHostingAssetType> optionallyAssignedTo(final HsHostingAssetType hostingAssetType) {
|
||||
return new EntityTypeRelation<>(" -.-o ", TypeRelationType.OPTIONAL, hostingAssetType);
|
||||
return new EntityTypeRelation<>(" o..> ", TypeRelationType.OPTIONAL, hostingAssetType);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user