VidNotionBuilder can use configuration file to identify macro services 97/98697/4
authorEylon Malin <eylon.malin@intl.att.com>
Thu, 21 Nov 2019 07:31:36 +0000 (09:31 +0200)
committerEylon Malin <eylon.malin@intl.att.com>
Thu, 21 Nov 2019 13:48:02 +0000 (15:48 +0200)
Issue-ID: VID-701
Change-Id: I23c89ed500d6d1663b07fa909b16eda30e63e36c
Signed-off-by: Eylon Malin <eylon.malin@intl.att.com>
vid-app-common/src/main/java/org/onap/vid/asdc/parser/VidNotionsBuilder.java
vid-app-common/src/main/resources/macro_services_by_invariant_uuid.json [new file with mode: 0644]
vid-app-common/src/test/java/org/onap/vid/asdc/parser/VidNotionsBuilderTest.java
vid-app-common/src/test/resources/macro_services_by_invariant_uuid.json [new file with mode: 0644]

index 76e911b..3f18a5a 100644 (file)
 
 package org.onap.vid.asdc.parser;
 
+import static java.util.stream.Collectors.toSet;
 import static org.apache.commons.lang3.StringUtils.equalsAnyIgnoreCase;
 import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase;
 import static org.apache.commons.lang3.StringUtils.isEmpty;
+import static org.onap.vid.utils.KotlinUtilsKt.JACKSON_OBJECT_MAPPER;
 
 import com.google.common.collect.ImmutableMap;
+import java.io.IOException;
 import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import java.util.stream.Stream;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
 import org.onap.sdc.toscaparser.api.NodeTemplate;
 import org.onap.sdc.toscaparser.api.elements.Metadata;
+import org.onap.vid.exceptions.GenericUncheckedException;
 import org.onap.vid.model.ServiceModel;
 import org.onap.vid.model.VidNotions;
 import org.onap.vid.model.VidNotions.InstantiationUI;
@@ -42,6 +50,7 @@ import org.togglz.core.manager.FeatureManager;
 public class VidNotionsBuilder {
 
     private final FeatureManager featureManager;
+    private final Set<UUID> invariantToMacro;
 
     //map of service type that are always macro services, and their relevant featureFlag
     private static final Map<VidNotions.ModelCategory, Features> macroServicesByModelCategory = ImmutableMap.of(
@@ -52,6 +61,19 @@ public class VidNotionsBuilder {
 
     public VidNotionsBuilder(FeatureManager featureManager) {
         this.featureManager = featureManager;
+        invariantToMacro = loadInvariantMacroUUIDsFromFile();
+    }
+
+    @NotNull
+    private Set<UUID> loadInvariantMacroUUIDsFromFile()  {
+        try {
+            return Stream.of(JACKSON_OBJECT_MAPPER.readValue(
+                        VidNotionsBuilder.class.getResource("/macro_services_by_invariant_uuid.json"),
+                        String[].class
+                    )).map(UUID::fromString).collect(toSet());
+        } catch (IOException e) {
+            throw new GenericUncheckedException(e);
+        }
     }
 
     VidNotions buildVidNotions(ISdcCsarHelper csarHelper, ServiceModel serviceModel) {
@@ -267,4 +289,13 @@ public class VidNotionsBuilder {
         );
 
     }
+
+    protected boolean isMacroByInvariantUuid(String uuid) {
+        try {
+            return invariantToMacro.contains(UUID.fromString(uuid));
+        }
+        catch (IllegalArgumentException | NullPointerException e) { //not a uuid
+            return false;
+        }
+    }
 }
diff --git a/vid-app-common/src/main/resources/macro_services_by_invariant_uuid.json b/vid-app-common/src/main/resources/macro_services_by_invariant_uuid.json
new file mode 100644 (file)
index 0000000..fe51488
--- /dev/null
@@ -0,0 +1 @@
+[]
index c136f36..c32dd21 100644 (file)
@@ -534,4 +534,23 @@ public class VidNotionsBuilderTest {
 
         assertEquals(expectedViewEditUi, vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel, ModelCategory.OTHER));
     }
+
+    @DataProvider
+    public static Object[][] invariantUuidToMacroDataProvider() {
+        return new Object[][]{
+            {"117f5f1a-1b47-4ae1-ae04-489c9a7ada28", true},
+            {"117F5f1a-1b47-4AE1-ae04-489C9A7ada28", true},
+            {"2efab359-cdd4-4da2-9b79-61df990796c2", true},
+            {"67e09a1f-9e42-4b63-8dee-bc60bae50de1", false},
+            {"67e09A1F-9E42-4b63-8Dee-bc60bae50de1", false},
+            {"5d854f6b-759c-4aa6-b472-7e4bb1c003d4", false},
+            {"I'm not a uuid", false},
+            {null, false},
+        };
+    }
+
+    @Test(dataProvider = "invariantUuidToMacroDataProvider")
+    public void testIsMacroByInvariantUuid(String uuid, boolean expectedIsMacro) {
+        assertEquals(expectedIsMacro, vidNotionsBuilder.isMacroByInvariantUuid(uuid));
+    }
 }
diff --git a/vid-app-common/src/test/resources/macro_services_by_invariant_uuid.json b/vid-app-common/src/test/resources/macro_services_by_invariant_uuid.json
new file mode 100644 (file)
index 0000000..3afb932
--- /dev/null
@@ -0,0 +1,4 @@
+[
+  "117f5f1a-1b47-4ae1-ae04-489c9a7ada28",
+  "2efab359-cdd4-4da2-9b79-61df990796c2"
+]