package com.sequenceiq.cloudbreak.validation; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import com.sequenceiq.cloudbreak.api.model.InstanceGroupAdjustmentJson; import com.sequenceiq.cloudbreak.api.model.UpdateStackJson; public class UpdateStackRequestValidator implements ConstraintValidator<ValidUpdateStackRequest, UpdateStackJson> { @Override public void initialize(ValidUpdateStackRequest constraintAnnotation) { } @Override public boolean isValid(UpdateStackJson value, ConstraintValidatorContext context) { int updateResources = 0; if (value.getStatus() != null) { updateResources++; } InstanceGroupAdjustmentJson instanceGroupAdjustment = value.getInstanceGroupAdjustment(); if (instanceGroupAdjustment != null) { updateResources++; if (instanceGroupAdjustment.getWithClusterEvent() && instanceGroupAdjustment.getScalingAdjustment() < 0) { addConstraintViolation(context, "Invalid PUT request on this resource. Update event has to be upscale if you define withClusterEvent = 'true'."); return false; } } if (updateResources != 1) { addConstraintViolation(context, "Invalid PUT request on this resource. 1 update request is allowed at a time."); return false; } return true; } private void addConstraintViolation(ConstraintValidatorContext context, String message) { context.buildConstraintViolationWithTemplate(message) .addPropertyNode("status") .addConstraintViolation(); } }