From 133d8bbc63891a9c169b002c03be9ec27f8bc486 Mon Sep 17 00:00:00 2001 From: JvD_Ericsson Date: Mon, 23 Oct 2023 16:50:37 +0100 Subject: [PATCH] Milestone updates Signed-off-by: JvD_Ericsson Change-Id: I43c91fbeb476acea8a8c05c249dcfb01618ddb7b Issue-ID: SDC-4666 --- .../csar/YamlTemplateParsingHandler.java | 26 +++--- .../impl/InterfaceDefinitionHandler.java | 44 ++++++---- .../be/tosca/InterfacesOperationsConverter.java | 5 +- .../model/ToscaLifecycleOperationDefinition.java | 9 ++ .../impl/InterfaceDefinitionHandlerTest.java | 2 +- .../tosca/InterfacesOperationsConverterTest.java | 8 +- .../interfaceDefinition-legacy.yaml | 95 +++++++++++----------- .../interfaceDefinition-tosca1.3.yaml | 37 ++++----- ...terfaceDefinitionInvalidMilestone-tosca1.3.yaml | 7 +- .../activities-list/activities-list.component.html | 6 +- .../interface-operation-handler.component.html | 2 +- 11 files changed, 129 insertions(+), 112 deletions(-) diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandler.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandler.java index a5927a5b45..0314f97781 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandler.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/csar/YamlTemplateParsingHandler.java @@ -45,7 +45,6 @@ import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.INPUTS; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.INTERFACES; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.IS_PASSWORD; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.MEMBERS; -import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.MILESTONES; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.NODE; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.NODE_TEMPLATES; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.NODE_TYPE; @@ -98,13 +97,10 @@ import org.openecomp.sdc.be.components.utils.PropertiesUtils; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao; -import org.openecomp.sdc.be.datatypes.elements.ActivityDataDefinition; import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition; import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition; -import org.openecomp.sdc.be.datatypes.elements.FilterDataDefinition; import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition; import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition; -import org.openecomp.sdc.be.datatypes.elements.MilestoneDataDefinition; import org.openecomp.sdc.be.datatypes.elements.OperationDataDefinition; import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition; import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType; @@ -114,9 +110,9 @@ import org.openecomp.sdc.be.datatypes.elements.SubPropertyToscaFunction; import org.openecomp.sdc.be.datatypes.elements.SubstitutionFilterPropertyDataDefinition; import org.openecomp.sdc.be.datatypes.elements.ToscaFunction; import org.openecomp.sdc.be.datatypes.elements.ToscaFunctionType; -import org.openecomp.sdc.be.datatypes.enums.ActivityTypeEnum; import org.openecomp.sdc.be.datatypes.enums.ConstraintType; import org.openecomp.sdc.be.datatypes.enums.FilterValueType; +import org.openecomp.sdc.be.datatypes.enums.MilestoneTypeEnum; import org.openecomp.sdc.be.datatypes.enums.PropertyFilterTargetType; import org.openecomp.sdc.be.model.CapabilityDefinition; import org.openecomp.sdc.be.model.Component; @@ -969,7 +965,7 @@ public class YamlTemplateParsingHandler { if (nodeTemplateJsonMap.containsKey(TypeUtils.ToscaTagNamesEnum.INSTANCE_COUNT.getElementName())) { Object instanceCount = nodeTemplateJsonMap.get(TypeUtils.ToscaTagNamesEnum.INSTANCE_COUNT.getElementName()); if (instanceCount instanceof Map) { - String instanceCountAsString = "{get_input:" + (String)((Map)instanceCount).get("get_input") + "}"; + String instanceCountAsString = "{get_input:" + (String) ((Map) instanceCount).get("get_input") + "}"; nodeTemplateInfo.setInstanceCount(instanceCountAsString); } else { nodeTemplateInfo.setInstanceCount(instanceCount.toString()); @@ -1303,9 +1299,19 @@ public class YamlTemplateParsingHandler { final Map interfaceInputs = (Map) operationValue.get(INPUTS.getElementName()); operationDef.setInputs(handleInterfaceOperationInputs(interfaceInputs)); } - if (operationValue.containsKey(MILESTONES.getElementName())) { - final Map interfaceMilestones = (Map) operationValue.get(MILESTONES.getElementName()); - operationDef.setMilestones(interfaceDefinitionHandler.handleInterfaceOperationMilestones(interfaceMilestones)); + for (MilestoneTypeEnum milestone : MilestoneTypeEnum.values()) { + String milestoneType = milestone.getValue(); + if (operationValue.containsKey(milestoneType)) { + final Map interfaceMilestones = (Map) operationValue.get(milestoneType); + if (operationDef.getMilestones() == null || operationDef.getMilestones().isEmpty()) { + operationDef.setMilestones(new HashMap<>()); + operationDef.getMilestones().put(milestoneType, + interfaceDefinitionHandler.handleInterfaceOperationMilestones(interfaceMilestones, milestoneType)); + continue; + } + operationDef.getMilestones() + .put(milestoneType, interfaceDefinitionHandler.handleInterfaceOperationMilestones(interfaceMilestones, milestoneType)); + } } operations.put(operationEntry.getKey(), operationDef); } @@ -1415,7 +1421,7 @@ public class YamlTemplateParsingHandler { if (operationDefinitionMap.get(IMPLEMENTATION.getElementName()) instanceof Map && ((Map) operationDefinitionMap.get(IMPLEMENTATION.getElementName())).containsKey("timeout")) { final Object timeOut = ((Map) operationDefinitionMap.get(IMPLEMENTATION.getElementName())).get("timeout"); - artifactDataDefinition.setTimeout((Integer)timeOut); + artifactDataDefinition.setTimeout((Integer) timeOut); } if (operationDefinitionMap.get(IMPLEMENTATION.getElementName()) instanceof String) { diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/InterfaceDefinitionHandler.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/InterfaceDefinitionHandler.java index 8d713c48b0..b850dfd567 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/InterfaceDefinitionHandler.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/InterfaceDefinitionHandler.java @@ -27,7 +27,6 @@ import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.DESCRIPTION import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.FILTERS; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.IMPLEMENTATION; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.INPUTS; -import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.MILESTONES; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.NOTIFICATIONS; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.OPERATIONS; import static org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum.REQUIRED; @@ -47,7 +46,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.UUID; @@ -70,6 +68,7 @@ import org.openecomp.sdc.be.datatypes.elements.ToscaFunction; import org.openecomp.sdc.be.datatypes.elements.ToscaFunctionType; import org.openecomp.sdc.be.datatypes.enums.ActivityTypeEnum; import org.openecomp.sdc.be.datatypes.enums.ConstraintType; +import org.openecomp.sdc.be.datatypes.enums.MilestoneTypeEnum; import org.openecomp.sdc.be.model.InputDefinition; import org.openecomp.sdc.be.model.InterfaceDefinition; import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder; @@ -192,29 +191,38 @@ public class InterfaceDefinitionHandler { final Map interfaceInputs = (Map) operationDefinitionMap.get(INPUTS.getElementName()); operation.setInputs(handleInterfaceOperationInputs(interfaceInputs)); } - if (operationDefinitionMap.containsKey(MILESTONES.getElementName())) { - final Map interfaceMilestones = (Map) operationDefinitionMap.get(MILESTONES.getElementName()); - operation.setMilestones(handleInterfaceOperationMilestones(interfaceMilestones)); + for (MilestoneTypeEnum milestone : MilestoneTypeEnum.values()) { + String milestoneType = milestone.getValue(); + if (operationDefinitionMap.containsKey(milestone.getValue())) { + final Map interfaceMilestones = (Map) operationDefinitionMap.get(milestoneType); + if (operation.getMilestones() == null || operation.getMilestones().isEmpty()) { + operation.setMilestones(new HashMap<>()); + operation.getMilestones().put(milestoneType, handleInterfaceOperationMilestones(interfaceMilestones, milestoneType)); + continue; + } + operation.getMilestones().put(milestoneType, handleInterfaceOperationMilestones(interfaceMilestones, milestoneType)); + } } return operation; } - public Map handleInterfaceOperationMilestones(final Map interfaceMilestones) { - final Map milestones = new HashMap<>(); - for (final Entry interfaceInput : interfaceMilestones.entrySet()) { - final MilestoneDataDefinition operationMilestone = new MilestoneDataDefinition(); - ListDataDefinition activities = handleMilestoneActivities(interfaceInput.getValue()); - if (activities.isEmpty()) { - throw new ByActionStatusComponentException(ActionStatus.INVALID_OPERATION_MILESTONE, interfaceInput.getKey()); - } - ListDataDefinition filters = handleMilestoneFilters(interfaceInput.getValue()); + public MilestoneDataDefinition handleInterfaceOperationMilestones(final Map interfaceMilestones, String key) { + final MilestoneDataDefinition operationMilestone = new MilestoneDataDefinition(); + if (interfaceMilestones != null && !interfaceMilestones.containsKey(ACTIVITIES.getElementName())) { + throw new ByActionStatusComponentException(ActionStatus.INVALID_OPERATION_MILESTONE, key); + } + ListDataDefinition activities = handleMilestoneActivities(interfaceMilestones); + if (activities.isEmpty()) { + throw new ByActionStatusComponentException(ActionStatus.INVALID_OPERATION_MILESTONE, key); + } + if (interfaceMilestones.containsKey(FILTERS.getElementName())) { + ListDataDefinition filters = handleMilestoneFilters(interfaceMilestones); if (!filters.isEmpty()) { operationMilestone.setFilters(filters); } - operationMilestone.setActivities(activities); - milestones.put(interfaceInput.getKey(), operationMilestone); } - return milestones; + operationMilestone.setActivities(activities); + return operationMilestone; } private ListDataDefinition handleMilestoneFilters(Object milestone) { @@ -325,7 +333,7 @@ public class InterfaceDefinitionHandler { } return inputs; } - + private boolean isMilestoneJeopardyData(Object value) { if (value instanceof Map) { Set allowedKeys = new HashSet<>(); 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 97657f06bf..57c48f53de 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 @@ -67,7 +67,6 @@ import org.openecomp.sdc.be.model.tosca.constraints.LessOrEqualConstraint; import org.openecomp.sdc.be.model.tosca.constraints.LessThanConstraint; import org.openecomp.sdc.be.model.tosca.constraints.MaxLengthConstraint; import org.openecomp.sdc.be.model.tosca.constraints.MinLengthConstraint; -import org.openecomp.sdc.be.model.tosca.constraints.PatternConstraint; import org.openecomp.sdc.be.model.tosca.constraints.ValidValuesConstraint; import org.openecomp.sdc.be.tosca.PropertyConvertor.PropertyType; import org.openecomp.sdc.be.tosca.model.ToscaActivity; @@ -92,7 +91,6 @@ import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintLessOrEqual; import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintLessThan; import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintMaxLength; import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintMinLength; -import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintPattern; import org.openecomp.sdc.be.tosca.model.ToscaPropertyConstraintValidValues; import org.openecomp.sdc.be.tosca.utils.OperationArtifactUtil; import org.openecomp.sdc.be.utils.TypeUtils.ToscaTagNamesEnum; @@ -489,7 +487,8 @@ public class InterfacesOperationsConverter { } else { if (toscaInterfaceOperationImplementation.getTimeout() != null) { final ToscaArtifactDefinition toscaArtifactDefinition = new ToscaArtifactDefinition(); - toscaArtifactDefinition.setFile(StringUtils.isBlank(operationArtifactPath) || "null".equals(operationArtifactPath) ? null : operationArtifactPath); + toscaArtifactDefinition.setFile( + StringUtils.isBlank(operationArtifactPath) || "null".equals(operationArtifactPath) ? null : operationArtifactPath); toscaInterfaceOperationImplementation.setPrimary(toscaArtifactDefinition); toscaOperation.setImplementation(toscaInterfaceOperationImplementation); } else { diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaLifecycleOperationDefinition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaLifecycleOperationDefinition.java index 53aca457a1..e4b55fce3e 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaLifecycleOperationDefinition.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/tosca/model/ToscaLifecycleOperationDefinition.java @@ -13,8 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.openecomp.sdc.be.tosca.model; +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.Map; import lombok.Data; @@ -28,6 +31,12 @@ public class ToscaLifecycleOperationDefinition { private String description; private Object implementation; private Map inputs; + @JsonIgnore private Map milestones; + @JsonAnyGetter + public Map getMilestonesMap() { + return milestones; + } + } diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/InterfaceDefinitionHandlerTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/InterfaceDefinitionHandlerTest.java index 800fbc2082..b57ae5a00c 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/InterfaceDefinitionHandlerTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/InterfaceDefinitionHandlerTest.java @@ -129,7 +129,7 @@ class InterfaceDefinitionHandlerTest { assertThrows(ByActionStatusComponentException.class, () -> interfaceDefinitionHandler.create(load, StringUtils.EMPTY)); assertEquals(ActionStatus.INVALID_OPERATION_MILESTONE, actualException.getActionStatus()); assertEquals(1, actualException.getParams().length); - assertEquals("on_failure", actualException.getParams()[0]); + assertEquals("on_success", actualException.getParams()[0]); } private void assertInterfaceDefinition(final InterfaceDefinition actualInterfaceDefinition) { diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/InterfacesOperationsConverterTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/InterfacesOperationsConverterTest.java index 7e4b4c28e2..5afd520811 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/InterfacesOperationsConverterTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/tosca/InterfacesOperationsConverterTest.java @@ -661,10 +661,8 @@ class InterfacesOperationsConverterTest { Map resource = (Map) resourceName; assertTrue(resource.containsKey("name_for_op_0")); Map operation0 = (Map) resource.get("name_for_op_0"); - assertTrue(operation0.containsKey("milestones")); - Map operation0Milestones = (Map) operation0.get("milestones"); - assertTrue(operation0Milestones.containsKey(MilestoneTypeEnum.ON_ENTRY.getValue())); - Map milestone = (Map) operation0Milestones.get(MilestoneTypeEnum.ON_ENTRY.getValue()); + assertTrue(operation0.containsKey(MilestoneTypeEnum.ON_ENTRY.getValue())); + Map milestone = (Map) operation0.get(MilestoneTypeEnum.ON_ENTRY.getValue()); assertTrue(milestone.containsKey("activities")); List> activities = (List>) milestone.get("activities"); assertEquals(1, activities.size()); @@ -676,7 +674,7 @@ class InterfacesOperationsConverterTest { assertEquals("workflow1", activityVariables.get("workflow")); assertTrue(activityVariables.containsKey("inputs")); assertTrue(activityVariables.get("inputs") instanceof Map); - Map inputs = (Map) activityVariables.get("inputs"); + Map inputs = (Map) activityVariables.get("inputs"); assertNotNull(inputs); assertTrue(inputs.containsKey("stringName")); assertTrue(inputs.get("stringName") instanceof String); diff --git a/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinition-legacy.yaml b/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinition-legacy.yaml index 108c43f547..2d13fb8f5e 100644 --- a/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinition-legacy.yaml +++ b/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinition-legacy.yaml @@ -46,54 +46,53 @@ start: service_restoration_sla: service_restoration_sla_value battery_backup: true partner_priorty_assist: false - milestones: - on_failure: - activities: - - delegate: - workflow: workflow1 - - delegate: - workflow: workflow2 - on_success: - activities: - - delegate: - workflow: workflow1 - - delegate: - workflow: workflow2 - inputs: - string: - testString - complex: - jeopardyType: test - name: name - eventType: type - message: message - filters: - - my_attribute: - equal: - get_attribute: - - SELF - - role - - my_attribute1: - greaterThan: my_other_value - - my_attribute2: - inRange: - - test1 - - test99 - - my_attribute3: - validValues: - - test1 - - test2 - - test3 - - my_attribute4: - length: 12 - - my_attribute5: - minLength: 4 - on_timeout: - activities: - - delegate: - workflow: workflow1 - - delegate: - workflow: workflow2 + on_failure: + activities: + - delegate: + workflow: workflow1 + - delegate: + workflow: workflow2 + on_success: + activities: + - delegate: + workflow: workflow1 + - delegate: + workflow: workflow2 + inputs: + string: + testString + complex: + jeopardyType: test + name: name + eventType: type + message: message + filters: + - my_attribute: + equal: + get_attribute: + - SELF + - role + - my_attribute1: + greaterThan: my_other_value + - my_attribute2: + inRange: + - test1 + - test99 + - my_attribute3: + validValues: + - test1 + - test2 + - test3 + - my_attribute4: + length: 12 + - my_attribute5: + minLength: 4 + on_timeout: + activities: + - delegate: + workflow: workflow1 + - delegate: + workflow: workflow2 stop: implementation: "camunda/executeAction" inputs: diff --git a/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinition-tosca1.3.yaml b/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinition-tosca1.3.yaml index 0eb1db33a9..2b3e28c721 100644 --- a/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinition-tosca1.3.yaml +++ b/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinition-tosca1.3.yaml @@ -41,25 +41,24 @@ operations: service_restoration_sla: service_restoration_sla_value battery_backup: true partner_priorty_assist: false - milestones: - on_failure: - activities: - - delegate: - workflow: workflow1 - - delegate: - workflow: workflow2 - on_success: - activities: - - delegate: - workflow: workflow1 - - delegate: - workflow: workflow2 - on_timeout: - activities: - - delegate: - workflow: workflow1 - - delegate: - workflow: workflow2 + on_failure: + activities: + - delegate: + workflow: workflow1 + - delegate: + workflow: workflow2 + on_success: + activities: + - delegate: + workflow: workflow1 + - delegate: + workflow: workflow2 + on_timeout: + activities: + - delegate: + workflow: workflow1 + - delegate: + workflow: workflow2 stop: implementation: "camunda/executeAction" inputs: diff --git a/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinitionInvalidMilestone-tosca1.3.yaml b/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinitionInvalidMilestone-tosca1.3.yaml index 4e3c556cb8..c6a297b4ae 100644 --- a/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinitionInvalidMilestone-tosca1.3.yaml +++ b/catalog-be/src/test/resources/interfaceDefinition/interfaceDefinitionInvalidMilestone-tosca1.3.yaml @@ -11,7 +11,6 @@ type: tosca.interfaces.node.lifecycle.Standard operations: start: implementation: "camunda/executeAction" - milestones: - on_failure: - on_success: - on_timeout: \ No newline at end of file + on_failure: + on_success: + on_timeout: \ No newline at end of file diff --git a/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/activities-list/activities-list.component.html b/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/activities-list/activities-list.component.html index ce8eb2f51d..7c045cafe8 100644 --- a/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/activities-list/activities-list.component.html +++ b/catalog-ui/src/app/ng2/pages/composition/interface-operatons/operation-creator/activities-list/activities-list.component.html @@ -26,7 +26,7 @@
- +
- +
-- 2.16.6