aboutsummaryrefslogtreecommitdiffstats
path: root/common-be/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'common-be/src/main')
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaCustomFunction.java20
-rw-r--r--common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionJsonDeserializer.java32
2 files changed, 47 insertions, 5 deletions
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaCustomFunction.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaCustomFunction.java
index 3f0c4fa8a5..981d4ecf8e 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaCustomFunction.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaCustomFunction.java
@@ -22,19 +22,20 @@
package org.openecomp.sdc.be.datatypes.elements;
import com.google.gson.Gson;
-import lombok.Getter;
-import lombok.Setter;
-
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import lombok.Getter;
+import lombok.Setter;
@Getter
@Setter
public class ToscaCustomFunction implements ToscaFunction, ToscaFunctionParameter {
private String name;
+ private ToscaFunctionType toscaFunctionType;
private List<ToscaFunctionParameter> parameters = new ArrayList<>();
@Override
@@ -49,9 +50,18 @@ public class ToscaCustomFunction implements ToscaFunction, ToscaFunctionParamete
@Override
public Object getJsonObjectValue() {
+ if (ToscaFunctionType.GET_INPUT.equals(this.toscaFunctionType)) {
+ Map<String, Object> getInput = parameters.stream().collect(Collectors.toMap(
+ input -> "$" + name,
+ input -> {
+ Map<String, Object> inputMap = (Map<String, Object>) input.getJsonObjectValue();
+ return inputMap.get(ToscaFunctionType.GET_INPUT.getName());
+ }));
+ return getInput;
+ }
return Map.of(
- "$" + name,
- parameters.stream().map(ToscaFunctionParameter::getJsonObjectValue).collect(Collectors.toList())
+ "$" + name,
+ parameters.stream().map(ToscaFunctionParameter::getJsonObjectValue).collect(Collectors.toList())
);
}
diff --git a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionJsonDeserializer.java b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionJsonDeserializer.java
index 2e57a4158a..de8e30b897 100644
--- a/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionJsonDeserializer.java
+++ b/common-be/src/main/java/org/openecomp/sdc/be/datatypes/elements/ToscaFunctionJsonDeserializer.java
@@ -29,7 +29,10 @@ import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
+import org.openecomp.sdc.be.config.Configuration;
+import org.openecomp.sdc.be.config.ConfigurationManager;
import org.openecomp.sdc.be.datatypes.enums.PropertySource;
import org.openecomp.sdc.be.datatypes.tosca.ToscaGetFunctionType;
import org.slf4j.Logger;
@@ -178,11 +181,40 @@ public class ToscaFunctionJsonDeserializer extends StdDeserializer<ToscaFunction
throw context.instantiationException(List.class, "Expecting a string for the 'name' entry");
}
toscaCustomFunction.setName(name);
+ toscaCustomFunction.setToscaFunctionType(getCustomFunctionType(name));
List<ToscaFunctionParameter> functionParameterList = getParameters(customFunctionJsonNode, context);
toscaCustomFunction.setParameters(functionParameterList);
+ if (ToscaFunctionType.GET_INPUT.equals(toscaCustomFunction.getToscaFunctionType())) {
+ validateGetInput(toscaCustomFunction, context);
+ }
return toscaCustomFunction;
}
+ private ToscaFunctionType getCustomFunctionType(String name) {
+ List<Configuration.CustomToscaFunction> customFunctions =
+ ConfigurationManager.getConfigurationManager().getConfiguration().getDefaultCustomToscaFunctions();
+ if (customFunctions.isEmpty()) {
+ return ToscaFunctionType.CUSTOM;
+ }
+ Optional<Configuration.CustomToscaFunction> optionalFunc = customFunctions.stream().filter(func -> func.getName().equals(name)).findFirst();
+ if (optionalFunc.isEmpty()) {
+ return ToscaFunctionType.CUSTOM;
+ }
+ String type = optionalFunc.get().getType();
+ return ToscaFunctionType.findType(type).get();
+ }
+
+ private void validateGetInput(ToscaCustomFunction toscaCustomFunction, final DeserializationContext context) throws IOException {
+ List<ToscaFunctionParameter> functionParameterList = toscaCustomFunction.getParameters();
+ if (functionParameterList.size() != 1) {
+ throw context.instantiationException(List.class, "Custom GET_INPUT function must contain one GET_INPUT parameter");
+ }
+ ToscaFunctionParameter parameter = functionParameterList.get(0);
+ if (!ToscaFunctionType.GET_INPUT.equals(parameter.getType())) {
+ throw context.instantiationException(List.class, "Custom GET_INPUT function must contain a GET_INPUT parameter");
+ }
+ }
+
private List<ToscaFunctionParameter> getParameters(final JsonNode functionJsonNode, final DeserializationContext context) throws IOException {
final List<ToscaFunctionParameter> functionParameterList = new ArrayList<>();
final JsonNode parametersNode = functionJsonNode.get("parameters");