1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.persistence.jpa.validation.entity;
20
21 import javax.validation.ConstraintValidatorContext;
22 import org.apache.syncope.common.lib.types.EntityViolationType;
23 import org.apache.syncope.core.persistence.api.entity.PlainAttr;
24
25 public class JPAPlainAttrValidator extends AbstractValidator<PlainAttrCheck, PlainAttr<?>> {
26
27 @Override
28 public boolean isValid(final PlainAttr<?> attr, final ConstraintValidatorContext context) {
29 context.disableDefaultConstraintViolation();
30
31 boolean isValid;
32 if (attr == null) {
33 isValid = true;
34 } else {
35 if (attr.getSchema().isUniqueConstraint()) {
36 isValid = attr.getValues().isEmpty() && attr.getUniqueValue() != null;
37 } else {
38 isValid = !attr.getValues().isEmpty() && attr.getUniqueValue() == null;
39
40 if (!attr.getSchema().isMultivalue()) {
41 isValid &= attr.getValues().size() == 1;
42 }
43 }
44
45 if (!isValid) {
46 LOG.error("Invalid values for attribute schema={}, values={}",
47 attr.getSchema().getKey(), attr.getValuesAsStrings());
48
49 context.buildConstraintViolationWithTemplate(
50 getTemplate(EntityViolationType.InvalidValueList,
51 "Invalid values " + attr.getValuesAsStrings())).
52 addPropertyNode(attr.getSchema().getKey()).addConstraintViolation();
53 }
54 }
55
56 return isValid;
57 }
58 }