X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=catalog-be%2Fsrc%2Fmain%2Fjava%2Forg%2Fopenecomp%2Fsdc%2Fbe%2Fcomponents%2Fimpl%2FInterfaceDefinitionHandler.java;h=b850dfd567b4bc637cdf857116e7c385e87aa6e1;hb=133d8bbc63891a9c169b002c03be9ec27f8bc486;hp=46ec9aa244cbeae9efc1d8d55bfdee7eefaab925;hpb=035d670c792c9408493b3d729a3ac91124c2d4df;p=sdc.git 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 46ec9aa244..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; @@ -42,11 +41,13 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; +import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; import org.apache.commons.collections.MapUtils; @@ -65,7 +66,9 @@ import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition; import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition; 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; @@ -188,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; } - private 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) { @@ -273,22 +285,29 @@ public class InterfaceDefinitionHandler { final LinkedHashMap activitiesValue = (LinkedHashMap) value; if (activitiesValue.containsKey(ACTIVITIES.getElementName())) { final List milestoneActivities = (List) activitiesValue.get(ACTIVITIES.getElementName()); - for (Object activityValue : milestoneActivities) { - ActivityDataDefinition activity = new ActivityDataDefinition(); - if (activityValue instanceof Map) { - Map activityMap = (Map) activityValue; - if (activityMap.containsKey(INPUTS.getElementName())) { - activity.setInputs(handleInterfaceOperationInputs((Map) activityMap.get(INPUTS.getElementName()))); - } - if (activityMap.containsKey(TYPE.getElementName()) && activityMap.containsKey(WORKFLOW.getElementName())) { - activity.setType((String) activityMap.get(TYPE.getElementName())); - activity.setWorkflow((String) activityMap.get(WORKFLOW.getElementName())); - activities.add(activity); - } else { - return new ListDataDefinition<>(); + for (Object activity : milestoneActivities) { + if (activity instanceof Map) { + final Map activityMap = (Map) activity; + for (Entry activityValue : activityMap.entrySet()) { + if (activityValue.getValue() instanceof Map) { + ActivityDataDefinition activityDef = new ActivityDataDefinition(); + Map activityValueMap = (Map) activityValue.getValue(); + if (activityValueMap.containsKey(INPUTS.getElementName())) { + activityDef.setInputs( + handleActivityInterfaceOperationInputs((Map) activityValueMap.get(INPUTS.getElementName()))); + } + if (ActivityTypeEnum.getEnum(activityValue.getKey()).isPresent() && + activityValueMap.containsKey(WORKFLOW.getElementName())) { + activityDef.setWorkflow((String) activityValueMap.get(WORKFLOW.getElementName())); + activityDef.setType(activityValue.getKey()); + activities.add(activityDef); + } else { + return new ListDataDefinition<>(); + } + } else { + return new ListDataDefinition<>(); + } } - } else { - return new ListDataDefinition<>(); } } } else { @@ -298,6 +317,37 @@ public class InterfaceDefinitionHandler { return activities; } + private ListDataDefinition handleActivityInterfaceOperationInputs(Map activityInputs) { + final ListDataDefinition inputs = new ListDataDefinition<>(); + final String defaultType = "tosca.dataTypes.tmf.milestoneJeopardyData"; + for (final Entry interfaceInput : activityInputs.entrySet()) { + if (isMilestoneJeopardyData(interfaceInput.getValue())) { + final OperationInputDefinition operationInput = new OperationInputDefinition(); + operationInput.setUniqueId(UUID.randomUUID().toString()); + operationInput.setInputId(operationInput.getUniqueId()); + operationInput.setName(interfaceInput.getKey()); + operationInput.setType(defaultType); + operationInput.setValue(new Gson().toJson(interfaceInput.getValue())); + inputs.add(operationInput); + } + } + return inputs; + } + + private boolean isMilestoneJeopardyData(Object value) { + if (value instanceof Map) { + Set allowedKeys = new HashSet<>(); + allowedKeys.add("jeopardyType"); + allowedKeys.add("name"); + allowedKeys.add("eventType"); + allowedKeys.add("message"); + + Map valueMap = (Map) value; + return allowedKeys.containsAll(valueMap.keySet()); + } + return false; + } + private ListDataDefinition handleInterfaceOperationInputs(final Map interfaceInputs) { final ListDataDefinition inputs = new ListDataDefinition<>(); for (final Entry interfaceInput : interfaceInputs.entrySet()) { @@ -406,7 +456,7 @@ public class InterfaceDefinitionHandler { 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) {