+ private void fillToscaOperationMilestones(OperationDataDefinition operation, Map<String, DataTypeDefinition> dataTypes,
+ ToscaLifecycleOperationDefinition toscaOperation) {
+ if (Objects.isNull(operation.getMilestones()) || operation.getMilestones().isEmpty()) {
+ toscaOperation.setMilestones(null);
+ return;
+ }
+ Map<String, ToscaMilestone> toscaMilestones = new HashMap<>();
+ for (Entry<String, MilestoneDataDefinition> milestone : operation.getMilestones().entrySet()) {
+ ListDataDefinition<ActivityDataDefinition> activities = milestone.getValue().getActivities();
+ if (MilestoneTypeEnum.getEnum(milestone.getKey()).isEmpty() || activities == null || activities.isEmpty()) {
+ continue;
+ }
+ List<Map<String, ToscaActivity>> toscaActivities = new ArrayList<>();
+ for (ActivityDataDefinition activity : activities.getListToscaDataDefinition()) {
+ if (ActivityTypeEnum.getEnum(activity.getType()).isEmpty()) {
+ continue;
+ }
+ Map<String, ToscaActivity> toscaActivityMap = new HashMap<>();
+ ToscaActivity toscaActivity = new ToscaActivity();
+ toscaActivity.setWorkflow(activity.getWorkflow());
+ Map<String, Object> inputs = getToscaActivityInputs(activity.getInputs(), dataTypes);
+ if (MapUtils.isNotEmpty(inputs)) {
+ toscaActivity.setInputs(inputs);
+ }
+ toscaActivityMap.put(activity.getType(), toscaActivity);
+ toscaActivities.add(toscaActivityMap);
+ }
+ ToscaMilestone toscaMilestone = new ToscaMilestone();
+ toscaMilestone.setActivities(toscaActivities);
+ toscaMilestone.setFilters(getToscaFilters(milestone.getValue().getFilters()));
+ toscaMilestones.put(milestone.getKey(), toscaMilestone);
+ }
+ toscaOperation.setMilestones(toscaMilestones);
+ }
+
+ private List<Map<String, ToscaPropertyConstraint>> getToscaFilters(ListDataDefinition<FilterDataDefinition> filters) {
+ if (filters != null && !filters.isEmpty()) {
+ List<Map<String, ToscaPropertyConstraint>> toscaFilters = new ArrayList<>();
+ for (FilterDataDefinition filter : filters.getListToscaDataDefinition()) {
+ Optional<ConstraintType> typeOptional = ConstraintType.findByType(filter.getConstraint());
+ if (typeOptional.isEmpty()) {
+ continue;
+ }
+ ConstraintType type = typeOptional.get();
+ Object value = filter.isToscaFunction() ? filter.getToscaFunction().getJsonObjectValue() : filter.getFilterValue();
+ if (ConstraintType.EQUAL.equals(type)) {
+ EqualConstraint equalConstraint = new EqualConstraint(value);
+ ToscaPropertyConstraint prop = new ToscaPropertyConstraintEqual(equalConstraint.getEqual());
+ toscaFilters.add(Map.of(filter.getName(), prop));
+ }
+ if (ConstraintType.GREATER_THAN.equals(type)) {
+ GreaterThanConstraint greaterThanConstraint = new GreaterThanConstraint(value);
+ ToscaPropertyConstraintGreaterThan prop = new ToscaPropertyConstraintGreaterThan(greaterThanConstraint.getGreaterThan());
+ toscaFilters.add(Map.of(filter.getName(), prop));
+ }
+ if (ConstraintType.GREATER_OR_EQUAL.equals(type)) {
+ GreaterOrEqualConstraint greaterOrEqualConstraint = new GreaterOrEqualConstraint<>(value);
+ ToscaPropertyConstraintGreaterOrEqual prop =
+ new ToscaPropertyConstraintGreaterOrEqual(greaterOrEqualConstraint.getGreaterOrEqual());
+ toscaFilters.add(Map.of(filter.getName(), prop));
+ }
+ if (ConstraintType.LESS_THAN.equals(type)) {
+ LessThanConstraint lessThanConstraint = new LessThanConstraint(value);
+ ToscaPropertyConstraintLessThan prop = new ToscaPropertyConstraintLessThan(lessThanConstraint.getLessThan());
+ toscaFilters.add(Map.of(filter.getName(), prop));
+ }
+ if (ConstraintType.LESS_OR_EQUAL.equals(type)) {
+ LessOrEqualConstraint lessOrEqualConstraint = new LessOrEqualConstraint<>(value);
+ ToscaPropertyConstraintLessOrEqual prop = new ToscaPropertyConstraintLessOrEqual(lessOrEqualConstraint.getLessOrEqual());
+ toscaFilters.add(Map.of(filter.getName(), prop));
+ }
+ if (ConstraintType.IN_RANGE.equals(type)) {
+ InRangeConstraint inRangeConstraint = new InRangeConstraint((List<Object>) value);
+ toscaFilters.add(Map.of(filter.getName(), new ToscaPropertyConstraintInRange(inRangeConstraint.getInRange())));
+ }
+ if (ConstraintType.VALID_VALUES.equals(type)) {
+ ValidValuesConstraint validValues = new ValidValuesConstraint((List<Object>) value);
+ List prop = validValues.getValidValues();
+ toscaFilters.add(Map.of(filter.getName(), (new ToscaPropertyConstraintValidValues(prop))));
+ }
+ if (ConstraintType.LENGTH.equals(type)) {
+ LengthConstraint lengthConstraint = new LengthConstraint((Integer) value);
+ toscaFilters.add(Map.of(filter.getName(), (new ToscaPropertyConstraintLength(lengthConstraint.getLength()))));
+ }
+ if (ConstraintType.MIN_LENGTH.equals(type)) {
+ MinLengthConstraint minLengthConstraint = new MinLengthConstraint((Integer) value);
+ toscaFilters.add(Map.of(filter.getName(), new ToscaPropertyConstraintMinLength(minLengthConstraint.getMinLength())));
+ }
+ if (ConstraintType.MAX_LENGTH.equals(type)) {
+ MaxLengthConstraint maxLengthConstraint = new MaxLengthConstraint((Integer) value);
+ toscaFilters.add(Map.of(filter.getName(), new ToscaPropertyConstraintMaxLength(maxLengthConstraint.getMaxLength())));
+ }
+ }
+ return toscaFilters;
+ }
+ return null;
+ }
+
+ private Map<String, Object> getToscaActivityInputs(ListDataDefinition<OperationInputDefinition> inputs,
+ Map<String, DataTypeDefinition> dataTypes) {
+ if (Objects.isNull(inputs) || inputs.isEmpty()) {
+ return null;
+ }
+ Map<String, Object> toscaInputs = new HashMap<>();
+ for (OperationInputDefinition input : inputs.getListToscaDataDefinition()) {
+ Object value = propertyConvertor.convertToToscaObject(input, getInputValue(input), dataTypes, false);
+ if (ObjectUtils.isNotEmpty(value)) {
+ toscaInputs.put(input.getName(), value);
+ }
+ }
+ return toscaInputs;
+ }
+
+ private boolean operationHasAnImplementation(OperationDataDefinition operation) {
+ return operation.getImplementation() != null && StringUtils.isNotEmpty(operation.getImplementation().getArtifactName()) &&
+ !operation.getImplementation().getArtifactName().equals("''");
+ }
+