Merge branch 'master' of ../controller
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / type / ConcreteTypes.java
1 /*
2  * Copyright (c) 2015 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.model.util.type;
9
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;
33
34 /**
35  * Support for creating {@link TypeDefinition} instances defined by leaf and leaf-list statements.
36  */
37 @Beta
38 @NonNullByDefault
39 public final class ConcreteTypes {
40     private ConcreteTypes() {
41         throw new UnsupportedOperationException();
42     }
43
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);
83         } else {
84             throw new IllegalArgumentException("Unhandled type definition class " + baseType.getClass());
85         }
86     }
87
88     private static ConcreteTypeBuilder<BinaryTypeDefinition> concreteBinaryBuilder(
89             final BinaryTypeDefinition baseType, final SchemaPath path) {
90         return new ConcreteTypeBuilder<BinaryTypeDefinition>(baseType, path) {
91             @Override
92             public BinaryTypeDefinition buildType() {
93                 return new DerivedBinaryType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
94                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
95             }
96         };
97     }
98
99     private static ConcreteTypeBuilder<BitsTypeDefinition> concreteBitsBuilder(final BitsTypeDefinition baseType,
100             final SchemaPath path) {
101         return new ConcreteTypeBuilder<BitsTypeDefinition>(baseType, path) {
102             @Override
103             public BitsTypeDefinition buildType() {
104                 return new DerivedBitsType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
105                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
106             }
107         };
108     }
109
110     private static ConcreteTypeBuilder<BooleanTypeDefinition> concreteBooleanBuilder(
111             final BooleanTypeDefinition baseType, final SchemaPath path) {
112         return new ConcreteTypeBuilder<BooleanTypeDefinition>(baseType, path) {
113             @Override
114             public BooleanTypeDefinition buildType() {
115                 return new DerivedBooleanType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
116                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
117             }
118         };
119     }
120
121     private static ConcreteTypeBuilder<DecimalTypeDefinition> concreteDecimalBuilder(
122             final DecimalTypeDefinition baseType, final SchemaPath path) {
123         return new ConcreteTypeBuilder<DecimalTypeDefinition>(baseType, path) {
124             @Override
125             public DecimalTypeDefinition buildType() {
126                 return new DerivedDecimalType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
127                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
128             }
129         };
130     }
131
132     private static ConcreteTypeBuilder<EmptyTypeDefinition> concreteEmptyBuilder(final EmptyTypeDefinition baseType,
133             final SchemaPath path) {
134         return new ConcreteTypeBuilder<EmptyTypeDefinition>(baseType, path) {
135             @Override
136             public EmptyTypeDefinition buildType() {
137                 return new DerivedEmptyType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
138                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
139             }
140         };
141     }
142
143     private static ConcreteTypeBuilder<EnumTypeDefinition> concreteEnumerationBuilder(
144             final EnumTypeDefinition baseType, final SchemaPath path) {
145         return new ConcreteTypeBuilder<EnumTypeDefinition>(baseType, path) {
146             @Override
147             public EnumTypeDefinition buildType() {
148                 return new DerivedEnumerationType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
149                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
150             }
151         };
152     }
153
154     private static ConcreteTypeBuilder<IdentityrefTypeDefinition> concreteIdentityrefBuilder(
155             final IdentityrefTypeDefinition baseType, final SchemaPath path) {
156         return new ConcreteTypeBuilder<IdentityrefTypeDefinition>(baseType, path) {
157             @Override
158             public IdentityrefTypeDefinition buildType() {
159                 return new DerivedIdentityrefType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
160                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
161             }
162         };
163     }
164
165     private static ConcreteTypeBuilder<InstanceIdentifierTypeDefinition> concreteInstanceIdentifierBuilder(
166             final InstanceIdentifierTypeDefinition baseType, final SchemaPath path) {
167         return new ConcreteTypeBuilder<InstanceIdentifierTypeDefinition>(baseType, path) {
168             @Override
169             public InstanceIdentifierTypeDefinition buildType() {
170                 return new DerivedInstanceIdentifierType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
171                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes(), baseType.requireInstance());
172             }
173         };
174     }
175
176     private static ConcreteTypeBuilder<Int8TypeDefinition> concreteInt8Builder(
177             final Int8TypeDefinition baseType, final SchemaPath path) {
178         return new ConcreteTypeBuilder<Int8TypeDefinition>(baseType, path) {
179             @Override
180             public Int8TypeDefinition buildType() {
181                 return new DerivedInt8Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
182                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
183             }
184         };
185     }
186
187     private static ConcreteTypeBuilder<Int16TypeDefinition> concreteInt16Builder(
188             final Int16TypeDefinition baseType, final SchemaPath path) {
189         return new ConcreteTypeBuilder<Int16TypeDefinition>(baseType, path) {
190             @Override
191             public Int16TypeDefinition buildType() {
192                 return new DerivedInt16Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
193                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
194             }
195         };
196     }
197
198     private static ConcreteTypeBuilder<Int32TypeDefinition> concreteInt32Builder(
199             final Int32TypeDefinition baseType, final SchemaPath path) {
200         return new ConcreteTypeBuilder<Int32TypeDefinition>(baseType, path) {
201             @Override
202             public Int32TypeDefinition buildType() {
203                 return new DerivedInt32Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
204                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
205             }
206         };
207     }
208
209     private static ConcreteTypeBuilder<Int64TypeDefinition> concreteInt64Builder(
210             final Int64TypeDefinition baseType, final SchemaPath path) {
211         return new ConcreteTypeBuilder<Int64TypeDefinition>(baseType, path) {
212             @Override
213             public Int64TypeDefinition buildType() {
214                 return new DerivedInt64Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
215                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
216             }
217         };
218     }
219
220     private static ConcreteTypeBuilder<LeafrefTypeDefinition> concreteLeafrefBuilder(
221             final LeafrefTypeDefinition baseType, final SchemaPath path) {
222         return new ConcreteTypeBuilder<LeafrefTypeDefinition>(baseType, path) {
223             @Override
224             public LeafrefTypeDefinition buildType() {
225                 return new DerivedLeafrefType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
226                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
227             }
228         };
229     }
230
231     private static ConcreteTypeBuilder<StringTypeDefinition> concreteStringBuilder(final StringTypeDefinition baseType,
232             final SchemaPath path) {
233         return new ConcreteTypeBuilder<StringTypeDefinition>(baseType, path) {
234             @Override
235             public StringTypeDefinition buildType() {
236                 return new DerivedStringType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
237                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
238             }
239         };
240     }
241
242     private static ConcreteTypeBuilder<UnionTypeDefinition> concreteUnionBuilder(final UnionTypeDefinition baseType,
243             final SchemaPath path) {
244         return new ConcreteTypeBuilder<UnionTypeDefinition>(baseType, path) {
245             @Override
246             public DerivedUnionType buildType() {
247                 return new DerivedUnionType(getBaseType(), getPath(), getDefaultValue(), getDescription(),
248                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
249             }
250         };
251     }
252
253     private static ConcreteTypeBuilder<Uint8TypeDefinition> concreteUint8Builder(
254             final Uint8TypeDefinition baseType, final SchemaPath path) {
255         return new ConcreteTypeBuilder<Uint8TypeDefinition>(baseType, path) {
256             @Override
257             public Uint8TypeDefinition buildType() {
258                 return new DerivedUint8Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
259                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
260             }
261         };
262     }
263
264     private static ConcreteTypeBuilder<Uint16TypeDefinition> concreteUint16Builder(
265             final Uint16TypeDefinition baseType, final SchemaPath path) {
266         return new ConcreteTypeBuilder<Uint16TypeDefinition>(baseType, path) {
267             @Override
268             public Uint16TypeDefinition buildType() {
269                 return new DerivedUint16Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
270                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
271             }
272         };
273     }
274
275     private static ConcreteTypeBuilder<Uint32TypeDefinition> concreteUint32Builder(
276             final Uint32TypeDefinition baseType, final SchemaPath path) {
277         return new ConcreteTypeBuilder<Uint32TypeDefinition>(baseType, path) {
278             @Override
279             public Uint32TypeDefinition buildType() {
280                 return new DerivedUint32Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
281                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
282             }
283         };
284     }
285
286     private static ConcreteTypeBuilder<Uint64TypeDefinition> concreteUint64Builder(
287             final Uint64TypeDefinition baseType, final SchemaPath path) {
288         return new ConcreteTypeBuilder<Uint64TypeDefinition>(baseType, path) {
289             @Override
290             public Uint64TypeDefinition buildType() {
291                 return new DerivedUint64Type(getBaseType(), getPath(), getDefaultValue(), getDescription(),
292                         getReference(), getStatus(), getUnits(), getUnknownSchemaNodes());
293             }
294         };
295     }
296 }