Refactor CsarUtil::extractVfcArtifact 90/106990/8
authorFrancis Toth <francis.toth@yoppworks.com>
Fri, 1 May 2020 16:42:58 +0000 (12:42 -0400)
committerOfir Sonsino <ofir.sonsino@intl.att.com>
Mon, 18 May 2020 10:58:18 +0000 (10:58 +0000)
Signed-off-by: Francis Toth <francis.toth@yoppworks.com>
Change-Id: Ica8d17d4f3c763920f406ccb89fb3e464d05eab4
Issue-ID: SDC-2812

catalog-be/src/main/java/org/openecomp/sdc/be/tosca/CsarUtils.java
catalog-be/src/test/java/org/openecomp/sdc/be/tosca/CsarUtilsTest.java

index 8a8fff7..21c626b 100644 (file)
@@ -753,7 +753,11 @@ public class CsarUtils {
                 // filter CSAR entry by node type artifact path
                 .filter(e -> Pattern.compile(VFC_NODE_TYPE_ARTIFACTS_PATH_PATTERN).matcher(e.getKey()).matches())
                 // extract ArtifactDefinition from CSAR entry for each entry with matching artifact path
-                .forEach(e -> addExtractedVfcArtifact(extractVfcArtifact(e, collectedWarningMessages), artifacts));
+                .forEach(e ->
+                    extractVfcArtifact(e, collectedWarningMessages).ifPresent(ip ->
+                        addExtractedVfcArtifact(ip, artifacts)
+                    )
+                );
             // add counter suffix to artifact labels
             handleWarningMessages(collectedWarningMessages);
 
@@ -775,30 +779,30 @@ public class CsarUtils {
 
     }
 
-    private static void addExtractedVfcArtifact(ImmutablePair<String, ArtifactDefinition> extractedVfcArtifact, Map<String, List<ArtifactDefinition>> artifacts) {
-        if (extractedVfcArtifact != null) {
-            List<ArtifactDefinition> currArtifactsList;
-            String vfcToscaNamespace = extractedVfcArtifact.getKey();
-            if (artifacts.containsKey(vfcToscaNamespace)) {
-                currArtifactsList = artifacts.get(vfcToscaNamespace);
-            } else {
-                currArtifactsList = new ArrayList<>();
-                artifacts.put(vfcToscaNamespace, currArtifactsList);
-            }
-            currArtifactsList.add(extractedVfcArtifact.getValue());
-        }
+    private static void addExtractedVfcArtifact(
+        ImmutablePair<String, ArtifactDefinition> extractedVfcArtifact,
+        Map<String, List<ArtifactDefinition>> artifacts
+    ) {
+        String vfcToscaNamespace = extractedVfcArtifact.getKey();
+
+        artifacts.computeIfAbsent(vfcToscaNamespace, k -> new ArrayList<>());
+        artifacts.get(vfcToscaNamespace).add(extractedVfcArtifact.getValue());
     }
 
-    private static ImmutablePair<String, ArtifactDefinition> extractVfcArtifact(Entry<String, byte[]> entry, Map<String, Set<List<String>>> collectedWarningMessages) {
-        ArtifactDefinition artifact;
+    private static Optional<ImmutablePair<String, ArtifactDefinition>> extractVfcArtifact(
+        Entry<String, byte[]> entry,
+        Map<String, Set<List<String>>> collectedWarningMessages
+    ) {
         String[] parsedCsarArtifactPath = entry.getKey().split(PATH_DELIMITER);
-        Either<ArtifactGroupTypeEnum, Boolean> eitherArtifactGroupType = detectArtifactGroupType(parsedCsarArtifactPath[2].toUpperCase(), collectedWarningMessages);
-        if (eitherArtifactGroupType.isLeft()) {
-            artifact = buildArtifactDefinitionFromCsarArtifactPath(entry, collectedWarningMessages, parsedCsarArtifactPath, eitherArtifactGroupType.left().value());
-        } else {
-            return null;
-        }
-        return new ImmutablePair<>(parsedCsarArtifactPath[1], artifact);
+        String groupType = parsedCsarArtifactPath[2].toUpperCase();
+
+        return detectArtifactGroupType(groupType, collectedWarningMessages)
+            .left()
+            .map(buildArtifactDefinitionFromCsarArtifactPath(entry, collectedWarningMessages, parsedCsarArtifactPath))
+            .either(
+                ad -> Optional.of(new ImmutablePair<>(parsedCsarArtifactPath[1], ad)),
+                b -> Optional.empty()
+            );
     }
 
     private static Either<ArtifactGroupTypeEnum, Boolean> detectArtifactGroupType(String groupType, Map<String, Set<List<String>>> collectedWarningMessages) {
@@ -829,19 +833,29 @@ public class CsarUtils {
         return result;
     }
 
-    private static ArtifactDefinition buildArtifactDefinitionFromCsarArtifactPath(Entry<String, byte[]> entry, Map<String, Set<List<String>>> collectedWarningMessages, String[] parsedCsarArtifactPath, ArtifactGroupTypeEnum artifactGroupType) {
-        ArtifactDefinition artifact;
-        artifact = new ArtifactDefinition();
-        artifact.setArtifactGroupType(artifactGroupType);
-        artifact.setArtifactType(detectArtifactTypeVFC(artifactGroupType, parsedCsarArtifactPath[3], parsedCsarArtifactPath[1], collectedWarningMessages));
-        artifact.setArtifactName(ValidationUtils.normalizeFileName(parsedCsarArtifactPath[parsedCsarArtifactPath.length - 1]));
-        artifact.setPayloadData(Base64.encodeBase64String(entry.getValue()));
-        artifact.setArtifactDisplayName(artifact.getArtifactName().lastIndexOf('.') > 0 ? artifact.getArtifactName().substring(0, artifact.getArtifactName().lastIndexOf('.')) : artifact.getArtifactName());
-        artifact.setArtifactLabel(ValidationUtils.normalizeArtifactLabel(artifact.getArtifactName()));
-        artifact.setDescription(ARTIFACT_CREATED_FROM_CSAR);
-        artifact.setIsFromCsar(true);
-        artifact.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(entry.getValue()));
-        return artifact;
+    private static F<ArtifactGroupTypeEnum, ArtifactDefinition> buildArtifactDefinitionFromCsarArtifactPath(
+        Entry<String, byte[]> entry,
+        Map<String, Set<List<String>>> collectedWarningMessages,
+        String[] parsedCsarArtifactPath
+    ) {
+        return artifactGroupType -> {
+            ArtifactDefinition artifact;
+            artifact = new ArtifactDefinition();
+            artifact.setArtifactGroupType(artifactGroupType);
+            artifact.setArtifactType(
+                detectArtifactTypeVFC(artifactGroupType, parsedCsarArtifactPath[3], parsedCsarArtifactPath[1],
+                    collectedWarningMessages));
+            artifact.setArtifactName(
+                ValidationUtils.normalizeFileName(parsedCsarArtifactPath[parsedCsarArtifactPath.length - 1]));
+            artifact.setPayloadData(Base64.encodeBase64String(entry.getValue()));
+            artifact.setArtifactDisplayName(artifact.getArtifactName().lastIndexOf('.') > 0 ? artifact.getArtifactName()
+                .substring(0, artifact.getArtifactName().lastIndexOf('.')) : artifact.getArtifactName());
+            artifact.setArtifactLabel(ValidationUtils.normalizeArtifactLabel(artifact.getArtifactName()));
+            artifact.setDescription(ARTIFACT_CREATED_FROM_CSAR);
+            artifact.setIsFromCsar(true);
+            artifact.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(entry.getValue()));
+            return artifact;
+        };
     }
 
     @Getter
index 092dd1d..3ee2b89 100644 (file)
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import fj.data.Either;
 import java.io.IOException;
@@ -40,6 +41,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Optional;
 import java.util.Set;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
@@ -660,10 +662,14 @@ public class CsarUtilsTest extends BeConfDependentTest {
                map.put(path, "value".getBytes());
                Entry<String, byte[]> entry = map.entrySet().iterator().next();
 
-               ImmutablePair<String, ArtifactDefinition> output = Deencapsulation.invoke(testSubject, "extractVfcArtifact", entry, new HashMap<>());
+               Optional<ImmutablePair<String, ArtifactDefinition>> output =
+                       Deencapsulation.invoke(testSubject, "extractVfcArtifact", entry, new HashMap<>());
 
-               assertNotNull(output);
-               assertEquals("to",output.left);
+               if(output.isPresent()) {
+                       assertEquals("to", output.get().left);
+               } else {
+                       fail("`output` is empty!");
+               }
        }
 
        @Test