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.PlainAttrUniqueValue;
24 import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
25 import org.apache.syncope.core.persistence.api.entity.PlainSchema;
26
27 public class PlainAttrValueValidator extends AbstractValidator<PlainAttrValueCheck, PlainAttrValue> {
28
29 @Override
30 public boolean isValid(final PlainAttrValue value, final ConstraintValidatorContext context) {
31 context.disableDefaultConstraintViolation();
32
33 boolean isValid;
34 if (value == null) {
35 isValid = true;
36 } else {
37 int nonNullVales = 0;
38 if (value.getBooleanValue() != null) {
39 nonNullVales++;
40 }
41 if (value.getDateValue() != null) {
42 nonNullVales++;
43 }
44 if (value.getDoubleValue() != null) {
45 nonNullVales++;
46 }
47 if (value.getLongValue() != null) {
48 nonNullVales++;
49 }
50 if (value.getBinaryValue() != null) {
51 nonNullVales++;
52 }
53 if (value.getStringValue() != null) {
54 nonNullVales++;
55 }
56 isValid = nonNullVales == 1;
57
58 if (!isValid) {
59 LOG.error("More than one non-null value for " + value);
60
61 context.buildConstraintViolationWithTemplate(
62 getTemplate(EntityViolationType.MoreThanOneNonNull, "More than one non-null value found")).
63 addPropertyNode(value.getClass().getSimpleName().replaceAll("\\n", " ")).
64 addConstraintViolation();
65
66 } else if (value instanceof PlainAttrUniqueValue) {
67 PlainSchema uniqueValueSchema = ((PlainAttrUniqueValue) value).getSchema();
68 PlainSchema attrSchema = value.getAttr().getSchema();
69
70 isValid = uniqueValueSchema.equals(attrSchema);
71
72 if (!isValid) {
73 LOG.error("Unique value schema for " + value + " is " + uniqueValueSchema
74 + ", while owning attribute's schema is " + attrSchema);
75
76 context.buildConstraintViolationWithTemplate(getTemplate(EntityViolationType.InvalidPlainAttr,
77 "Unique value schema is " + uniqueValueSchema
78 + ", while owning attribute's schema is " + attrSchema)).addPropertyNode("schema").
79 addConstraintViolation();
80 }
81 }
82 }
83
84 return isValid;
85 }
86 }