aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/moazs/preprocess/DeliveryRequestAugmenter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/preprocess/DeliveryRequestAugmenter.java')
-rw-r--r--src/main/java/at/gv/egiz/moazs/preprocess/DeliveryRequestAugmenter.java52
1 files changed, 38 insertions, 14 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/preprocess/DeliveryRequestAugmenter.java b/src/main/java/at/gv/egiz/moazs/preprocess/DeliveryRequestAugmenter.java
index 7211f6d..0b49347 100644
--- a/src/main/java/at/gv/egiz/moazs/preprocess/DeliveryRequestAugmenter.java
+++ b/src/main/java/at/gv/egiz/moazs/preprocess/DeliveryRequestAugmenter.java
@@ -2,24 +2,33 @@ package at.gv.egiz.moazs.preprocess;
import at.gv.zustellung.app2mzs.xsd.ConfigType;
import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType;
-import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.DeliveryRequestTypeBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
-import static at.gv.egiz.moazs.util.NullCoalesce.coalesce;
+import static at.gv.egiz.moazs.MoaZSException.moaZSException;
+import static at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.deliveryRequestTypeBuilder;
@Component
public class DeliveryRequestAugmenter {
private final ConfigProfileMerger merger;
private final Map<String, ConfigType> configs;
+ private final ConfigProfileValidator validator;
+
+ private static final String INCOMPLETE_CONFIG_ERROR_MESSAGE = "Could not find a profile for " +
+ "the delivery request configuration, and the configuration attached to mzs:DeliveryRequest is incomplete.";
+ private static final String INCOMPLETE_MERGED_CONFIG_ERROR_MESSAGE = "I merged parameters from " +
+ "mzs:DeliveryRequest/Config with parameters from config profile with ProfileId='%s', but the " +
+ "configuration is incomplete.";
@Autowired
- public DeliveryRequestAugmenter(Map<String, ConfigType> deliveryRequestConfigs, ConfigProfileMerger merger) {
+ public DeliveryRequestAugmenter(Map<String, ConfigType> deliveryRequestConfigs, ConfigProfileMerger merger,
+ ConfigProfileValidator validator) {
this.configs = deliveryRequestConfigs;
this.merger = merger;
+ this.validator = validator;
}
/**
@@ -31,25 +40,40 @@ public class DeliveryRequestAugmenter {
public DeliveryRequestType augment(DeliveryRequestType request) {
var requestConfig = request.getConfig();
+ var profileId = determineProfileIdFrom(requestConfig);
+ var fallbackConfig = configs.get(profileId);
- var fallbackConfig = determineProfileFromProfileId(requestConfig);
+ if (fallbackConfig == null) {
- var config = merger.merge(requestConfig, fallbackConfig);
+ if (validator.isComplete(requestConfig))
+ return request;
+ else
+ throw moaZSException(INCOMPLETE_CONFIG_ERROR_MESSAGE);
- return new DeliveryRequestTypeBuilder(request)
- .withConfig(config)
- .build();
- }
+ } else {
- private ConfigType determineProfileFromProfileId(ConfigType requestConfig) {
+ var mergedConfig = merger.merge(requestConfig, fallbackConfig);
- if (requestConfig == null || requestConfig.getProfileID() == null) {
- return configs.get("default");
+ if (validator.isComplete(mergedConfig)) {
+ return deliveryRequestTypeBuilder(request)
+ .withConfig(mergedConfig)
+ .build();
+ } else {
+ throw moaZSException(INCOMPLETE_MERGED_CONFIG_ERROR_MESSAGE, profileId);
+ }
}
+ }
- var id = requestConfig.getProfileID();
+ private String determineProfileIdFrom(ConfigType requestConfig) {
+ return (requestConfig == null
+ || requestConfig.getProfileID() == null
+ || isProfileMissing(requestConfig.getProfileID()))
+ ? "default"
+ : requestConfig.getProfileID();
+ }
- return coalesce(configs.get(id), configs.get("default")).get();
+ private boolean isProfileMissing(String id) {
+ return !configs.containsKey(id);
}
}