2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.mdsal.binding.yang.types;
10 import com.google.common.collect.ImmutableMap;
11 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
12 import java.math.BigDecimal;
13 import java.math.BigInteger;
14 import org.opendaylight.mdsal.binding.generator.spi.TypeProvider;
15 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
16 import org.opendaylight.mdsal.binding.model.api.Restrictions;
17 import org.opendaylight.mdsal.binding.model.api.Type;
18 import org.opendaylight.mdsal.binding.model.util.Types;
19 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
20 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
21 import org.opendaylight.yangtools.yang.common.Empty;
22 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
23 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
24 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
26 public final class BaseYangTypes {
28 * <code>Type</code> representation of <code>boolean</code> YANG type.
30 public static final Type BOOLEAN_TYPE = Types.BOOLEAN;
33 * <code>Type</code> representation of <code>empty</code> YANG type.
35 public static final Type EMPTY_TYPE = Types.typeForClass(Empty.class);
37 public static final Type ENUM_TYPE = Types.typeForClass(Enum.class);
40 * <code>Type</code> representation of <code>int8</code> YANG type.
42 public static final Type INT8_TYPE = Types.typeForClass(Byte.class);
45 * <code>Type</code> representation of <code>int16</code> YANG type.
47 public static final Type INT16_TYPE = Types.typeForClass(Short.class);
50 * <code>Type</code> representation of <code>int32</code> YANG type.
52 public static final Type INT32_TYPE = Types.typeForClass(Integer.class);
55 * <code>Type</code> representation of <code>int64</code> YANG type.
57 public static final Type INT64_TYPE = Types.typeForClass(Long.class);
60 * <code>Type</code> representation of <code>string</code> YANG type.
62 public static final Type STRING_TYPE = Types.STRING;
65 * <code>Type</code> representation of <code>decimal64</code> YANG type.
67 public static final Type DECIMAL64_TYPE = Types.typeForClass(BigDecimal.class);
70 * <code>Type</code> representation of <code>uint8</code> YANG type.
72 public static final Type UINT8_TYPE = Types.typeForClass(Short.class, singleRangeRestrictions((short)0,
76 * <code>Type</code> representation of <code>uint16</code> YANG type.
78 public static final Type UINT16_TYPE = Types.typeForClass(Integer.class, singleRangeRestrictions(0, 65535));
81 * <code>Type</code> representation of <code>uint32</code> YANG type.
83 public static final Type UINT32_TYPE = Types.typeForClass(Long.class, singleRangeRestrictions(0L, 4294967295L));
86 * <code>Type</code> representation of <code>uint64</code> YANG type.
88 public static final Type UINT64_TYPE = Types.typeForClass(BigInteger.class,
89 singleRangeRestrictions(BigInteger.ZERO, new BigInteger("18446744073709551615")));
91 public static final Type UNION_TYPE = new UnionType();
94 * <code>Type</code> representation of <code>binary</code> YANG type.
96 public static final Type BINARY_TYPE = Types.typeForClass(byte[].class);
98 public static final Type INSTANCE_IDENTIFIER = Types.parameterizedTypeFor(Types
99 .typeForClass(InstanceIdentifier.class));
102 * mapping of basic built-in YANG types (keys) to JAVA {@link org.opendaylight.mdsal.binding.model.api.Type Type}.
103 * This map is filled with mapping data in static initialization block.
105 private static final ImmutableMap<String, Type> TYPE_MAP = ImmutableMap.<String, Type>builder()
106 .put("boolean", BOOLEAN_TYPE)
107 .put("empty", EMPTY_TYPE)
108 .put("enumeration", ENUM_TYPE)
109 .put("int8", INT8_TYPE)
110 .put("int16", INT16_TYPE)
111 .put("int32", INT32_TYPE)
112 .put("int64", INT64_TYPE)
113 .put("string", STRING_TYPE)
114 .put("decimal64", DECIMAL64_TYPE)
115 .put("uint8", UINT8_TYPE)
116 .put("uint16", UINT16_TYPE)
117 .put("uint32", UINT32_TYPE)
118 .put("uint64", UINT64_TYPE)
119 .put("union", UNION_TYPE)
120 .put("binary", BINARY_TYPE)
121 .put("instance-identifier", INSTANCE_IDENTIFIER)
125 * It is undesirable to create instance of this class.
127 private BaseYangTypes() {
128 throw new UnsupportedOperationException();
132 * Searches <code>Type</code> value to which is YANG <code>type</code>
136 * string with YANG type name
137 * @return java <code>Type</code> representation of <code>type</code>
139 public static Type javaTypeForYangType(final String type) {
140 return TYPE_MAP.get(type);
143 public static final TypeProvider BASE_YANG_TYPES_PROVIDER = new TypeProvider() {
145 * Searches <code>Type</code> value to which is YANG <code>type</code>
149 * type definition representation of YANG type
150 * @return java <code>Type</code> representation of <code>type</code>.
151 * If <code>type</code> isn't found then <code>null</code> is
155 public Type javaTypeForSchemaDefinitionType(final TypeDefinition<?> type, final SchemaNode parentNode,
156 final boolean lenientRelativeLeafrefs) {
158 return TYPE_MAP.get(type.getQName().getLocalName());
165 public Type javaTypeForSchemaDefinitionType(final TypeDefinition<?> type, final SchemaNode parentNode,
166 final Restrictions restrictions, final boolean lenientRelativeLeafrefs) {
167 String typeName = type.getQName().getLocalName();
170 return restrictions == null ? Types.BYTE_ARRAY : Types.typeForClass(byte[].class, restrictions);
172 return Types.typeForClass(BigDecimal.class, restrictions);
174 return Types.typeForClass(Enum.class, restrictions);
176 return Types.typeForClass(Byte.class, restrictions);
178 return Types.typeForClass(Short.class, restrictions);
180 return Types.typeForClass(Integer.class, restrictions);
182 return Types.typeForClass(Long.class, restrictions);
184 return Types.typeForClass(String.class, restrictions);
186 return Types.typeForClass(Short.class, restrictions);
188 return Types.typeForClass(Integer.class, restrictions);
190 return Types.typeForClass(Long.class, restrictions);
192 return Types.typeForClass(BigInteger.class, restrictions);
196 return javaTypeForSchemaDefinitionType(type, parentNode, lenientRelativeLeafrefs);
201 public String getTypeDefaultConstruction(final LeafSchemaNode node) {
206 public String getConstructorPropertyName(final SchemaNode node) {
211 public String getParamNameFromType(final TypeDefinition<?> type) {
212 return "_" + BindingMapping.getPropertyName(type.getQName().getLocalName());
216 private static <T extends Number & Comparable<T>> Restrictions singleRangeRestrictions(final T min, final T max) {
217 return Types.getDefaultRestrictions(min, max);
220 // FIXME: 5.0.0: remove this class
222 public static final class UnionType implements Type {
224 public String getPackageName() {
229 public String getName() {
234 public String getFullyQualifiedName() {
239 @SuppressFBWarnings("NP_NONNULL_RETURN_VIOLATION")
240 public JavaTypeName getIdentifier() {