From f13f58eb867c763e6ed1c3b674fd99b1081a0664 Mon Sep 17 00:00:00 2001 From: "andre.schmid" Date: Wed, 9 Feb 2022 19:00:35 +0000 Subject: Support complex types in interface operation inputs Issue-ID: SDC-3897 Change-Id: Ieac2d74ad340de1d9f6e4cd3ac830e2ec8c35d5b Signed-off-by: andre.schmid Signed-off-by: vasraz Signed-off-by: MichaelMorris --- .../be/servlets/ComponentInterfaceOperationServlet.java | 10 +++++++--- .../sdc/be/tosca/InterfacesOperationsConverter.java | 17 ++++++----------- .../org/openecomp/sdc/be/tosca/PropertyConvertor.java | 3 +-- 3 files changed, 14 insertions(+), 16 deletions(-) (limited to 'catalog-be/src/main/java') diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ComponentInterfaceOperationServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ComponentInterfaceOperationServlet.java index 8f580382d2..cbf14da3fd 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ComponentInterfaceOperationServlet.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ComponentInterfaceOperationServlet.java @@ -60,6 +60,7 @@ import org.openecomp.sdc.be.ui.model.UiComponentDataTransfer; import org.openecomp.sdc.be.user.UserBusinessLogic; import org.openecomp.sdc.common.api.Constants; import org.openecomp.sdc.common.datastructure.Wrapper; +import org.openecomp.sdc.common.util.ValidationUtils; import org.openecomp.sdc.exception.ResponseFormat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,7 +68,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @Path("/v1/catalog/{componentType}/{componentId}/componentInstance/{componentInstanceId}/interfaceOperation") -@Tags({@Tag(name = "SDCE-2 APIs")}) +@Tag(name = "SDCE-2 APIs") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Controller @@ -104,11 +105,14 @@ public class ComponentInterfaceOperationServlet extends AbstractValidationsServl @PermissionAllowed(AafPermission.PermNames.INTERNAL_ALL_VALUE) public Response updateComponentInstanceInterfaceOperation( @Parameter(description = "valid values: resources / services", schema = @Schema(allowableValues = {ComponentTypeEnum.RESOURCE_PARAM_NAME, - ComponentTypeEnum.SERVICE_PARAM_NAME})) @PathParam("componentType") final String componentType, + ComponentTypeEnum.SERVICE_PARAM_NAME})) @PathParam("componentType") String componentType, @Parameter(description = "Component Id") @PathParam("componentId") String componentId, @Parameter(description = "Component Instance Id") @PathParam("componentInstanceId") String componentInstanceId, @Context final HttpServletRequest request, @HeaderParam(value = Constants.USER_ID_HEADER) String userId) throws IOException { LOGGER.debug(START_HANDLE_REQUEST_OF, request.getMethod(), request.getRequestURI()); + userId = ValidationUtils.sanitizeInputString(userId); + componentType = ValidationUtils.sanitizeInputString(componentType); + componentInstanceId = ValidationUtils.sanitizeInputString(componentInstanceId); LOGGER.debug(MODIFIER_ID_IS, userId); final User userModifier = componentInterfaceOperationBusinessLogic.validateUser(userId); final ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.findByParamName(componentType); @@ -118,7 +122,7 @@ public class ComponentInterfaceOperationServlet extends AbstractValidationsServl } final byte[] bytes = IOUtils.toByteArray(request.getInputStream()); if (bytes == null || bytes.length == 0) { - LOGGER.error(INTERFACE_OPERATION_CONTENT_INVALID); + LOGGER.error(INTERFACE_OPERATION_CONTENT_INVALID, "content is empty"); return buildErrorResponse(getComponentsUtils().getResponseFormat(ActionStatus.INVALID_CONTENT)); } final String data = new String(bytes); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/InterfacesOperationsConverter.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/InterfacesOperationsConverter.java index 919a5bca00..64e61699ed 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/InterfacesOperationsConverter.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/InterfacesOperationsConverter.java @@ -155,9 +155,9 @@ public class InterfacesOperationsConverter { return false; } - private static String getInputValue(String inputValue) { - String toscaInputValue = inputValue; - if (Objects.nonNull(inputValue) && inputValue.contains(ToscaFunctions.GET_OPERATION_OUTPUT.getFunctionName())) { + private static String getInputValue(final OperationInputDefinition input) { + String inputValue = input.getValue() == null ? input.getToscaDefaultValue(): input.getValue(); + if (inputValue != null && inputValue.contains(ToscaFunctions.GET_OPERATION_OUTPUT.getFunctionName())) { Gson gson = new Gson(); Map> consumptionValue = gson.fromJson(inputValue, Map.class); List mappedOutputValue = consumptionValue.get(ToscaFunctions.GET_OPERATION_OUTPUT.getFunctionName()); @@ -166,9 +166,9 @@ public class InterfacesOperationsConverter { String interfaceName = interfaceType.substring(interfaceType.lastIndexOf('.') + 1); mappedOutputValue.remove(1); mappedOutputValue.add(1, interfaceName); - toscaInputValue = gson.toJson(consumptionValue); + inputValue = gson.toJson(consumptionValue); } - return toscaInputValue; + return inputValue; } private static String getInterfaceType(Component component, String interfaceType) { @@ -384,12 +384,7 @@ public class InterfacesOperationsConverter { toscaInput.setDescription(input.getDescription()); toscaInput.setType(input.getType()); toscaInput.setRequired(input.isRequired()); - if (isServiceProxyInterface) { - String inputValue = Objects.nonNull(input.getValue()) ? getInputValue(input.getValue()) : getInputValue(input.getToscaDefaultValue()); - toscaInput.setDefaultp(propertyConvertor.convertToToscaObject(input, inputValue, dataTypes, false)); - } else { - toscaInput.setDefaultp(propertyConvertor.convertToToscaObject(input, getInputValue(input.getToscaDefaultValue()), dataTypes, false)); - } + toscaInput.setDefaultp(propertyConvertor.convertToToscaObject(input, getInputValue(input), dataTypes, false)); toscaInputs.put(input.getName(), toscaInput); } toscaOperation.setInputs(toscaInputs); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java index 89ff754933..5d3fe1bf77 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java @@ -53,7 +53,6 @@ import org.springframework.stereotype.Service; public class PropertyConvertor { private static final Logger log = Logger.getLogger(PropertyConvertor.class); - private JsonParser jsonParser = new JsonParser(); public Either convertProperties(Component component, ToscaNodeType toscaNodeType, Map dataTypes) { @@ -145,7 +144,7 @@ public class PropertyConvertor { StringReader reader = new StringReader(value); JsonReader jsonReader = new JsonReader(reader); jsonReader.setLenient(true); - jsonElement = jsonParser.parse(jsonReader); + jsonElement = JsonParser.parseReader(jsonReader); if (value.equals("")) { return value; } -- cgit 1.2.3-korg