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.common.lib.types;
20  
21  import java.time.OffsetDateTime;
22  import java.util.stream.Stream;
23  import org.apache.commons.lang3.ClassUtils;
24  
25  public enum AttrSchemaType {
26  
27      String(String.class),
28      Long(Long.class),
29      Double(Double.class),
30      Boolean(Boolean.class),
31      Date(OffsetDateTime.class),
32      Enum(Enum.class),
33      Binary(byte[].class),
34      Encrypted(byte[].class);
35  
36      private final Class<?> type;
37  
38      AttrSchemaType(final Class<?> type) {
39          this.type = type;
40      }
41  
42      public Class<?> getType() {
43          return type;
44      }
45  
46      public boolean isConversionPatternNeeded() {
47          return this == AttrSchemaType.Date
48                  || this == AttrSchemaType.Double
49                  || this == AttrSchemaType.Long;
50      }
51  
52      public static AttrSchemaType getAttrSchemaTypeByClass(final Class<?> type) {
53          return Stream.of(AttrSchemaType.values()).
54                  filter(item -> type.isArray()
55                  ? ClassUtils.isAssignable(type.getComponentType(), item.getType().getComponentType(), true)
56                  : ClassUtils.isAssignable(type, item.getType(), true)).
57                  findFirst().orElse(AttrSchemaType.String);
58      }
59  }