/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package edu.harvard.iq.dataverse; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import org.apache.commons.lang.StringUtils; /** * * @author gdurand */ public class DatasetFieldValidator implements ConstraintValidator<ValidateDatasetFieldType, DatasetField> { @Override public void initialize(ValidateDatasetFieldType constraintAnnotation) { } @Override public boolean isValid(DatasetField value, ConstraintValidatorContext context) { context.disableDefaultConstraintViolation(); // we do this so we can have different messages depending on the different issue DatasetFieldType dsfType = value.getDatasetFieldType(); //SEK Additional logic turns off validation for templates if (isTemplateDatasetField(value)){ return true; } if (((dsfType.isPrimitive() && dsfType.isRequired()) || (dsfType.isPrimitive() && value.isRequired())) && StringUtils.isBlank(value.getValue())) { context.buildConstraintViolationWithTemplate(dsfType.getDisplayName() + " is required.").addConstraintViolation(); return false; } return true; } private boolean isTemplateDatasetField(DatasetField dsf) { if (dsf.getParentDatasetFieldCompoundValue() != null) { return isTemplateDatasetField(dsf.getParentDatasetFieldCompoundValue().getParentDatasetField()); } else { return dsf.getTemplate() != null; } } }