Support additional metadata in external assets api
[sdc.git] / common-be / src / main / java / org / openecomp / sdc / be / datatypes / elements / ToscaGetFunctionDataDefinition.java
index f19217e..82958a7 100644 (file)
@@ -21,6 +21,7 @@
 
 package org.openecomp.sdc.be.datatypes.elements;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.google.gson.Gson;
 import java.util.ArrayList;
 import java.util.List;
@@ -29,6 +30,7 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import lombok.Data;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.openecomp.sdc.be.datatypes.enums.PropertySource;
 import org.openecomp.sdc.be.datatypes.tosca.ToscaGetFunctionType;
 
@@ -42,11 +44,13 @@ public class ToscaGetFunctionDataDefinition implements ToscaFunction, ToscaFunct
     private String sourceName;
     private ToscaGetFunctionType functionType;
     private List<String> propertyPathFromSource = new ArrayList<>();
+    private List<Object> toscaIndexList;
 
     public ToscaGetFunctionDataDefinition() {
         //necessary for JSON conversions
     }
 
+    @JsonIgnore
     public boolean isSubProperty() {
         return propertyPathFromSource != null && propertyPathFromSource.size() > 1;
     }
@@ -58,6 +62,7 @@ public class ToscaGetFunctionDataDefinition implements ToscaFunction, ToscaFunct
         return new Gson().toJson(getJsonObjectValue());
     }
 
+    @JsonIgnore
     @Override
     public Object getJsonObjectValue() {
         if (functionType == null) {
@@ -84,6 +89,15 @@ public class ToscaGetFunctionDataDefinition implements ToscaFunction, ToscaFunct
             );
         }
         if (propertySource == PropertySource.SELF) {
+            if (CollectionUtils.isNotEmpty(toscaIndexList)) {
+                List<Object> parsedIndexList = new ArrayList<Object>();
+                toscaIndexList.forEach((obj) -> {
+                    parsedIndexList.add(StringUtils.isNumeric(obj.toString()) ? Integer.parseInt(obj.toString()) : obj);
+                });
+                return Map.of(functionType.getFunctionName(),
+                    Stream.concat(Stream.of(PropertySource.SELF.getName()), Stream.concat(propertyPathFromSource.stream(),parsedIndexList.stream())).collect(Collectors.toList())
+                );
+            }
             return Map.of(functionType.getFunctionName(),
                 Stream.concat(Stream.of(PropertySource.SELF.getName()), propertyPathFromSource.stream()).collect(Collectors.toList())
             );
@@ -94,6 +108,15 @@ public class ToscaGetFunctionDataDefinition implements ToscaFunction, ToscaFunct
                     String.format("sourceName is required in order to generate the %s from INSTANCE value", functionType.getFunctionName())
                 );
             }
+            if (CollectionUtils.isNotEmpty(toscaIndexList)) {
+                List<Object> parsedIndexList = new ArrayList<Object>();
+                toscaIndexList.forEach((obj) -> {
+                    parsedIndexList.add(StringUtils.isNumeric(obj.toString()) ? Integer.parseInt(obj.toString()) : obj);
+                });
+                return Map.of(functionType.getFunctionName(),
+                    Stream.concat(Stream.of(sourceName), Stream.concat(propertyPathFromSource.stream(),parsedIndexList.stream())).collect(Collectors.toList())
+                );
+            }
             return Map.of(functionType.getFunctionName(),
                 Stream.concat(Stream.of(sourceName), propertyPathFromSource.stream()).collect(Collectors.toList())
             );
@@ -103,10 +126,17 @@ public class ToscaGetFunctionDataDefinition implements ToscaFunction, ToscaFunct
     }
 
     private Map<String, Object> buildGetInputFunctionValue() {
+        List<Object> propertySourceCopy = new ArrayList<Object>(this.propertyPathFromSource);
+        List<Object> propertySourceOneCopy = new ArrayList<>();
+        propertySourceOneCopy.add(this.propertyPathFromSource.get(0));
+        if (CollectionUtils.isNotEmpty(toscaIndexList)) {
+            propertySourceCopy.addAll(toscaIndexList);
+            propertySourceOneCopy.addAll(toscaIndexList);
+        }
         if (this.propertyPathFromSource.size() == 1) {
-            return Map.of(this.functionType.getFunctionName(), this.propertyPathFromSource.get(0));
+            return Map.of(this.functionType.getFunctionName(), propertySourceOneCopy);
         }
-        return Map.of(this.functionType.getFunctionName(), this.propertyPathFromSource);
+        return Map.of(this.functionType.getFunctionName(), propertySourceCopy);
     }
 
     @Override
@@ -126,6 +156,7 @@ public class ToscaGetFunctionDataDefinition implements ToscaFunction, ToscaFunct
         }
     }
 
+    @JsonIgnore
     @Override
     public String getValue() {
         return this.generatePropertyValue();