RA: Add the allowed range in the return values 20/104420/2
authorsb5356 <sb5356@att.com>
Wed, 25 Mar 2020 19:48:17 +0000 (15:48 -0400)
committersb5356 <sb5356@att.com>
Thu, 26 Mar 2020 15:05:26 +0000 (11:05 -0400)
Change-Id: I18530c17ac78269c1b48ba499edfb3921d23f164
Issue-ID: CCSDK-2189
Signed-off-by: Stan Bonev <sb5356@att.com>
resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/ResourceAllocator.java
resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/comp/EndPointAllocatorImpl.java
resource-assignment/provider/src/main/java/org/onap/ccsdk/sli/adaptors/ra/comp/ResourceData.java
resource-assignment/provider/src/test/java/jtest/org/onap/ccsdk/sli/adaptors/ra/TestReserve.java

index 338c528..19062d5 100644 (file)
@@ -22,6 +22,7 @@
 
 package org.onap.ccsdk.sli.adaptors.ra;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
@@ -180,11 +181,10 @@ public class ResourceAllocator implements SvcLogicResource {
             setAttr(ctx, pp + "resource-target-value", rd.resourceTargetValue);
             setAttr(ctx, pp + "status", rd.status);
 
-            if (rd.data != null && !rd.data.isEmpty()) {
-                for (String kk : rd.data.keySet()) {
-                    String value = String.valueOf(rd.data.get(kk));
-                    setAttr(ctx, pp + kk, value);
-                }
+            Map<String, String> dataProp = dataToProperties(rd.data);
+            for (String kk : dataProp.keySet()) {
+                String value = String.valueOf(dataProp.get(kk));
+                setAttr(ctx, pp + kk, value);
             }
 
             if (rd.allocationDataList != null && !rd.allocationDataList.isEmpty()) {
@@ -534,6 +534,39 @@ public class ResourceAllocator implements SvcLogicResource {
         return data;
     }
 
+    @SuppressWarnings("unchecked")
+    public static Map<String, String> dataToProperties(Map<String, Object> data) {
+        if (data == null || data.isEmpty()) {
+            return Collections.emptyMap();
+        }
+
+        Map<String, String> prop = new HashMap<>();
+        Map<String, Object> data1 = new HashMap<>(data);
+
+        while (!data1.isEmpty()) {
+            for (String key : new ArrayList<>(data1.keySet())) {
+                Object o = data1.get(key);
+                data1.remove(key);
+
+                if (o instanceof Boolean || o instanceof Number || o instanceof String) {
+                    prop.put(key, o.toString());
+                } else if (o instanceof Map) {
+                    Map<String, Object> mm = (Map<String, Object>) o;
+                    for (String key1 : mm.keySet()) {
+                        data1.put(key + "." + key1, mm.get(key1));
+                    }
+                } else if (o instanceof List) {
+                    List<Object> ll = (List<Object>) o;
+                    prop.put(key + "_length", String.valueOf(ll.size()));
+                    for (int i = 0; i < ll.size(); i++) {
+                        data1.put(key + '[' + i + ']', ll.get(i));
+                    }
+                }
+            }
+        }
+        return prop;
+    }
+
     public void setResourceManager(ResourceManager resourceManager) {
         this.resourceManager = resourceManager;
     }
index 91f5873..36e40d5 100644 (file)
@@ -4,7 +4,7 @@
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights
  *                                             reserved.
- * 
+ *
  * Modifications Copyright (C) 2019 IBM.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -38,8 +38,10 @@ import org.onap.ccsdk.sli.adaptors.rm.data.LimitAllocationItem;
 import org.onap.ccsdk.sli.adaptors.rm.data.LimitAllocationOutcome;
 import org.onap.ccsdk.sli.adaptors.rm.data.LimitResource;
 import org.onap.ccsdk.sli.adaptors.rm.data.MultiResourceAllocationOutcome;
+import org.onap.ccsdk.sli.adaptors.rm.data.Range;
 import org.onap.ccsdk.sli.adaptors.rm.data.RangeAllocationItem;
 import org.onap.ccsdk.sli.adaptors.rm.data.RangeAllocationOutcome;
+import org.onap.ccsdk.sli.adaptors.rm.data.RangeAllocationRequest;
 import org.onap.ccsdk.sli.adaptors.rm.data.RangeResource;
 import org.onap.ccsdk.sli.adaptors.rm.data.ReleaseRequest;
 import org.onap.ccsdk.sli.adaptors.rm.data.Resource;
@@ -129,6 +131,17 @@ public class EndPointAllocatorImpl implements EndPointAllocator {
             RangeAllocationOutcome rao = (RangeAllocationOutcome) ao;
             rd.data.put("allocated", String.valueOf(StrUtil.listInt(rao.allocated)));
             rd.data.put("used", String.valueOf(StrUtil.listInt(rao.used)));
+            List<Range> rangeList = ((RangeAllocationRequest) rao.request).rangeList;
+            if (rangeList != null && !rangeList.isEmpty()) {
+                List<Object> ll = new ArrayList<>();
+                for (Range r : rangeList) {
+                    Map<String, Object> mm = new HashMap<>();
+                    mm.put("min", r.min);
+                    mm.put("max", r.max);
+                    ll.add(mm);
+                }
+                rd.data.put("range-list", ll);
+            }
         }
 
         return Collections.singletonList(rd);
@@ -229,7 +242,7 @@ public class EndPointAllocatorImpl implements EndPointAllocator {
 
             log.info("ResourceName:" + r.resourceKey.resourceName + " assetId:" + r.resourceKey.assetId);
 
-           
+
             rdlist.add(getResourceData(r));
         }
 
index a20c01d..d83d4cd 100644 (file)
@@ -32,6 +32,6 @@ public class ResourceData {
     public String resourceTargetType;
     public String endPointPosition;
     public String status;
-    public Map<String, String> data;
+    public Map<String, Object> data;
     public List<AllocationData> allocationDataList;
 }
index 168bdd7..f42ef9c 100644 (file)
@@ -634,6 +634,17 @@ public class TestReserve {
         Assert.assertTrue(st == QueryStatus.SUCCESS);
         Assert.assertTrue(dataSetup.checkRangeItem(resourceName, assetId, resourceSet1, "201"));
         Assert.assertTrue(dataSetup.checkRangeItem(resourceName, assetId, resourceSet2, "201"));
+
+        Assert.assertEquals(ctx.getAttribute("resource-list_length"), "1");
+        Assert.assertEquals(ctx.getAttribute("resource-list[0].resource-name"), "cust-vlan-id");
+        Assert.assertEquals(ctx.getAttribute("resource-list[0].resource-target-type"), "VNF");
+        Assert.assertEquals(ctx.getAttribute("resource-list[0].resource-target-id"), "port-id-1");
+        Assert.assertEquals(ctx.getAttribute("resource-list[0].status"), "Success");
+        Assert.assertEquals(ctx.getAttribute("resource-list[0].allocated"), "201");
+        Assert.assertEquals(ctx.getAttribute("resource-list[0].used"), "201");
+        Assert.assertEquals(ctx.getAttribute("resource-list[0].range-list_length"), "1");
+        Assert.assertEquals(ctx.getAttribute("resource-list[0].range-list[0].min"), "2");
+        Assert.assertEquals(ctx.getAttribute("resource-list[0].range-list[0].max"), "1000");
     }
 
     @Test