From 4501468f1ffe1a8141e0c8711cd3cf78260df0c9 Mon Sep 17 00:00:00 2001
From: Christof Rabensteiner <christof.rabensteiner@iaik.tugraz.at>
Date: Thu, 16 May 2019 13:31:53 +0200
Subject: Refactor: Merge Converter, Validator, and Merger into Util

- Reason: All three classes opertate with the same data type, have
  the same clients, and have the same reasons for change.
- Makes code in client more readable as it reduces number of
  dependencies.
---
 .../at/gv/egiz/moazs/config/PreprocessConfig.java  |  8 +-
 .../moazs/preprocess/ConfigProfileGenerator.java   | 41 +++-------
 .../egiz/moazs/preprocess/ConfigProfileMerger.java | 46 -----------
 .../moazs/preprocess/ConfigProfileValidator.java   | 17 ----
 .../at/gv/egiz/moazs/preprocess/ConfigUtil.java    | 95 ++++++++++++++++++++++
 .../moazs/preprocess/DeliveryRequestAugmenter.java | 15 ++--
 .../moazs/preprocess/MapToConfigConverter.java     | 29 -------
 .../gv/egiz/moazs/ConfigProfileGeneratorTest.java  | 37 ++++-----
 .../egiz/moazs/DeliveryRequestAugmenterTest.java   |  8 +-
 9 files changed, 131 insertions(+), 165 deletions(-)
 delete mode 100644 src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileMerger.java
 delete mode 100644 src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileValidator.java
 create mode 100644 src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java
 delete mode 100644 src/main/java/at/gv/egiz/moazs/preprocess/MapToConfigConverter.java

(limited to 'src')

diff --git a/src/main/java/at/gv/egiz/moazs/config/PreprocessConfig.java b/src/main/java/at/gv/egiz/moazs/config/PreprocessConfig.java
index ce40691..d1295b1 100644
--- a/src/main/java/at/gv/egiz/moazs/config/PreprocessConfig.java
+++ b/src/main/java/at/gv/egiz/moazs/config/PreprocessConfig.java
@@ -27,15 +27,11 @@ public class PreprocessConfig {
     @Autowired
     public ConfigProfileGenerator configProfileGenerator(
             SpringPropertiesFacade properties,
-            MapToConfigConverter converter,
-            ConfigProfileValidator validator,
-            ConfigProfileMerger merger) {
+            ConfigUtil util) {
 
         return configProfileGeneratorBuilder()
                 .withProperties(properties)
-                .withConverter(converter)
-                .withValidator(validator)
-                .withMerger(merger)
+                .withConfigUtil(util)
                 .withVerifyCompletenessOfDefaultConfiguration(verifyCompletenessOfDefaultConfiguration)
                 .build();
     }
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 0b4bc19..6337ff2 100644
--- a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java
+++ b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileGenerator.java
@@ -28,9 +28,7 @@ public class ConfigProfileGenerator {
             "availability.";
 
     private final SpringPropertiesFacade properties;
-    private final MapToConfigConverter converter;
-    private final ConfigProfileValidator validator;
-    private final ConfigProfileMerger merger;
+    private final ConfigUtil util;
     private final boolean verifyCompletenessOfDefaultConfiguration;
     private final String profilePrefix;
     private final String defaultConfigKey;
@@ -41,16 +39,12 @@ public class ConfigProfileGenerator {
 
     private ConfigProfileGenerator(
             SpringPropertiesFacade properties,
-            MapToConfigConverter converter,
-            ConfigProfileValidator validator,
-            ConfigProfileMerger merger,
+            ConfigUtil util,
             boolean verifyCompletenessOfDefaultConfiguration,
             String profilePrefix,
             String defaultConfigKey) {
-        this.merger = merger;
-        this.validator = validator;
+        this.util = util;
         this.properties = properties;
-        this.converter = converter;
         this.verifyCompletenessOfDefaultConfiguration = verifyCompletenessOfDefaultConfiguration;
         this.profilePrefix = profilePrefix;
         this.defaultConfigKey = defaultConfigKey;
@@ -70,7 +64,7 @@ public class ConfigProfileGenerator {
 
         var defaultProfile = profiles.get(defaultConfigKey);
 
-        if (!validator.isComplete(defaultProfile)) {
+        if (!util.isComplete(defaultProfile)) {
             if (verifyCompletenessOfDefaultConfiguration)
                 throw MoaZSException.moaZSException(PROFILE_NOT_COMPLETE_ERROR_MESSAGE);
             else {
@@ -110,7 +104,7 @@ public class ConfigProfileGenerator {
                     values.put(key, value);
                 });
 
-        return converter.convert(values);
+        return util.convert(values);
 
     }
 
@@ -118,36 +112,23 @@ public class ConfigProfileGenerator {
         return profiles.entrySet().stream()
                 .collect(toUnmodifiableMap(
                         Entry::getKey,
-                        e -> merger.merge(e.getValue(), defaultProfile)));
+                        e -> util.merge(e.getValue(), defaultProfile)));
     }
 
     public static class ConfigProfileGeneratorBuilder {
         private SpringPropertiesFacade properties;
-        private MapToConfigConverter converter;
-        private ConfigProfileValidator validator;
-        private ConfigProfileMerger merger;
+        private ConfigUtil util;
         private boolean verifyCompletenessOfDefaultConfiguration = true;
         private String profilePrefix = "delivery-request-configuration-profiles";
         private String defaultConfigKey = "default";
 
-
         public ConfigProfileGeneratorBuilder withProperties(SpringPropertiesFacade properties) {
             this.properties = properties;
             return this;
         }
 
-        public ConfigProfileGeneratorBuilder withConverter(MapToConfigConverter converter) {
-            this.converter = converter;
-            return this;
-        }
-
-        public ConfigProfileGeneratorBuilder withValidator(ConfigProfileValidator validator) {
-            this.validator = validator;
-            return this;
-        }
-
-        public ConfigProfileGeneratorBuilder withMerger(ConfigProfileMerger merger) {
-            this.merger = merger;
+        public ConfigProfileGeneratorBuilder withConfigUtil(ConfigUtil util) {
+            this.util = util;
             return this;
         }
 
@@ -167,9 +148,9 @@ public class ConfigProfileGenerator {
         }
 
         public ConfigProfileGenerator build() {
-            if(properties == null || converter == null || validator == null || merger == null || profilePrefix == null || defaultConfigKey == null)
+            if(properties == null || util == null || profilePrefix == null || defaultConfigKey == null)
                 throw new IllegalArgumentException("Cannot build ConfigProfileGenerator: One or more arguments are null.");
-            return new ConfigProfileGenerator(properties, converter, validator, merger, verifyCompletenessOfDefaultConfiguration, profilePrefix, defaultConfigKey);
+            return new ConfigProfileGenerator(properties, util, verifyCompletenessOfDefaultConfiguration, profilePrefix, defaultConfigKey);
         }
     }
 }
diff --git a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileMerger.java b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileMerger.java
deleted file mode 100644
index c94723e..0000000
--- a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileMerger.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package at.gv.egiz.moazs.preprocess;
-
-import at.gv.zustellung.app2mzs.xsd.ConfigType;
-import at.gv.zustellung.app2mzs.xsd.ServerType;
-import org.springframework.stereotype.Component;
-
-import static at.gv.zustellung.app2mzs.xsd.ConfigType.configTypeBuilder;
-import static at.gv.zustellung.app2mzs.xsd.ServerType.serverTypeBuilder;
-
-@Component
-public class ConfigProfileMerger {
-
-    public ConfigType merge(ConfigType primary, ConfigType fallback) {
-
-        var builder = configTypeBuilder(fallback);
-
-        if(primary != null) {
-
-            if(primary.getServer() != null) {
-                builder.withServer(merge(primary.getServer(), fallback.getServer()));
-            }
-
-            if(primary.isPerformQueryPersonRequest() != null) {
-                builder.withPerformQueryPersonRequest(primary.isPerformQueryPersonRequest());
-            }
-
-        }
-
-        return builder.build();
-
-    }
-
-    private ServerType merge(ServerType primary, ServerType fallback) {
-
-        if (fallback == null) {
-            return primary;
-        }
-
-        var builder = serverTypeBuilder(fallback);
-
-        if (primary.getX509()      != null) builder.withX509     (primary.getX509()     );
-        if (primary.getZUSEUrlID() != null) builder.withZUSEUrlID(primary.getZUSEUrlID());
-
-        return builder.build();
-    }
-}
diff --git a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileValidator.java b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileValidator.java
deleted file mode 100644
index 08d8aea..0000000
--- a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigProfileValidator.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package at.gv.egiz.moazs.preprocess;
-
-import at.gv.zustellung.app2mzs.xsd.ConfigType;
-import org.springframework.stereotype.Component;
-
-@Component
-public class ConfigProfileValidator {
-
-    public boolean isComplete(ConfigType profile) {
-        //TODO: add check fo x509 certificate
-        return profile != null
-                && profile.isPerformQueryPersonRequest() != null
-                && profile.getServer() != null
-                && profile.getServer().getZUSEUrlID() != null;
-    }
-
-}
diff --git a/src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java
new file mode 100644
index 0000000..736fb0a
--- /dev/null
+++ b/src/main/java/at/gv/egiz/moazs/preprocess/ConfigUtil.java
@@ -0,0 +1,95 @@
+package at.gv.egiz.moazs.preprocess;
+
+import at.gv.zustellung.app2mzs.xsd.ConfigType;
+import at.gv.zustellung.app2mzs.xsd.ServerType;
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Component;
+
+import javax.validation.constraints.Null;
+import java.util.Map;
+
+import static at.gv.zustellung.app2mzs.xsd.ConfigType.configTypeBuilder;
+import static at.gv.zustellung.app2mzs.xsd.ServerType.serverTypeBuilder;
+
+@Component
+public class ConfigUtil {
+
+    private static final String TNVZ_REQUEST_KEY = "perform-query-person-request";
+    private static final String MSG_URL_KEY = "msg.url";
+
+    /**
+     * Builds a ConvertType Object out of a Map on the Basis of it's Keys and Values.
+     *
+     * @param Map with keys and values.
+     * @return ConvertType Object
+     */
+    public ConfigType convert(Map<String, String> values) {
+        var server = serverTypeBuilder()
+                .withZUSEUrlID(values.get(MSG_URL_KEY))
+                .build();
+
+        Boolean performQueryPersonRequest = values.get(TNVZ_REQUEST_KEY) == null
+                ? null : Boolean.getBoolean(values.get(TNVZ_REQUEST_KEY));
+
+        return ConfigType.configTypeBuilder()
+                .withPerformQueryPersonRequest(performQueryPersonRequest)
+                .withServer(server)
+                .build();
+    }
+
+    /**
+     * Combines Properties of Two ConfigType Objects; {@code primary} overrides {@code fallback}.
+     *
+     * @param primary
+     * @param fallback
+     * @return Combined ConfigType
+     */
+    public ConfigType merge(@Nullable ConfigType primary, ConfigType fallback) {
+
+        var builder = configTypeBuilder(fallback);
+
+        if(primary != null) {
+
+            if(primary.getServer() != null) {
+                builder.withServer(merge(primary.getServer(), fallback.getServer()));
+            }
+
+            if(primary.isPerformQueryPersonRequest() != null) {
+                builder.withPerformQueryPersonRequest(primary.isPerformQueryPersonRequest());
+            }
+
+        }
+
+        return builder.build();
+
+    }
+
+    private ServerType merge(ServerType primary, ServerType fallback) {
+
+        if (fallback == null) {
+            return primary;
+        }
+
+        var builder = serverTypeBuilder(fallback);
+
+        if (primary.getX509()      != null) builder.withX509     (primary.getX509()     );
+        if (primary.getZUSEUrlID() != null) builder.withZUSEUrlID(primary.getZUSEUrlID());
+
+        return builder.build();
+    }
+
+    /**
+     *
+     *
+     * @param profile
+     * @return
+     */
+    public boolean isComplete(@Nullable ConfigType profile) {
+        //TODO: add check fo x509 certificate
+        return profile != null
+                && profile.isPerformQueryPersonRequest() != null
+                && profile.getServer() != null
+                && profile.getServer().getZUSEUrlID() != null;
+    }
+
+}
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 0b49347..f3a05d1 100644
--- a/src/main/java/at/gv/egiz/moazs/preprocess/DeliveryRequestAugmenter.java
+++ b/src/main/java/at/gv/egiz/moazs/preprocess/DeliveryRequestAugmenter.java
@@ -13,9 +13,8 @@ import static at.gv.zustellung.app2mzs.xsd.DeliveryRequestType.deliveryRequestTy
 @Component
 public class DeliveryRequestAugmenter {
 
-    private final ConfigProfileMerger merger;
+    private final ConfigUtil util;
     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.";
@@ -24,11 +23,9 @@ public class DeliveryRequestAugmenter {
             "configuration is incomplete.";
 
     @Autowired
-    public DeliveryRequestAugmenter(Map<String, ConfigType> deliveryRequestConfigs, ConfigProfileMerger merger,
-                                    ConfigProfileValidator validator) {
+    public DeliveryRequestAugmenter(Map<String, ConfigType> deliveryRequestConfigs, ConfigUtil util) {
         this.configs = deliveryRequestConfigs;
-        this.merger = merger;
-        this.validator = validator;
+        this.util = util;
     }
 
     /**
@@ -45,16 +42,16 @@ public class DeliveryRequestAugmenter {
 
         if (fallbackConfig == null) {
 
-            if (validator.isComplete(requestConfig))
+            if (util.isComplete(requestConfig))
                 return request;
             else
                 throw moaZSException(INCOMPLETE_CONFIG_ERROR_MESSAGE);
 
         } else {
 
-            var mergedConfig = merger.merge(requestConfig, fallbackConfig);
+            var mergedConfig = util.merge(requestConfig, fallbackConfig);
 
-            if (validator.isComplete(mergedConfig)) {
+            if (util.isComplete(mergedConfig)) {
                 return deliveryRequestTypeBuilder(request)
                         .withConfig(mergedConfig)
                         .build();
diff --git a/src/main/java/at/gv/egiz/moazs/preprocess/MapToConfigConverter.java b/src/main/java/at/gv/egiz/moazs/preprocess/MapToConfigConverter.java
deleted file mode 100644
index ef7cff1..0000000
--- a/src/main/java/at/gv/egiz/moazs/preprocess/MapToConfigConverter.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package at.gv.egiz.moazs.preprocess;
-
-import at.gv.zustellung.app2mzs.xsd.ConfigType;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-import static at.gv.zustellung.app2mzs.xsd.ServerType.serverTypeBuilder;
-
-@Component
-public class MapToConfigConverter {
-
-    private static final String TNVZ_REQUEST_KEY = "perform-query-person-request";
-    private static final String MSG_URL_KEY = "msg.url";
-
-    public ConfigType convert(Map<String, String> values) {
-        var server = serverTypeBuilder()
-                .withZUSEUrlID(values.get(MSG_URL_KEY))
-                .build();
-
-        Boolean performQueryPersonRequest = values.get(TNVZ_REQUEST_KEY) == null
-                ? null : Boolean.getBoolean(values.get(TNVZ_REQUEST_KEY));
-
-        return ConfigType.configTypeBuilder()
-                .withPerformQueryPersonRequest(performQueryPersonRequest)
-                .withServer(server)
-                .build();
-    }
-}
diff --git a/src/test/java/at/gv/egiz/moazs/ConfigProfileGeneratorTest.java b/src/test/java/at/gv/egiz/moazs/ConfigProfileGeneratorTest.java
index c0ff96c..95cccd1 100644
--- a/src/test/java/at/gv/egiz/moazs/ConfigProfileGeneratorTest.java
+++ b/src/test/java/at/gv/egiz/moazs/ConfigProfileGeneratorTest.java
@@ -1,7 +1,6 @@
 package at.gv.egiz.moazs;
 
 import at.gv.egiz.moazs.preprocess.*;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -22,17 +21,11 @@ public class ConfigProfileGeneratorTest {
     private static final String DEFAULT = "default";
 
     @Mock
-    private ConfigProfileMerger merger;
-
-    @Mock
-    private ConfigProfileValidator validator;
+    private ConfigUtil util;
 
     @Mock
     private SpringPropertiesFacade properties;
 
-    @Mock
-    private MapToConfigConverter converter;
-
     @Test
     public void assembleDefaultProfile() {
         var propMap = Map.of(
@@ -43,7 +36,7 @@ public class ConfigProfileGeneratorTest {
 
         var profiles = generator.generate();
 
-        verify(converter).convert(Map.of(
+        verify(util).convert(Map.of(
                 "property-a", "value-a",
                 "property-b", "value-b",
                 "property-c", "value-c"));
@@ -57,7 +50,7 @@ public class ConfigProfileGeneratorTest {
 
         var profiles = generator.generate();
 
-        verifyZeroInteractions(converter);
+        verify(util, never()).convert(any());
         assertThat(profiles.keySet()).isEmpty();
     }
 
@@ -68,7 +61,7 @@ public class ConfigProfileGeneratorTest {
 
         var profiles = generator.generate();
 
-        verifyZeroInteractions(converter);
+        verify(util, never()).convert(any());
         assertThat(profiles.keySet()).isEmpty();
     }
 
@@ -84,9 +77,9 @@ public class ConfigProfileGeneratorTest {
 
         var profiles = generator.generate();
 
-        verify(converter).convert(Map.of("property-a", "value-a", "property-b", "value-b"));
-        verify(converter).convert(Map.of("property-c", "value-c"));
-        verify(converter).convert(Map.of("property-d", "value-d"));
+        verify(util).convert(Map.of("property-a", "value-a", "property-b", "value-b"));
+        verify(util).convert(Map.of("property-c", "value-c"));
+        verify(util).convert(Map.of("property-d", "value-d"));
         assertThat(profiles.keySet()).containsExactlyInAnyOrder(DEFAULT, "profile-1", "profile-2");
     }
 
@@ -94,7 +87,7 @@ public class ConfigProfileGeneratorTest {
     public void cancelAtIncompleteDefaultProfile() {
         var propMap = Map.of(PREFIX + "." + DEFAULT + ".property-a", "value-a");
         var generator = setupMocksAndBuilder(propMap).build();
-        when(validator.isComplete(any())).thenReturn(false);
+        when(util.isComplete(any())).thenReturn(false);
 
         generator.generate();
     }
@@ -103,7 +96,7 @@ public class ConfigProfileGeneratorTest {
     public void continueAtIncompleteDefaultWhenVerificationDisabled() {
         var propMap = Map.of(PREFIX + "." + DEFAULT + ".property-a", "value-a");
 
-        when(validator.isComplete(any())).thenReturn(false);
+        when(util.isComplete(any())).thenReturn(false);
 
         var generator = setupMocksAndBuilder(propMap)
                 .withVerifyCompletenessOfDefaultConfiguration(false)
@@ -111,22 +104,20 @@ public class ConfigProfileGeneratorTest {
 
         var profiles = generator.generate();
 
-        verify(converter).convert(Map.of("property-a", "value-a"));
+        verify(util).convert(Map.of("property-a", "value-a"));
         assertThat(profiles.keySet()).containsExactlyInAnyOrder(DEFAULT);
     }
 
     private ConfigProfileGenerator.ConfigProfileGeneratorBuilder setupMocksAndBuilder(Map<String, String> propMap) {
         when(properties.getPropertyNames()).thenReturn(propMap.keySet().stream());
         when(properties.getProperty(any())).thenAnswer(i -> propMap.get(i.getArgument(0)));
-        when(merger.merge(any(), any())).thenAnswer(i -> i.getArgument(0));
-        when(validator.isComplete(any())).thenReturn(true);
-        when(converter.convert(any())).thenReturn(configTypeBuilder().build());
+        when(util.merge(any(), any())).thenAnswer(i -> i.getArgument(0));
+        when(util.isComplete(any())).thenReturn(true);
+        when(util.convert(any())).thenReturn(configTypeBuilder().build());
 
         return configProfileGeneratorBuilder()
                 .withProperties(properties)
-                .withConverter(converter)
-                .withValidator(validator)
-                .withMerger(merger)
+                .withConfigUtil(util)
                 .withDefaultConfigKey(DEFAULT)
                 .withProfilePrefix(PREFIX)
                 .withVerifyCompletenessOfDefaultConfiguration(true);
diff --git a/src/test/java/at/gv/egiz/moazs/DeliveryRequestAugmenterTest.java b/src/test/java/at/gv/egiz/moazs/DeliveryRequestAugmenterTest.java
index 73313af..c389b61 100644
--- a/src/test/java/at/gv/egiz/moazs/DeliveryRequestAugmenterTest.java
+++ b/src/test/java/at/gv/egiz/moazs/DeliveryRequestAugmenterTest.java
@@ -1,7 +1,6 @@
 package at.gv.egiz.moazs;
 
-import at.gv.egiz.moazs.preprocess.ConfigProfileMerger;
-import at.gv.egiz.moazs.preprocess.ConfigProfileValidator;
+import at.gv.egiz.moazs.preprocess.ConfigUtil;
 import at.gv.egiz.moazs.preprocess.DeliveryRequestAugmenter;
 import at.gv.zustellung.app2mzs.xsd.ConfigType;
 import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType;
@@ -89,14 +88,13 @@ public class DeliveryRequestAugmenterTest {
     }
 
     private DeliveryRequestAugmenter createAugmenter(ConfigType fallback) {
-        return new DeliveryRequestAugmenter(Map.of("default", fallback), new ConfigProfileMerger(), new ConfigProfileValidator());
+        return new DeliveryRequestAugmenter(Map.of("default", fallback), new ConfigUtil());
     }
 
     private DeliveryRequestAugmenter createAugmenter(Map<String, ConfigType> profiles) {
-        return new DeliveryRequestAugmenter(profiles, new ConfigProfileMerger(), new ConfigProfileValidator());
+        return new DeliveryRequestAugmenter(profiles, new ConfigUtil());
     }
 
-
     private ConfigType createConfig(String url, Boolean performTnvz) {
         return createConfig(url, performTnvz, null);
     }
-- 
cgit v1.2.3