package edu.ualberta.med.biobank.validator.constraint.model.impl; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import edu.ualberta.med.biobank.model.Container; import edu.ualberta.med.biobank.validator.EventSourceAwareConstraintValidator; import edu.ualberta.med.biobank.validator.constraint.model.ValidContainer; public class ValidContainerValidator extends EventSourceAwareConstraintValidator<Object> implements ConstraintValidator<ValidContainer, Object> { private static final String ILLEGAL_PARENT = "{edu.ualberta.med.biobank.model.Container.ValidContainer.illegalParent}"; private static final String MISSING_PARENT = "{edu.ualberta.med.biobank.model.Container.ValidContainer.missingParent}"; @Override public void initialize(ValidContainer annotation) { } @Override public boolean isValidInEventSource(Object value, ConstraintValidatorContext context) { if (value == null) return true; if (!(value instanceof Container)) return false; context.disableDefaultConstraintViolation(); Container container = (Container) value; boolean isValid = true; isValid &= checkParent(container, context); return isValid; } private boolean checkParent(Container container, ConstraintValidatorContext context) { if (container.getContainerType().getTopLevel()) { if (container.getPosition() != null) { context.buildConstraintViolationWithTemplate(ILLEGAL_PARENT) .addNode("position") .addConstraintViolation(); return false; } } else { if (container.getPosition() == null) { context.buildConstraintViolationWithTemplate(MISSING_PARENT) .addNode("position") .addConstraintViolation(); return false; } } return true; } }