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; @Component public class DeliveryRequestAugmenter { private final ConfigProfileMerger merger; private final Map configs; @Autowired public DeliveryRequestAugmenter(Map deliveryRequestConfigs, ConfigProfileMerger merger) { this.configs = deliveryRequestConfigs; this.merger = merger; } /** * Augments an incoming {@code request} by filling gaps with config- or default parameters. * * @param request * @return augmented request */ public DeliveryRequestType augment(DeliveryRequestType request) { var requestConfig = request.getConfig(); var fallbackConfig = determineProfileFromProfileId(requestConfig); var config = merger.merge(requestConfig, fallbackConfig); return new DeliveryRequestTypeBuilder(request) .withConfig(config) .build(); } private ConfigType determineProfileFromProfileId(ConfigType requestConfig) { if (requestConfig == null || requestConfig.getProfileID() == null) { return configs.get("default"); } var id = requestConfig.getProfileID(); return coalesce(configs.get(id), configs.get("default")).get(); } }