package alien4cloud.tosca.container.validation; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import lombok.extern.slf4j.Slf4j; import org.alien4cloud.tosca.model.definitions.PropertyConstraint; import org.alien4cloud.tosca.model.definitions.PropertyDefinition; import alien4cloud.tosca.normative.IPropertyType; import alien4cloud.tosca.normative.ToscaType; import alien4cloud.tosca.properties.constraints.exception.ConstraintValueDoNotMatchPropertyTypeException; @Slf4j public class ToscaPropertyConstraintValidator implements ConstraintValidator<ToscaPropertyConstraint, PropertyDefinition> { @Override public void initialize(ToscaPropertyConstraint constraintAnnotation) { } @Override public boolean isValid(PropertyDefinition value, ConstraintValidatorContext context) { if (value.getConstraints() == null) { return true; } IPropertyType<?> toscaType = ToscaType.fromYamlTypeName(value.getType()); if (toscaType == null) { return false; } boolean isValid = true; for (int i = 0; i < value.getConstraints().size(); i++) { PropertyConstraint constraint = value.getConstraints().get(i); try { constraint.initialize(toscaType); } catch (ConstraintValueDoNotMatchPropertyTypeException e) { log.info("Constraint definition error", e); context.buildConstraintViolationWithTemplate("CONSTRAINTS.VALIDATION.TYPE").addPropertyNode("constraints").addBeanNode().inIterable() .atIndex(i).addConstraintViolation(); isValid = false; } } return isValid; } }