aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java')
-rw-r--r--src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java48
1 files changed, 40 insertions, 8 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java
index 21d97fc..1d79eb8 100644
--- a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java
+++ b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java
@@ -1,9 +1,10 @@
package at.gv.egiz.moazs.preprocess;
+import at.gv.egiz.moazs.MoaZSException;
import at.gv.zustellung.app2mzs.xsd.ConfigType;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.core.env.*;
-import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.HashMap;
@@ -18,20 +19,37 @@ import static at.gv.zustellung.app2mzs.xsd.ServerType.serverTypeBuilder;
import static java.util.stream.Collectors.*;
import static java.util.stream.Collectors.toMap;
-@Component
public class ConfigProfileGenerator {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ConfigProfileGenerator.class);
private static final String PROFILE_PREFIX = "delivery-request-configuration-profiles.";
private static final String TNVZ_REQUEST_KEY = "perform-query-person-request";
private static final String MSG_URL_KEY = "msg.url";
+ private static final String DEFAULT_CONFIG_KEY = "default";
+
+ private final boolean verifyCompletenessOfDefaultConfiguration;
+
+ private static final String PROFILE_NOT_COMPLETE_WARNING_MESSAGE = "The default values for a incoming " +
+ "mzs:DeliveryRequest/Config element could not be extracted from configuration because some values were " +
+ "missing.";
+
+ private static final String PROFILE_NOT_COMPLETE_ERROR_MESSAGE = PROFILE_NOT_COMPLETE_WARNING_MESSAGE + " " +
+ "Please verify that all default values are present (e.g. through application.{properties,yaml} " +
+ "or System parameters). Otherwise, deactivate 'verify-completeness-of-default-delivery-request-configuration' " +
+ "to continue operation without completing the default config profile. This means that " +
+ "mzs:DeliveryRequest/Config needs to be configured completely *for each delivery request* in order to guarantee " +
+ "availability.";
private final ConfigurableEnvironment env;
private final ConfigProfileMerger merger;
+ private final ConfigProfileValidator validator;
- @Autowired
- public ConfigProfileGenerator(ConfigurableEnvironment env, ConfigProfileMerger merger) {
+ public ConfigProfileGenerator(ConfigurableEnvironment env, ConfigProfileMerger merger,
+ boolean verifyCompletenessOfDefaultConfiguration, ConfigProfileValidator validator) {
this.env = env;
this.merger = merger;
+ this.verifyCompletenessOfDefaultConfiguration = verifyCompletenessOfDefaultConfiguration;
+ this.validator = validator;
}
public Map<String, ConfigType> generate() {
@@ -39,14 +57,27 @@ public class ConfigProfileGenerator {
var groupedKeys = getStreamOfPropertyKeysFromEnv()
.filter(this::isConfigurationProfileProperty)
.map(this::removePrefix)
+ .filter(this::hasPrefix)
.collect(groupingBy(this::keepPrefix, mapping(this::removePrefix, toSet())));
var profiles = groupedKeys.entrySet().stream()
.collect(toMap(Entry::getKey, this::createConfigFromEnv));
- var defaultProfile = profiles.get("default");
+ var defaultProfile = profiles.get(DEFAULT_CONFIG_KEY);
- return mergeProfiles(profiles, defaultProfile);
+ if (!validator.isComplete(defaultProfile)) {
+ if (verifyCompletenessOfDefaultConfiguration)
+ throw MoaZSException.moaZSException(PROFILE_NOT_COMPLETE_ERROR_MESSAGE);
+ else {
+ LOGGER.warn(PROFILE_NOT_COMPLETE_WARNING_MESSAGE);
+ }
+ }
+
+ return defaultProfile == null ? profiles : mergeProfiles(profiles, defaultProfile);
+ }
+
+ private boolean hasPrefix(String name) {
+ return name.indexOf('.') != -1;
}
// @author pedorro
@@ -99,6 +130,8 @@ public class ConfigProfileGenerator {
.build();
}
+
+
private Map<String, ConfigType> mergeProfiles(Map<String, ConfigType> profiles, ConfigType defaultProfile) {
return profiles.entrySet().stream()
.collect(toUnmodifiableMap(
@@ -106,5 +139,4 @@ public class ConfigProfileGenerator {
e -> merger.merge(e.getValue(), defaultProfile)));
}
-
}