add Mermaid graph generator for HostingAssetType structure (WIP)
This commit is contained in:
parent
f6d66d5712
commit
1fb4451b80
77
doc/hs-hosting-asset-type-structure.md
Normal file
77
doc/hs-hosting-asset-type-structure.md
Normal file
@ -0,0 +1,77 @@
|
||||
### HostingAsset Type Structure
|
||||
|
||||
This code generated was by HsHostingAssetType.main, do not amend manually.
|
||||
|
||||
```mermaid
|
||||
%%{init:{'flowchart':{'htmlLabels':false}}}%%
|
||||
flowchart LR
|
||||
|
||||
subgraph MARIADB[ ]
|
||||
style MARIADB fill:white,stroke:white,stroke-width:0px
|
||||
HA:MARIADB_INSTANCE
|
||||
HA:MARIADB_USER
|
||||
HA:MARIADB_DATABASE
|
||||
end
|
||||
|
||||
subgraph PGSQL[ ]
|
||||
style PGSQL fill:white,stroke:white,stroke-width:0px
|
||||
HA:PGSQL_INSTANCE
|
||||
HA:PGSQL_USER
|
||||
HA:PGSQL_DATABASE
|
||||
end
|
||||
|
||||
subgraph DOMAIN_SETUP[ ]
|
||||
style DOMAIN_SETUP fill:white,stroke:white,stroke-width:0px
|
||||
HA:DOMAIN_SETUP
|
||||
HA:DOMAIN_DNS_SETUP
|
||||
HA:DOMAIN_HTTP_SETUP
|
||||
end
|
||||
|
||||
subgraph EMAIL[ ]
|
||||
style EMAIL fill:white,stroke:white,stroke-width:0px
|
||||
HA:DOMAIN_EMAIL_SUBMISSION_SETUP
|
||||
HA:DOMAIN_EMAIL_MAILBOX_SETUP
|
||||
HA:EMAIL_ADDRESS
|
||||
end
|
||||
|
||||
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_SETUP 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:PGSQL_INSTANCE fill:#99bcdb,stroke:#274d6e,stroke-width:4px
|
||||
style HA:PGSQL_USER fill:#99bcdb,stroke:#274d6e,stroke-width:4px
|
||||
style HA:PGSQL_DATABASE fill:#99bcdb,stroke:#274d6e,stroke-width:4px
|
||||
style HA:MARIADB_INSTANCE fill:#99bcdb,stroke:#274d6e,stroke-width:4px
|
||||
style HA:MARIADB_USER fill:#99bcdb,stroke:#274d6e,stroke-width:4px
|
||||
style HA:MARIADB_DATABASE fill:#99bcdb,stroke:#274d6e,stroke-width:4px
|
||||
|
||||
BI:CLOUD_SERVER --> HA:CLOUD_SERVER
|
||||
BI:MANAGED_SERVER --> HA:MANAGED_SERVER
|
||||
BI:MANAGED_WEBSPACE --> HA:MANAGED_WEBSPACE
|
||||
HA:MANAGED_SERVER ==> HA:MANAGED_WEBSPACE
|
||||
HA:MANAGED_WEBSPACE ==> HA:UNIX_USER
|
||||
HA:DOMAIN_SETUP ==> HA:DOMAIN_DNS_SETUP
|
||||
HA:DOMAIN_SETUP ==> HA:DOMAIN_HTTP_SETUP
|
||||
HA:UNIX_USER -.-> HA:DOMAIN_HTTP_SETUP
|
||||
HA:DOMAIN_SETUP ==> HA:DOMAIN_EMAIL_SUBMISSION_SETUP
|
||||
HA:DOMAIN_SETUP ==> HA:DOMAIN_EMAIL_MAILBOX_SETUP
|
||||
HA:MANAGED_WEBSPACE ==> HA:EMAIL_ALIAS
|
||||
HA:DOMAIN_EMAIL_MAILBOX_SETUP ==> HA:EMAIL_ADDRESS
|
||||
HA:MANAGED_SERVER ==> HA:PGSQL_INSTANCE
|
||||
HA:MANAGED_WEBSPACE ==> HA:PGSQL_USER
|
||||
HA:PGSQL_INSTANCE -.-> HA:PGSQL_USER
|
||||
HA:MANAGED_WEBSPACE ==> HA:PGSQL_DATABASE
|
||||
HA:PGSQL_INSTANCE -.-> HA:PGSQL_DATABASE
|
||||
HA:MANAGED_WEBSPACE ==> HA:MARIADB_INSTANCE
|
||||
HA:MANAGED_WEBSPACE ==> HA:MARIADB_USER
|
||||
HA:MARIADB_INSTANCE -.-> HA:MARIADB_USER
|
||||
HA:MANAGED_WEBSPACE ==> HA:MARIADB_DATABASE
|
||||
HA:MARIADB_INSTANCE -.-> HA:MARIADB_DATABASE
|
||||
```
|
@ -1,8 +1,51 @@
|
||||
package net.hostsharing.hsadminng.hs.booking.item;
|
||||
|
||||
import static net.hostsharing.hsadminng.hs.booking.item.HsBookingItemTypeOptionRelation.withOptionalParent;
|
||||
|
||||
public enum HsBookingItemType {
|
||||
PRIVATE_CLOUD,
|
||||
CLOUD_SERVER,
|
||||
MANAGED_SERVER,
|
||||
MANAGED_WEBSPACE
|
||||
CLOUD_SERVER(withOptionalParent(PRIVATE_CLOUD)),
|
||||
MANAGED_SERVER(withOptionalParent(PRIVATE_CLOUD)),
|
||||
MANAGED_WEBSPACE(withOptionalParent(MANAGED_SERVER)),
|
||||
DOMAIN_SETUP; // TODO.spec: experimental
|
||||
|
||||
private final HsBookingItemTypeRelation bookingItemTypeRelation;
|
||||
|
||||
HsBookingItemType() {
|
||||
this.bookingItemTypeRelation = null;
|
||||
}
|
||||
|
||||
HsBookingItemType(final HsBookingItemTypeRelation bookingItemTypeRelation) {
|
||||
this.bookingItemTypeRelation = bookingItemTypeRelation;
|
||||
}
|
||||
}
|
||||
|
||||
class HsBookingItemTypeRelation {
|
||||
final HsBookingItemType parentType;
|
||||
|
||||
HsBookingItemTypeRelation(final HsBookingItemType parentType) {
|
||||
this.parentType = parentType;
|
||||
}
|
||||
}
|
||||
|
||||
class HsBookingItemTypeOptionRelation extends HsBookingItemTypeRelation {
|
||||
|
||||
private HsBookingItemTypeOptionRelation(final HsBookingItemType parentType) {
|
||||
super(parentType);
|
||||
}
|
||||
|
||||
static HsBookingItemTypeRelation withOptionalParent(final HsBookingItemType parentType) {
|
||||
return new HsBookingItemTypeOptionRelation(parentType);
|
||||
}
|
||||
}
|
||||
|
||||
class HsBookingItemTypeRequiredRelation extends HsBookingItemTypeRelation {
|
||||
|
||||
private HsBookingItemTypeRequiredRelation(final HsBookingItemType parentType) {
|
||||
super(parentType);
|
||||
}
|
||||
|
||||
static HsBookingItemTypeRelation requiredParent(final HsBookingItemType parentType) {
|
||||
return new HsBookingItemTypeRequiredRelation(parentType);
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import java.util.List;
|
||||
|
||||
import static java.util.Collections.emptyList;
|
||||
import static java.util.Optional.ofNullable;
|
||||
import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.DOMAIN_EMAIL_SETUP;
|
||||
import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.DOMAIN_EMAIL_MAILBOX_SETUP;
|
||||
import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.EMAIL_ADDRESS;
|
||||
import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.MARIADB_DATABASE;
|
||||
import static net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType.MARIADB_USER;
|
||||
@ -88,7 +88,7 @@ class HsManagedWebspaceBookingItemValidator extends HsBookingItemEntityValidator
|
||||
return (final HsBookingItemEntity entity, final IntegerProperty prop, final Integer factor) -> {
|
||||
final var unixUserCount = ofNullable(entity.getRelatedHostingAsset())
|
||||
.map(ha -> ha.getSubHostingAssets().stream()
|
||||
.filter(bi -> bi.getType() == DOMAIN_EMAIL_SETUP)
|
||||
.filter(bi -> bi.getType() == DOMAIN_EMAIL_MAILBOX_SETUP)
|
||||
.flatMap(domainEMailSetup -> domainEMailSetup.getSubHostingAssets().stream()
|
||||
.filter(subAsset -> subAsset.getType()==EMAIL_ADDRESS))
|
||||
.count())
|
||||
|
@ -1,33 +1,100 @@
|
||||
package net.hostsharing.hsadminng.hs.hosting.asset;
|
||||
|
||||
import net.hostsharing.hsadminng.hs.booking.item.HsBookingItemType;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import static java.util.Arrays.stream;
|
||||
import static java.util.stream.Collectors.joining;
|
||||
|
||||
public enum HsHostingAssetType {
|
||||
CLOUD_SERVER, // named e.g. vm1234
|
||||
MANAGED_SERVER, // named e.g. vm1234
|
||||
MANAGED_WEBSPACE(MANAGED_SERVER), // named eg. xyz00
|
||||
CLOUD_SERVER(HsBookingItemType.CLOUD_SERVER), // named e.g. vm1234
|
||||
MANAGED_SERVER(HsBookingItemType.MANAGED_SERVER), // named e.g. vm1234
|
||||
MANAGED_WEBSPACE(HsBookingItemType.MANAGED_WEBSPACE, MANAGED_SERVER), // named eg. xyz00
|
||||
UNIX_USER(MANAGED_WEBSPACE), // named e.g. xyz00-abc
|
||||
DOMAIN_SETUP, // named e.g. example.org
|
||||
DOMAIN_DNS_SETUP(DOMAIN_SETUP), // named e.g. example.org
|
||||
DOMAIN_HTTP_SETUP(DOMAIN_SETUP), // named e.g. example.org
|
||||
DOMAIN_EMAIL_SETUP(DOMAIN_SETUP), // named e.g. example.org
|
||||
DOMAIN_HTTP_SETUP(DOMAIN_SETUP, UNIX_USER), // named e.g. example.org
|
||||
DOMAIN_EMAIL_SUBMISSION_SETUP(DOMAIN_SETUP, null), // named e.g. example.org
|
||||
DOMAIN_EMAIL_MAILBOX_SETUP(DOMAIN_SETUP, null), // named e.g. example.org
|
||||
|
||||
// TODO.spec: SECURE_MX
|
||||
EMAIL_ALIAS(MANAGED_WEBSPACE), // named e.g. xyz00-abc
|
||||
EMAIL_ADDRESS(DOMAIN_EMAIL_SETUP), // named e.g. sample@example.org
|
||||
PGSQL_USER(MANAGED_WEBSPACE), // named e.g. xyz00_abc
|
||||
PGSQL_DATABASE(MANAGED_WEBSPACE), // named e.g. xyz00_abc, TODO.spec: or PGSQL_USER?
|
||||
MARIADB_USER(MANAGED_WEBSPACE), // named e.g. xyz00_abc
|
||||
MARIADB_DATABASE(MANAGED_WEBSPACE); // named e.g. xyz00_abc, TODO.spec: or MARIADB_USER?
|
||||
EMAIL_ADDRESS(DOMAIN_EMAIL_MAILBOX_SETUP), // named e.g. sample@example.org
|
||||
|
||||
PGSQL_INSTANCE(MANAGED_SERVER), // named e.g. xyz00_abc
|
||||
PGSQL_USER(MANAGED_WEBSPACE, PGSQL_INSTANCE), // named e.g. xyz00_abc
|
||||
PGSQL_DATABASE(MANAGED_WEBSPACE, PGSQL_INSTANCE), // named e.g. xyz00_abc, TODO.spec: or PGSQL_USER?
|
||||
|
||||
MARIADB_INSTANCE(MANAGED_WEBSPACE, null), // named e.g. xyz00_abc
|
||||
MARIADB_USER(MANAGED_WEBSPACE, MARIADB_INSTANCE), // named e.g. xyz00_abc
|
||||
MARIADB_DATABASE(MANAGED_WEBSPACE, MARIADB_INSTANCE); // named e.g. xyz00_abc, TODO.spec: or MARIADB_USER?
|
||||
|
||||
public final HsBookingItemType bookingItemType;
|
||||
public final HsHostingAssetType parentAssetType;
|
||||
public final HsHostingAssetType assignedToAssetType;
|
||||
|
||||
HsHostingAssetType(final HsHostingAssetType parentAssetType) {
|
||||
HsHostingAssetType(
|
||||
final HsBookingItemType bookingItemType,
|
||||
final HsHostingAssetType parentAssetType,
|
||||
final HsHostingAssetType assignedToAssetType) {
|
||||
this.bookingItemType = bookingItemType;
|
||||
this.parentAssetType = parentAssetType;
|
||||
this.assignedToAssetType = assignedToAssetType;
|
||||
}
|
||||
|
||||
HsHostingAssetType(
|
||||
final HsHostingAssetType parentAssetType,
|
||||
final HsHostingAssetType assignedToAssetType) {
|
||||
this.bookingItemType = null;
|
||||
this.parentAssetType = parentAssetType;
|
||||
this.assignedToAssetType = assignedToAssetType;
|
||||
}
|
||||
|
||||
HsHostingAssetType(
|
||||
final HsBookingItemType bookingItemType,
|
||||
final HsHostingAssetType parentAssetType) {
|
||||
this.bookingItemType = bookingItemType;
|
||||
this.parentAssetType = parentAssetType;
|
||||
this.assignedToAssetType = null;
|
||||
}
|
||||
|
||||
HsHostingAssetType(
|
||||
final HsBookingItemType bookingItemType) {
|
||||
this.bookingItemType = bookingItemType;
|
||||
this.parentAssetType = null;
|
||||
this.assignedToAssetType = null;
|
||||
}
|
||||
|
||||
HsHostingAssetType(
|
||||
final HsHostingAssetType parentAssetType) {
|
||||
this.bookingItemType = null;
|
||||
this.parentAssetType = parentAssetType;
|
||||
this.assignedToAssetType = null;
|
||||
}
|
||||
|
||||
HsHostingAssetType() {
|
||||
this(null);
|
||||
this(null, null, null);
|
||||
}
|
||||
|
||||
private List<String> edges() {
|
||||
final var edges = new ArrayList<String>();
|
||||
if (bookingItemType != null) {
|
||||
edges.add("BI:" + bookingItemType.name() + " --> HA:" + name());
|
||||
}
|
||||
if (parentAssetType != null) {
|
||||
edges.add("HA:" + parentAssetType.name() + " ==> HA:" + name());
|
||||
}
|
||||
if (assignedToAssetType != null) {
|
||||
edges.add("HA:" + assignedToAssetType.name() + " -.-> HA:" + name());
|
||||
}
|
||||
return edges;
|
||||
}
|
||||
|
||||
public static <T extends Enum<?>> HsHostingAssetType of(final T value) {
|
||||
@ -37,4 +104,62 @@ public enum HsHostingAssetType {
|
||||
static String asString(final HsHostingAssetType type) {
|
||||
return type == null ? null : type.name();
|
||||
}
|
||||
|
||||
public static void main(final String[] args) throws IOException {
|
||||
final String hostingAssetNodes = stream(HsHostingAssetType.values())
|
||||
.map(n -> "style HA:"+n.name()+" fill:#99bcdb,stroke:#274d6e,stroke-width:4px")
|
||||
.collect(joining("\n"));
|
||||
final String edges = stream(HsHostingAssetType.values())
|
||||
.map(HsHostingAssetType::edges)
|
||||
.flatMap(Collection::stream)
|
||||
.collect(joining("\n"));
|
||||
Files.writeString(
|
||||
Path.of("doc/hs-hosting-asset-type-structure.md"),
|
||||
"""
|
||||
### HostingAsset Type Structure
|
||||
|
||||
This code generated was by %{this}.main, do not amend manually.
|
||||
|
||||
```mermaid
|
||||
%%{init:{'flowchart':{'htmlLabels':false}}}%%
|
||||
flowchart LR
|
||||
|
||||
subgraph MARIADB[ ]
|
||||
style MARIADB fill:white,stroke:white,stroke-width:0px
|
||||
HA:MARIADB_INSTANCE
|
||||
HA:MARIADB_USER
|
||||
HA:MARIADB_DATABASE
|
||||
end
|
||||
|
||||
subgraph PGSQL[ ]
|
||||
style PGSQL fill:white,stroke:white,stroke-width:0px
|
||||
HA:PGSQL_INSTANCE
|
||||
HA:PGSQL_USER
|
||||
HA:PGSQL_DATABASE
|
||||
end
|
||||
|
||||
subgraph DOMAIN_SETUP[ ]
|
||||
style DOMAIN_SETUP fill:white,stroke:white,stroke-width:0px
|
||||
HA:DOMAIN_SETUP
|
||||
HA:DOMAIN_DNS_SETUP
|
||||
HA:DOMAIN_HTTP_SETUP
|
||||
end
|
||||
|
||||
subgraph EMAIL[ ]
|
||||
style EMAIL fill:white,stroke:white,stroke-width:0px
|
||||
HA:DOMAIN_EMAIL_SUBMISSION_SETUP
|
||||
HA:DOMAIN_EMAIL_MAILBOX_SETUP
|
||||
HA:EMAIL_ADDRESS
|
||||
end
|
||||
|
||||
%{hosting-asset-nodes}
|
||||
|
||||
%{edges}
|
||||
```
|
||||
"""
|
||||
.replace("%{this}", HsHostingAssetType.class.getSimpleName())
|
||||
.replace("%{hosting-asset-nodes}", hostingAssetNodes)
|
||||
.replace("%{edges}", edges),
|
||||
StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
|
||||
}
|
||||
}
|
||||
|
@ -152,7 +152,7 @@ class HsManagedServerBookingItemValidatorUnitTest {
|
||||
"xyz00_%c%c",
|
||||
2, HsHostingAssetType.MARIADB_DATABASE
|
||||
),
|
||||
generateDomainEmailSetupsWithEMailAddresses(26, HsHostingAssetType.DOMAIN_EMAIL_SETUP,
|
||||
generateDomainEmailSetupsWithEMailAddresses(26, HsHostingAssetType.DOMAIN_EMAIL_MAILBOX_SETUP,
|
||||
"%c%c.example.com",
|
||||
10, HsHostingAssetType.EMAIL_ADDRESS
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user