+ public static <T> T parseJsonToObject(String data, Class<T> clazz) {
+ Type constraintType = new TypeToken<PropertyConstraint>() {
+ }.getType();
+ Gson gson = new GsonBuilder().registerTypeAdapter(constraintType, new PropertyConstraintDeserialiser()).create();
+ log.trace("convert json to object. json=\n{}", data);
+ return gson.fromJson(data, clazz);
+ }
+
+ private static Set<String> getNodesFiltersToBeDeleted(final Component component, final String componentInstanceName) {
+ return component.getComponentInstances().stream().filter(ci -> isNodeFilterUsingChangedCi(ci, componentInstanceName))
+ .map(ComponentInstance::getName).collect(Collectors.toSet());
+ }
+
+ public static Set<String> getNodesFiltersToBeDeleted(final Component component, final ComponentInstance componentInstance) {
+ return getNodesFiltersToBeDeleted(component, componentInstance.getName());
+ }
+
+ private static boolean isNodeFilterUsingChangedCi(final ComponentInstance componentInstance, final String componentInstanceName) {
+ if (CollectionUtils.isEmpty(componentInstance.getDirectives())) {
+ return false;
+ }
+ if (componentInstance.getNodeFilter() == null || componentInstance.getNodeFilter().getProperties() == null
+ || componentInstance.getNodeFilter().getProperties().getListToscaDataDefinition() == null) {
+ return false;
+ }
+ return componentInstance.getNodeFilter().getProperties().getListToscaDataDefinition().stream()
+ .anyMatch(property -> isPropertyConstraintChangedByCi(property, componentInstanceName));
+ }
+
+ private static boolean isPropertyConstraintChangedByCi(
+ final RequirementNodeFilterPropertyDataDefinition requirementNodeFilterPropertyDataDefinition, final String componentInstanceName) {
+ final List<String> constraints = requirementNodeFilterPropertyDataDefinition.getConstraints();
+ if (constraints == null) {
+ return false;
+ }
+ return constraints.stream().anyMatch(constraint -> isConstraintChangedByCi(constraint, componentInstanceName));
+ }
+
+ private static boolean isConstraintChangedByCi(final String constraint, final String componentInstanceName) {
+ final UIConstraint uiConstraint = new ConstraintConvertor().convert(constraint);
+ if (uiConstraint == null || uiConstraint.getSourceType() == null) {
+ return false;
+ }
+ if (!uiConstraint.getSourceType().equals(ConstraintConvertor.PROPERTY_CONSTRAINT)) {
+ return false;
+ }
+ return uiConstraint.getSourceName().equals(componentInstanceName);
+ }
+