diff options
author | Christof Rabensteiner <christof.rabensteiner@iaik.tugraz.at> | 2019-05-15 14:55:09 +0200 |
---|---|---|
committer | Christof Rabensteiner <christof.rabensteiner@iaik.tugraz.at> | 2019-05-15 14:55:09 +0200 |
commit | 6959228c5c557df0204a2902807b35d90063b600 (patch) | |
tree | 1c32e2b63d0fd8c290d81b569470eea2c7fd5c1a /src/main/java/at/gv/egiz/moazs/preprocess/DeliveryRequestAugmenter.java | |
parent | cb95ee0650d3bbc3fe619af0a687f09d39a0a07f (diff) | |
download | moa-zs-6959228c5c557df0204a2902807b35d90063b600.tar.gz moa-zs-6959228c5c557df0204a2902807b35d90063b600.tar.bz2 moa-zs-6959228c5c557df0204a2902807b35d90063b600.zip |
Handle Config Related Edge Cases in Augmenter & ProfileGenerator
ConfigProfileGenerator:
- Cancel startup if default Config profile is incomplete.
- Add property flag
'verify-completeness-of-default-delivery-request-configuration',
which allows admin to disable completeness check. In that case, just
log a warning if the default profile is incomplete.
Augmenter:
- Ensure that after merging the config is complete (or throw an
exception otherwise).
- Refactor: Move ConfigProfileValidator from ConfigProfileGenerator to
dedicated "ConfigProfileValidator" class; Reason: Augmenter needs to
check completness of at-runtime-compiled configuration.
- Refactor: Rewrote code for better readability.
Others
- NPE Fix in ConfigProfileMerger: If FallbackConfigProfile/Server is
empty, use PrimaryProfile/Server.
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); } } |