View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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  }