package org.openautonomousconnection.protocol.versions; import lombok.Getter; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public enum ProtocolVersion implements Serializable { PV_1_0_0_CLASSIC("1.0.0", ProtocolType.CLASSIC, ProtocolSide.WEB_DNS, List.of(Protocol.HTTP)), PV_1_0_0_BETA("1.0.0", ProtocolType.BETA, ProtocolSide.ALL, List.of(Protocol.OAC), PV_1_0_0_CLASSIC); @Getter private final String version; @Getter private final ProtocolType protocolType; @Getter private final ProtocolSide protocolSide; @Getter private final List compatibleVersions; @Getter private final List supportedProtocols; ProtocolVersion(String version, ProtocolType protocolType, ProtocolSide protocolSide, List supportedProtocols, ProtocolVersion... compatibleVersions) { this.version = version; this.protocolType = protocolType; this.protocolSide = protocolSide; this.compatibleVersions = new ArrayList<>(Arrays.stream(compatibleVersions).toList()); if (!this.compatibleVersions.contains(this)) this.compatibleVersions.add(this); this.supportedProtocols = supportedProtocols; } @Override public final String toString() { StringBuilder compatible = new StringBuilder("["); StringBuilder supported = new StringBuilder("["); for (ProtocolVersion compatibleVersion : compatibleVersions) compatible.append(compatibleVersion.buildName()); for (Protocol supportedProtocol : supportedProtocols) supported.append(supportedProtocol.toString()); compatible.append("]"); supported.append("]"); return "{version=" + version + ";type=" + protocolType.toString() + ";side=" + protocolSide.toString() + ";supportedProtocols=" + supported + ";compatibleVersions=" + compatible + "}"; } public final String buildName() { return version + "-" + protocolType.toString(); } public enum Protocol implements Serializable { HTTP, HTTPS, OAC ; @Override public final String toString() { return name().toUpperCase(); } } public enum ProtocolType implements Serializable { CLASSIC, // -> See "_old" Projects https://repo.open-autonomous-connection.org/Open-Autonomous-Connection/ BETA, STABLE; @Override public final String toString() { return name().toUpperCase(); } } public enum ProtocolSide implements Serializable { CLIENT, // Protocol version can only used on Client DNS, // Protocol version can only used on DNS Server WEB, // Protocol version can only used on Web Server WEB_DNS, // Protocol version can only used on DNS and WebSerber CLIENT_DNS, // Protocol version can only used on DNS and Client CLIENT_WEB, // Protocol version can only used on WebServer and Client ALL // Protocol version can used on all Sides ; @Override public final String toString() { return name().toUpperCase(); } } }