summaryrefslogtreecommitdiffstats
path: root/bpmn/MSOCommonBPMN
diff options
context:
space:
mode:
Diffstat (limited to 'bpmn/MSOCommonBPMN')
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/InstanceResourceList.java160
1 files changed, 160 insertions, 0 deletions
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/InstanceResourceList.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/InstanceResourceList.java
new file mode 100644
index 0000000000..b50ecdad8b
--- /dev/null
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/resource/InstanceResourceList.java
@@ -0,0 +1,160 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 Huawei Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.so.bpmn.common.resource;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import org.onap.so.bpmn.core.domain.GroupResource;
+import org.onap.so.bpmn.core.domain.Resource;
+import org.onap.so.bpmn.core.domain.ResourceType;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+public class InstanceResourceList {
+
+ private static List<Map<String, List<GroupResource>>> convertUUIReqTOStd(final String uuiRequest,
+ List<Resource> seqResourceList) {
+
+ List<Map<String, List<GroupResource>>> normalizedList = new ArrayList<>();
+
+ Gson gson = new Gson();
+ JsonObject servJsonObject = gson.fromJson(uuiRequest, JsonObject.class);
+
+ JsonObject reqInputJsonObj = servJsonObject.getAsJsonObject("service").getAsJsonObject("parameters")
+ .getAsJsonObject("requestInputs");
+
+ // iterate all node in requestInputs
+ Iterator<Map.Entry<String, JsonElement>> iterator = reqInputJsonObj.entrySet().iterator();
+
+ while (iterator.hasNext()) { // iterate all <vf>_list
+ Map.Entry<String, JsonElement> entry = iterator.next();
+
+ // truncate "_list" from key and keep only the <VF_NAME>
+ String key = entry.getKey().substring(0, entry.getKey().indexOf("_list"));
+
+ // all the element represent VF will contain "<VF_NAME>_list".
+ if (key.contains("_list")) {
+ // this will return list of vf of same type
+ // e.g. vf_list [{vf1}, {vf2}]
+ Iterator<JsonElement> vfsIterator = entry.getValue().getAsJsonArray().iterator();
+
+ while (vfsIterator.hasNext()) { // iterate all [] inside vf_list
+ JsonObject vfObject = vfsIterator.next().getAsJsonObject();
+ List<GroupResource> tmpGrpsHolder = new ArrayList<>();
+
+ // iterate vfObject to get groups(vfc)
+ // currently each vfc represented by one group.
+ Iterator<Map.Entry<String, JsonElement>> vfIterator = vfObject.entrySet().iterator();
+ while (vfIterator.hasNext()) { // iterate all property inside a VF
+ Map.Entry<String, JsonElement> vfEntry = vfIterator.next();
+
+ // property name for vfc input will always carry "<VFC_NAME>_list"
+ if (vfEntry.getKey().contains("_list")) {
+ // truncate "_list" from key and keep only the <VFC_NAME>
+ String vfcName = vfEntry.getKey().substring(0, vfEntry.getKey().indexOf("_list"));
+ GroupResource grpRes = getGroupResource(vfcName, seqResourceList);
+ // A <vfc>_list can contain more than one vfc of same type
+ Iterator<JsonElement> vfcsIterator = vfEntry.getValue().getAsJsonArray().iterator();
+
+ while (vfcsIterator.hasNext()) { // iterate all the vfcs inside <vfc>_list
+ tmpGrpsHolder.add(grpRes);
+ }
+ }
+ }
+ List<GroupResource> seqGrpResourceList = seqGrpResource(tmpGrpsHolder, seqResourceList);
+ HashMap<String, List<GroupResource>> entryNormList = new HashMap<>();
+ entryNormList.put(key, seqGrpResourceList);
+ normalizedList.add(entryNormList);
+ }
+ }
+ }
+
+ return normalizedList;
+ }
+
+ private static List<GroupResource> seqGrpResource(List<GroupResource> grpResources, List<Resource> resourceList) {
+ List<GroupResource> seqGrpResList = new ArrayList<>();
+ for (Resource r : resourceList) {
+ if (r.getResourceType() != ResourceType.GROUP) {
+ continue;
+ }
+ for (GroupResource g : grpResources) {
+ if (r.getModelInfo().getModelName().equalsIgnoreCase(g.getModelInfo().getModelName())) {
+ seqGrpResList.add(g);
+ }
+ }
+ }
+ return seqGrpResList;
+ }
+
+ private static GroupResource getGroupResource(String vfcName, List<Resource> seqRessourceList) {
+ for (Resource r : seqRessourceList) {
+ if (r.getResourceType() == ResourceType.GROUP) {
+ // Currently only once vnfc is added to group
+ return ((GroupResource) r).getVnfcs().get(0).getModelInfo().getModelName().contains(vfcName)
+ ? (GroupResource) r
+ : null;
+ }
+ }
+ return null;
+ }
+
+ private static List<Resource> convertToInstanceResourceList(List<Map<String, List<GroupResource>>> normalizedReq,
+ List<Resource> seqResourceList) {
+ List<Resource> flatResourceList = new ArrayList<>();
+ for (Resource r : seqResourceList) {
+ if (r.getResourceType() == ResourceType.VNF) {
+ for (Map<String, List<GroupResource>> entry : normalizedReq) {
+ if (r.getModelInfo().getModelName().equalsIgnoreCase(entry.keySet().iterator().next())) {
+ flatResourceList.add(r);
+ flatResourceList.addAll(entry.get(entry.keySet().iterator().next()));
+ }
+ }
+ }
+ }
+ return flatResourceList;
+ }
+
+ public static List<Resource> getInstanceResourceList(final List<Resource> seqResourceList,
+ final String uuiRequest) {
+
+ // this will convert UUI request to normalized form
+ List<Map<String, List<GroupResource>>> normalizedReq = convertUUIReqTOStd(uuiRequest, seqResourceList);
+
+ // now UUI json req is normalized to
+ // [
+ // { VFB1 : [GrpA1, GrA2, GrB1]},
+ // { VFB2 : [GrpA1, GrB1]},
+ // { VFA1 : [GrpC1]}
+ // ]
+ // now sequence according to VF order (Group is already sequenced).
+ // After sequence it will look like :
+ // [
+ // { VFA1 : [GrpA1, GrA2, GrB1]},
+ // { VFA2 : [GrpA1, GrB1]},
+ // { VFB1 : [GrpC1]}
+ // ]
+ return convertToInstanceResourceList(normalizedReq, seqResourceList);
+ }
+}