+ private ListDataDefinition<FilterDataDefinition> handleMilestoneFilters(Object milestone) {
+ ListDataDefinition<FilterDataDefinition> filters = new ListDataDefinition<>();
+ if (milestone instanceof Map) {
+ final LinkedHashMap<String, Object> milestoneValue = (LinkedHashMap<String, Object>) milestone;
+ if (milestoneValue.containsKey(FILTERS.getElementName())) {
+ final List<Object> milestoneFilters = (List<Object>) milestoneValue.get(FILTERS.getElementName());
+ for (Object filtersValues : milestoneFilters) {
+ if (filtersValues instanceof Map) {
+ FilterDataDefinition filter = new FilterDataDefinition();
+ Map<String, Object> filterMap = (Map<String, Object>) filtersValues;
+
+ Optional<Entry<String, Object>> filterOptional =
+ filterMap.entrySet().stream().filter(entrySet -> entrySet.getValue() instanceof Map).findAny();
+ if (filterOptional.isEmpty()) {
+ continue;
+ }
+ Entry<String, Object> filterValue = filterOptional.get();
+ if (!(filterValue.getValue() instanceof Map)) {
+ continue;
+ }
+ Map<String, Object> valueMap = (Map<String, Object>) filterValue.getValue();
+ Optional<String> constraintTypeOptional =
+ valueMap.keySet().stream().filter(key -> ConstraintType.findByType(key).isPresent()).findAny();
+ if (constraintTypeOptional.isEmpty()) {
+ continue;
+ }
+ String constraintType = constraintTypeOptional.get();
+ filter.setName(filterValue.getKey());
+ filter.setConstraint(constraintType);
+ Object value = valueMap.get(constraintType);
+ if (value instanceof Map) {
+ Map<String, Object> valueAsMap = (Map<String, Object>) value;
+ Optional<String> toscaFunctionTypeOptional =
+ valueAsMap.keySet().stream().filter(key -> ToscaFunctionType.findType(key).isPresent()).findAny();
+ if (toscaFunctionTypeOptional.isPresent()) {
+ Optional<ToscaFunction> toscaValue = createToscaFunctionFromLegacyConstraintValue(valueAsMap);
+ if (toscaValue.isPresent()) {
+ filter.setToscaFunction(toscaValue.get());
+ }
+ }
+ }
+ filter.setFilterValue(value);
+ filters.add(filter);
+ } else {
+ return new ListDataDefinition<>();
+ }
+ }
+ } else {
+ return new ListDataDefinition<>();
+ }
+ }
+ return filters;
+ }
+