Tweak add resources summarizing function in service instance 15/99815/2
authorIttay Stern <ittay.stern@att.com>
Thu, 19 Dec 2019 13:17:36 +0000 (15:17 +0200)
committerIttay Stern <ittay.stern@att.com>
Thu, 19 Dec 2019 13:44:38 +0000 (15:44 +0200)
Issue-ID: VID-724

Change-Id: I7e705aef5e94698c60bd4ea17991b5beb6f0dc54
Signed-off-by: Alexey Sandler <alexey.sandler@intl.att.com>
Signed-off-by: Ittay Stern <ittay.stern@att.com>
vid-app-common/src/main/java/org/onap/vid/services/AsyncInstantiationBusinessLogicImpl.java
vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java

index d1b475c..c0ee7ea 100644 (file)
 
 package org.onap.vid.services;
 
-import static java.util.stream.Collectors.counting;
 import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.counting;
 import static java.util.stream.Collectors.groupingBy;
+import static java.util.stream.Stream.concat;
 import static org.apache.commons.lang3.ObjectUtils.defaultIfNull;
 import static org.onap.vid.controller.MsoController.SVC_INSTANCE_ID;
 import static org.onap.vid.controller.MsoController.VNF_INSTANCE_ID;
@@ -33,16 +34,13 @@ import java.io.IOException;
 import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.Collection;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.UUID;
 import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import org.apache.commons.collections.CollectionUtils;
+import java.util.stream.Stream;
 import org.apache.commons.lang3.StringUtils;
 import org.hibernate.SessionFactory;
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
@@ -69,6 +67,7 @@ import org.onap.vid.mso.MsoBusinessLogicImpl;
 import org.onap.vid.mso.MsoProperties;
 import org.onap.vid.mso.MsoUtil;
 import org.onap.vid.mso.RestObject;
+import org.onap.vid.mso.model.ModelInfo;
 import org.onap.vid.mso.rest.AsyncRequestStatus;
 import org.onap.vid.mso.rest.RequestStatus;
 import org.onap.vid.properties.Features;
@@ -186,26 +185,25 @@ public class AsyncInstantiationBusinessLogicImpl implements
         return uuids;
     }
 
-    public  Map<String, Long> getSummarizedChildrenMap(ServiceInstantiation serviceInstantiation){
-        List<String> existingTypesList = new ArrayList<>();
-        Map<String, Long> existingTypesCounters;
+    public Map<String, Long> getSummarizedChildrenMap(ServiceInstantiation serviceInstantiation){
+        Stream<String> existingTypesStream =
+            allDeepChildResources(serviceInstantiation)
+                .map(BaseResource::getModelInfo)
+                .filter(Objects::nonNull)
+                .map(ModelInfo::getModelType);
 
-        existingTypesList = getChildrenList(serviceInstantiation, existingTypesList);
-        existingTypesCounters =  existingTypesList.stream().collect(groupingBy(identity(), counting()));
+        Map<String, Long> existingTypesCounters =
+            existingTypesStream.collect(groupingBy(identity(), counting()));
 
         return existingTypesCounters;
     }
 
-    private List<String> getChildrenList(BaseResource resource, List<String> list){
-        Collection<? extends BaseResource> children =  resource.getChildren();
-        if (CollectionUtils.isNotEmpty(children)){
-            children.forEach( child -> {
-                String childType = child.getModelInfo().getModelType();
-                getChildrenList(child, list);
-                list.add(childType);
-            });
-        }
-        return list;
+    private Stream<BaseResource> allDeepChildResources(BaseResource resource) {
+        return resource
+            .getChildren()
+            .stream()
+            .map(it -> concat(Stream.of(it), allDeepChildResources(it)))
+            .flatMap(identity());
     }
 
     private ServiceInfo.ServiceAction getAction(ServiceInstantiation request) {
index 4b4aa4d..29d614c 100644 (file)
@@ -496,9 +496,10 @@ public class AsyncInstantiationBusinessLogicTest extends AsyncInstantiationBaseT
         ServiceInstantiation serviceInstantiation = TestUtils.readJsonResourceFileAsObject(
             "/payload_jsons/templateSummarize4vnfs6vfmodules.json", ServiceInstantiation.class);
         Map<String, Long> childrenMap =  asyncInstantiationBL.getSummarizedChildrenMap(serviceInstantiation);
-        HashMap<String, Long> expectedMap = new HashMap<>();
-        expectedMap.put("vnf", Long.valueOf(4));
-        expectedMap.put("vfModule", Long.valueOf(6));
+        Map<String, Long> expectedMap = ImmutableMap.of(
+            "vnf", 4L,
+            "vfModule", 6L
+        );
         assertEquals(childrenMap,expectedMap);
 
     }