diff options
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.java | 52 |
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); } } |