@Override
 public String explainInvalid() {
   final StringBuilder sb = new StringBuilder();
   sb.append("One of following is invalid: ");
   for (final Validator validator : validators) {
     if (sb.length() > 0) {
       sb.append(" OR ");
     }
     sb.append(validator.explainValid());
   }
   return sb.toString();
 }
 @Override
 public ValidationResult validate(final Map<String, String> properties) {
   final DefaultValidationResult result = new DefaultValidationResult();
   for (final Validator validator : validators) {
     final ValidationResult validationResult = validator.validate(properties);
     if (!validationResult.isValid()) {
       result.add(validationResult.violations());
     }
   }
   if (result.isValid()) {
     return ValidationResult.VALID;
   }
   return result;
 }