2 * Copyright (c) 2015 Pantheon Technologies s.r.o. 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.yangtools.yang.model.util.type;
10 import com.google.common.annotations.Beta;
11 import org.eclipse.jdt.annotation.NonNullByDefault;
12 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
13 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
14 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
15 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
16 import org.opendaylight.yangtools.yang.model.api.type.BooleanTypeDefinition;
17 import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition;
18 import org.opendaylight.yangtools.yang.model.api.type.EmptyTypeDefinition;
19 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
20 import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
21 import org.opendaylight.yangtools.yang.model.api.type.InstanceIdentifierTypeDefinition;
22 import org.opendaylight.yangtools.yang.model.api.type.Int16TypeDefinition;
23 import org.opendaylight.yangtools.yang.model.api.type.Int32TypeDefinition;
24 import org.opendaylight.yangtools.yang.model.api.type.Int64TypeDefinition;
25 import org.opendaylight.yangtools.yang.model.api.type.Int8TypeDefinition;
26 import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
27 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
28 import org.opendaylight.yangtools.yang.model.api.type.Uint16TypeDefinition;
29 import org.opendaylight.yangtools.yang.model.api.type.Uint32TypeDefinition;
30 import org.opendaylight.yangtools.yang.model.api.type.Uint64TypeDefinition;
31 import org.opendaylight.yangtools.yang.model.api.type.Uint8TypeDefinition;
32 import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
35 * Support for creating {@link TypeDefinition} instances defined by leaf and leaf-list statements.
39 public final class ConcreteTypes {
40 private ConcreteTypes() {
41 throw new UnsupportedOperationException();
44 public static ConcreteTypeBuilder<?> concreteTypeBuilder(final TypeDefinition<?> baseType, final SchemaPath path) {
45 if (baseType instanceof BinaryTypeDefinition) {
46 return concreteBinaryBuilder((BinaryTypeDefinition) baseType, path);
47 } else if (baseType instanceof BitsTypeDefinition) {
48 return concreteBitsBuilder((BitsTypeDefinition) baseType, path);
49 } else if (baseType instanceof BooleanTypeDefinition) {
50 return concreteBooleanBuilder((BooleanTypeDefinition) baseType, path);
51 } else if (baseType instanceof DecimalTypeDefinition) {
52 return concreteDecimalBuilder((DecimalTypeDefinition) baseType, path);
53 } else if (baseType instanceof EmptyTypeDefinition) {
54 return concreteEmptyBuilder((EmptyTypeDefinition) baseType, path);
55 } else if (baseType instanceof EnumTypeDefinition) {
56 return concreteEnumerationBuilder((EnumTypeDefinition) baseType, path);
57 } else if (baseType instanceof IdentityrefTypeDefinition) {
58 return concreteIdentityrefBuilder((IdentityrefTypeDefinition) baseType, path);
59 } else if (baseType instanceof InstanceIdentifierTypeDefinition) {
60 return concreteInstanceIdentifierBuilder((InstanceIdentifierTypeDefinition) baseType, path);
61 } else if (baseType instanceof Int8TypeDefinition) {
62 return concreteInt8Builder((Int8TypeDefinition) baseType, path);
63 } else if (baseType instanceof Int16TypeDefinition) {
64 return concreteInt16Builder((Int16TypeDefinition) baseType, path);
65 } else if (baseType instanceof Int32TypeDefinition) {
66 return concreteInt32Builder((Int32TypeDefinition) baseType, path);
67 } else if (baseType instanceof Int64TypeDefinition) {
68 return concreteInt64Builder((Int64TypeDefinition) baseType, path);
69 } else if (baseType instanceof LeafrefTypeDefinition) {
70 return concreteLeafrefBuilder((LeafrefTypeDefinition) baseType, path);
71 } else if (baseType instanceof StringTypeDefinition) {
72 return concreteStringBuilder((StringTypeDefinition) baseType, path);
73 } else if (baseType instanceof UnionTypeDefinition) {
74 return concreteUnionBuilder((UnionTypeDefinition) baseType, path);
75 } else if (baseType instanceof Uint8TypeDefinition) {
76 return concreteUint8Builder((Uint8TypeDefinition) baseType, path);
77 } else if (baseType instanceof Uint16TypeDefinition) {
78 return concreteUint16Builder((Uint16TypeDefinition) baseType, path);
79 } else if (baseType instanceof Uint32TypeDefinition) {
80 return concreteUint32Builder((Uint32TypeDefinition) baseType, path);
81 } else if (baseType instanceof Uint64TypeDefinition) {
82 return concreteUint64Builder((Uint64TypeDefinition) baseType, path);
84 throw new IllegalArgumentException("Unhandled type definition class " + baseType.getClass());
88 private static ConcreteTypeBuilder<BinaryTypeDefinition> concreteBinaryBuilder(
89 final BinaryTypeDefinition baseType, final SchemaPath path) {
90 return new ConcreteTypeBuilder<BinaryTypeDefinition>(baseType, path) {
92 public BinaryTypeDefinition buildType() {
93 return new DerivedBinaryType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
94 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
99 private static ConcreteTypeBuilder<BitsTypeDefinition> concreteBitsBuilder(final BitsTypeDefinition baseType,
100 final SchemaPath path) {
101 return new ConcreteTypeBuilder<BitsTypeDefinition>(baseType, path) {
103 public BitsTypeDefinition buildType() {
104 return new DerivedBitsType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
105 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
110 private static ConcreteTypeBuilder<BooleanTypeDefinition> concreteBooleanBuilder(
111 final BooleanTypeDefinition baseType, final SchemaPath path) {
112 return new ConcreteTypeBuilder<BooleanTypeDefinition>(baseType, path) {
114 public BooleanTypeDefinition buildType() {
115 return new DerivedBooleanType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
116 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
121 private static ConcreteTypeBuilder<DecimalTypeDefinition> concreteDecimalBuilder(
122 final DecimalTypeDefinition baseType, final SchemaPath path) {
123 return new ConcreteTypeBuilder<DecimalTypeDefinition>(baseType, path) {
125 public DecimalTypeDefinition buildType() {
126 return new DerivedDecimalType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
127 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
132 private static ConcreteTypeBuilder<EmptyTypeDefinition> concreteEmptyBuilder(final EmptyTypeDefinition baseType,
133 final SchemaPath path) {
134 return new ConcreteTypeBuilder<EmptyTypeDefinition>(baseType, path) {
136 public EmptyTypeDefinition buildType() {
137 return new DerivedEmptyType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
138 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
143 private static ConcreteTypeBuilder<EnumTypeDefinition> concreteEnumerationBuilder(
144 final EnumTypeDefinition baseType, final SchemaPath path) {
145 return new ConcreteTypeBuilder<EnumTypeDefinition>(baseType, path) {
147 public EnumTypeDefinition buildType() {
148 return new DerivedEnumerationType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
149 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
154 private static ConcreteTypeBuilder<IdentityrefTypeDefinition> concreteIdentityrefBuilder(
155 final IdentityrefTypeDefinition baseType, final SchemaPath path) {
156 return new ConcreteTypeBuilder<IdentityrefTypeDefinition>(baseType, path) {
158 public IdentityrefTypeDefinition buildType() {
159 return new DerivedIdentityrefType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
160 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
165 private static ConcreteTypeBuilder<InstanceIdentifierTypeDefinition> concreteInstanceIdentifierBuilder(
166 final InstanceIdentifierTypeDefinition baseType, final SchemaPath path) {
167 return new ConcreteTypeBuilder<InstanceIdentifierTypeDefinition>(baseType, path) {
169 public InstanceIdentifierTypeDefinition buildType() {
170 return new DerivedInstanceIdentifierType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
171 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes(), baseType.requireInstance());
176 private static ConcreteTypeBuilder<Int8TypeDefinition> concreteInt8Builder(
177 final Int8TypeDefinition baseType, final SchemaPath path) {
178 return new ConcreteTypeBuilder<Int8TypeDefinition>(baseType, path) {
180 public Int8TypeDefinition buildType() {
181 return new DerivedInt8Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
182 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
187 private static ConcreteTypeBuilder<Int16TypeDefinition> concreteInt16Builder(
188 final Int16TypeDefinition baseType, final SchemaPath path) {
189 return new ConcreteTypeBuilder<Int16TypeDefinition>(baseType, path) {
191 public Int16TypeDefinition buildType() {
192 return new DerivedInt16Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
193 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
198 private static ConcreteTypeBuilder<Int32TypeDefinition> concreteInt32Builder(
199 final Int32TypeDefinition baseType, final SchemaPath path) {
200 return new ConcreteTypeBuilder<Int32TypeDefinition>(baseType, path) {
202 public Int32TypeDefinition buildType() {
203 return new DerivedInt32Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
204 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
209 private static ConcreteTypeBuilder<Int64TypeDefinition> concreteInt64Builder(
210 final Int64TypeDefinition baseType, final SchemaPath path) {
211 return new ConcreteTypeBuilder<Int64TypeDefinition>(baseType, path) {
213 public Int64TypeDefinition buildType() {
214 return new DerivedInt64Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
215 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
220 private static ConcreteTypeBuilder<LeafrefTypeDefinition> concreteLeafrefBuilder(
221 final LeafrefTypeDefinition baseType, final SchemaPath path) {
222 return new ConcreteTypeBuilder<LeafrefTypeDefinition>(baseType, path) {
224 public LeafrefTypeDefinition buildType() {
225 return new DerivedLeafrefType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
226 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
231 private static ConcreteTypeBuilder<StringTypeDefinition> concreteStringBuilder(final StringTypeDefinition baseType,
232 final SchemaPath path) {
233 return new ConcreteTypeBuilder<StringTypeDefinition>(baseType, path) {
235 public StringTypeDefinition buildType() {
236 return new DerivedStringType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
237 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
242 private static ConcreteTypeBuilder<UnionTypeDefinition> concreteUnionBuilder(final UnionTypeDefinition baseType,
243 final SchemaPath path) {
244 return new ConcreteTypeBuilder<UnionTypeDefinition>(baseType, path) {
246 public DerivedUnionType buildType() {
247 return new DerivedUnionType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
248 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
253 private static ConcreteTypeBuilder<Uint8TypeDefinition> concreteUint8Builder(
254 final Uint8TypeDefinition baseType, final SchemaPath path) {
255 return new ConcreteTypeBuilder<Uint8TypeDefinition>(baseType, path) {
257 public Uint8TypeDefinition buildType() {
258 return new DerivedUint8Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
259 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
264 private static ConcreteTypeBuilder<Uint16TypeDefinition> concreteUint16Builder(
265 final Uint16TypeDefinition baseType, final SchemaPath path) {
266 return new ConcreteTypeBuilder<Uint16TypeDefinition>(baseType, path) {
268 public Uint16TypeDefinition buildType() {
269 return new DerivedUint16Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
270 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
275 private static ConcreteTypeBuilder<Uint32TypeDefinition> concreteUint32Builder(
276 final Uint32TypeDefinition baseType, final SchemaPath path) {
277 return new ConcreteTypeBuilder<Uint32TypeDefinition>(baseType, path) {
279 public Uint32TypeDefinition buildType() {
280 return new DerivedUint32Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
281 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
286 private static ConcreteTypeBuilder<Uint64TypeDefinition> concreteUint64Builder(
287 final Uint64TypeDefinition baseType, final SchemaPath path) {
288 return new ConcreteTypeBuilder<Uint64TypeDefinition>(baseType, path) {
290 public Uint64TypeDefinition buildType() {
291 return new DerivedUint64Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
292 getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());