From 3f688e21ce5e8d03ccd68fa821874440fa1049fe Mon Sep 17 00:00:00 2001 From: Martin Vogel <martin.vogel@sinc.de> Date: Wed, 7 Sep 2022 12:00:23 +0200 Subject: [PATCH] refactor: use static initializers for fromValue due to better performance on lookup --- .../api/config/ApplicationConfig.java | 1 + .../domain/model/destination/StatusEnum.java | 20 ++++++++++---- .../api/domain/model/jwk/AlgEnum.java | 20 ++++++++++---- .../api/domain/model/jwk/EEnum.java | 20 ++++++++++---- .../api/domain/model/jwk/KeyOpsEnum.java | 20 ++++++++++---- .../api/domain/model/jwk/KtyEnum.java | 20 ++++++++++---- .../model/metadata/EidasAdesProfile.java | 27 ++++++++++++++----- .../model/metadata/SignatureFormat.java | 20 ++++++++++---- .../metadata/data/DataSignatureType.java | 20 +++++++++++--- .../domain/model/metadata/data/MimeType.java | 20 ++++++++++---- 10 files changed, 143 insertions(+), 45 deletions(-) diff --git a/api/src/main/java/de/fitko/fitconnect/api/config/ApplicationConfig.java b/api/src/main/java/de/fitko/fitconnect/api/config/ApplicationConfig.java index b3b152fb9..7ab2bad82 100644 --- a/api/src/main/java/de/fitko/fitconnect/api/config/ApplicationConfig.java +++ b/api/src/main/java/de/fitko/fitconnect/api/config/ApplicationConfig.java @@ -18,6 +18,7 @@ public class ApplicationConfig { @Builder.Default private Integer httpProxyPort = 0; @Builder.Default + private Integer requestTimeoutInSeconds = 30; private String metadataSchemaPath; private String privateSigningKeyPath; diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/destination/StatusEnum.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/destination/StatusEnum.java index b42836cb6..5f5638798 100644 --- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/destination/StatusEnum.java +++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/destination/StatusEnum.java @@ -3,6 +3,9 @@ package de.fitko.fitconnect.api.domain.model.destination; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; +import java.util.HashMap; +import java.util.Map; + public enum StatusEnum { CREATED("created"), @@ -13,6 +16,14 @@ public enum StatusEnum { DECOMMISSIONED("decommissioned"); + private static final Map<String, StatusEnum> CONSTANTS = new HashMap<>(); + + static { + for (final StatusEnum c : values()) { + CONSTANTS.put(c.value, c); + } + } + private final String value; StatusEnum(final String value) { @@ -31,11 +42,10 @@ public enum StatusEnum { @JsonCreator public static StatusEnum fromValue(final String value) { - for (final StatusEnum statusEnum : StatusEnum.values()) { - if (statusEnum.value.equals(value)) { - return statusEnum; - } + final StatusEnum constant = CONSTANTS.get(value); + if (constant == null) { + throw new IllegalArgumentException("Unexpected value '" + value + "'"); } - throw new IllegalArgumentException("Unexpected value '" + value + "'"); + return constant; } } diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/AlgEnum.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/AlgEnum.java index efa8b3181..630b85ec7 100644 --- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/AlgEnum.java +++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/AlgEnum.java @@ -3,7 +3,8 @@ package de.fitko.fitconnect.api.domain.model.jwk; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; -import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; public enum AlgEnum { @@ -11,6 +12,14 @@ public enum AlgEnum { RSA_OAEP_256("RSA-OAEP-256"); + private static final Map<String, AlgEnum> CONSTANTS = new HashMap<>(); + + static { + for (final AlgEnum c : values()) { + CONSTANTS.put(c.value, c); + } + } + private final String value; AlgEnum(final String value) { @@ -29,9 +38,10 @@ public enum AlgEnum { @JsonCreator public static AlgEnum fromValue(final String value) { - return Arrays.stream(AlgEnum.values()) - .filter(enumValue -> enumValue.value.equals(value)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Unexpected value '" + value + "'")); + final AlgEnum constant = CONSTANTS.get(value); + if (constant == null) { + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + return constant; } } diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/EEnum.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/EEnum.java index dc447ae3f..4d6273e4b 100644 --- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/EEnum.java +++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/EEnum.java @@ -3,12 +3,21 @@ package de.fitko.fitconnect.api.domain.model.jwk; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; -import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; public enum EEnum { AQAB("AQAB"); + private static final Map<String, EEnum> CONSTANTS = new HashMap<>(); + + static { + for (final EEnum c : values()) { + CONSTANTS.put(c.value, c); + } + } + private final String value; EEnum(final String value) { @@ -27,9 +36,10 @@ public enum EEnum { @JsonCreator public static EEnum fromValue(final String value) { - return Arrays.stream(EEnum.values()) - .filter(enumValue -> enumValue.value.equals(value)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Unexpected value '" + value + "'")); + final EEnum constant = CONSTANTS.get(value); + if (constant == null) { + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + return constant; } } diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/KeyOpsEnum.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/KeyOpsEnum.java index 455ff64f2..e8e18709d 100644 --- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/KeyOpsEnum.java +++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/KeyOpsEnum.java @@ -3,7 +3,8 @@ package de.fitko.fitconnect.api.domain.model.jwk; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; -import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; public enum KeyOpsEnum { @@ -11,6 +12,14 @@ public enum KeyOpsEnum { WRAPKEY("wrapKey"); + private static final Map<String, KeyOpsEnum> CONSTANTS = new HashMap<>(); + + static { + for (final KeyOpsEnum c : values()) { + CONSTANTS.put(c.value, c); + } + } + private final String value; KeyOpsEnum(final String value) { @@ -29,9 +38,10 @@ public enum KeyOpsEnum { @JsonCreator public static KeyOpsEnum fromValue(final String value) { - return Arrays.stream(KeyOpsEnum.values()) - .filter(enumValue -> enumValue.value.equals(value)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Unexpected value '" + value + "'")); + final KeyOpsEnum constant = CONSTANTS.get(value); + if (constant == null) { + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + return constant; } } diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/KtyEnum.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/KtyEnum.java index b422d165a..10c7b24c1 100644 --- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/KtyEnum.java +++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/jwk/KtyEnum.java @@ -3,12 +3,21 @@ package de.fitko.fitconnect.api.domain.model.jwk; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; -import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; public enum KtyEnum { RSA("RSA"); + private static final Map<String, KtyEnum> CONSTANTS = new HashMap<>(); + + static { + for (final KtyEnum c : values()) { + CONSTANTS.put(c.value, c); + } + } + private final String value; KtyEnum(final String value) { @@ -27,9 +36,10 @@ public enum KtyEnum { @JsonCreator public static KtyEnum fromValue(final String value) { - return Arrays.stream(KtyEnum.values()) - .filter(enumValue -> enumValue.value.equals(value)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Unexpected value '" + value + "'")); + final KtyEnum constant = CONSTANTS.get(value); + if (constant == null) { + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + return constant; } } diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/EidasAdesProfile.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/EidasAdesProfile.java index ae1e93c20..c8e87c22c 100644 --- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/EidasAdesProfile.java +++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/EidasAdesProfile.java @@ -3,8 +3,14 @@ package de.fitko.fitconnect.api.domain.model.metadata; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; -import java.util.Arrays; - +import java.util.HashMap; +import java.util.Map; + +/** + * Referenziert ein eindeutiges Profil einer AdES (advanced electronic signature/seal) gemäß eIDAS-Verordnung über eine URI gemäß [ETSI TS 119 192](https://www.etsi.org/deliver/etsi_ts/119100_119199/119192/01.01.01_60/ts_119192v010101p.pdf). + * <p> + * Für die Details zur Verwendung und Validierung von Profilen siehe auch https://ec.europa.eu/cefdigital/DSS/webapp-demo/doc/dss-documentation.html#_signatures_profile_simplification + */ public enum EidasAdesProfile { HTTP_URI_ETSI_ORG_ADES_191_X_2_LEVEL_BASELINE_B_B("http://uri.etsi.org/ades/191x2/level/baseline/B-B#"), @@ -12,6 +18,14 @@ public enum EidasAdesProfile { HTTP_URI_ETSI_ORG_ADES_191_X_2_LEVEL_BASELINE_B_LT("http://uri.etsi.org/ades/191x2/level/baseline/B-LT#"), HTTP_URI_ETSI_ORG_ADES_191_X_2_LEVEL_BASELINE_B_LTA("http://uri.etsi.org/ades/191x2/level/baseline/B-LTA#"); + private static final Map<String, EidasAdesProfile> CONSTANTS = new HashMap<>(); + + static { + for (final EidasAdesProfile c : values()) { + CONSTANTS.put(c.value, c); + } + } + private final String value; EidasAdesProfile(final String value) { @@ -30,10 +44,11 @@ public enum EidasAdesProfile { @JsonCreator public static EidasAdesProfile fromValue(final String value) { - return Arrays.stream(EidasAdesProfile.values()) - .filter(enumValue -> enumValue.value.equals(value)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Unexpected value '" + value + "'")); + final EidasAdesProfile constant = CONSTANTS.get(value); + if (constant == null) { + throw new IllegalArgumentException(value); + } + return constant; } } diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/SignatureFormat.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/SignatureFormat.java index a36975e97..11e2efdc8 100644 --- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/SignatureFormat.java +++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/SignatureFormat.java @@ -3,7 +3,8 @@ package de.fitko.fitconnect.api.domain.model.metadata; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; -import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; public enum SignatureFormat { @@ -13,6 +14,14 @@ public enum SignatureFormat { ASIC("asic"), JSON("json"); + private static final Map<String, SignatureFormat> CONSTANTS = new HashMap<>(); + + static { + for (final SignatureFormat c : values()) { + CONSTANTS.put(c.value, c); + } + } + private final String value; SignatureFormat(final String value) { @@ -31,9 +40,10 @@ public enum SignatureFormat { @JsonCreator public static SignatureFormat fromValue(final String value) { - return Arrays.stream(SignatureFormat.values()) - .filter(enumValue -> enumValue.value.equals(value)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Unexpected value '" + value + "'")); + final SignatureFormat constant = CONSTANTS.get(value); + if (constant == null) { + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + return constant; } } diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/data/DataSignatureType.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/data/DataSignatureType.java index 06b7ffe84..56a5a9b32 100644 --- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/data/DataSignatureType.java +++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/data/DataSignatureType.java @@ -4,10 +4,21 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; public enum DataSignatureType { SHA_512("sha512"); + + private static final Map<String, DataSignatureType> CONSTANTS = new HashMap<>(); + + static { + for (final DataSignatureType c : values()) { + CONSTANTS.put(c.value, c); + } + } + private final String value; DataSignatureType(final String value) { @@ -26,10 +37,11 @@ public enum DataSignatureType { @JsonCreator public static DataSignatureType fromValue(final String value) { - return Arrays.stream(DataSignatureType.values()) - .filter(enumValue -> enumValue.value.equals(value)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Unexpected value '" + value + "'")); + final DataSignatureType constant = CONSTANTS.get(value); + if (constant == null) { + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + return constant; } } diff --git a/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/data/MimeType.java b/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/data/MimeType.java index 88c3fe319..2011bc56e 100644 --- a/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/data/MimeType.java +++ b/api/src/main/java/de/fitko/fitconnect/api/domain/model/metadata/data/MimeType.java @@ -3,13 +3,22 @@ package de.fitko.fitconnect.api.domain.model.metadata.data; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; -import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; public enum MimeType { APPLICATION_JSON("application/json"), APPLICATION_XML("application/xml"); + private static final Map<String, MimeType> CONSTANTS = new HashMap<>(); + + static { + for (final MimeType c : values()) { + CONSTANTS.put(c.value, c); + } + } + private final String value; MimeType(final String value) { @@ -28,9 +37,10 @@ public enum MimeType { @JsonCreator public static MimeType fromValue(final String value) { - return Arrays.stream(MimeType.values()) - .filter(enumValue -> enumValue.value.equals(value)) - .findFirst() - .orElseThrow(() -> new IllegalArgumentException("Unexpected value '" + value + "'")); + final MimeType constant = CONSTANTS.get(value); + if (constant == null) { + throw new IllegalArgumentException("Unexpected value '" + value + "'"); + } + return constant; } } -- GitLab