Added support to generate interfaces from Choices and Cases.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / yang / parser / builder / impl / TypeDefinitionBuilderImpl.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. 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.controller.yang.parser.builder.impl;
9
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
13
14 import org.opendaylight.controller.yang.common.QName;
15 import org.opendaylight.controller.yang.model.api.SchemaPath;
16 import org.opendaylight.controller.yang.model.api.Status;
17 import org.opendaylight.controller.yang.model.api.TypeDefinition;
18 import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;
19 import org.opendaylight.controller.yang.model.api.type.LengthConstraint;
20 import org.opendaylight.controller.yang.model.api.type.PatternConstraint;
21 import org.opendaylight.controller.yang.model.api.type.RangeConstraint;
22 import org.opendaylight.controller.yang.model.util.ExtendedType;
23 import org.opendaylight.controller.yang.model.util.UnknownType;
24 import org.opendaylight.controller.yang.parser.builder.api.AbstractTypeAwareBuilder;
25 import org.opendaylight.controller.yang.parser.builder.api.TypeDefinitionBuilder;
26 import org.opendaylight.controller.yang.parser.util.YangParseException;
27
28 public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder implements TypeDefinitionBuilder {
29     private final int line;
30     private final QName qname;
31     private SchemaPath schemaPath;
32
33     private List<UnknownSchemaNode> unknownNodes;
34     private final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
35     private List<RangeConstraint> ranges = Collections.emptyList();
36     private List<LengthConstraint> lengths = Collections.emptyList();
37     private List<PatternConstraint> patterns = Collections.emptyList();
38     private Integer fractionDigits = null;
39
40     private String description;
41     private String reference;
42     private Status status = Status.CURRENT;
43     private String units;
44     private Object defaultValue;
45     private boolean addedByUses;
46
47     public TypeDefinitionBuilderImpl(final QName qname, final int line) {
48         this.qname = qname;
49         this.line = line;
50     }
51
52     public TypeDefinitionBuilderImpl(TypeDefinitionBuilder tdb) {
53         qname = tdb.getQName();
54         line = tdb.getLine();
55         schemaPath = tdb.getPath();
56
57         type = tdb.getType();
58         typedef = tdb.getTypedef();
59
60         unknownNodes = tdb.getUnknownNodes();
61         for (UnknownSchemaNodeBuilder usnb : tdb.getUnknownNodeBuilders()) {
62             addedUnknownNodes.add(usnb);
63         }
64         ranges = tdb.getRanges();
65         lengths = tdb.getLengths();
66         patterns = tdb.getPatterns();
67         fractionDigits = tdb.getFractionDigits();
68
69         description = tdb.getDescription();
70         reference = tdb.getReference();
71         status = tdb.getStatus();
72         units = tdb.getUnits();
73         defaultValue = tdb.getDefaultValue();
74         addedByUses = tdb.isAddedByUses();
75     }
76
77     @Override
78     public TypeDefinition<? extends TypeDefinition<?>> build() {
79         TypeDefinition<?> result = null;
80         ExtendedType.Builder typeBuilder = null;
81         if ((type == null || type instanceof UnknownType) && typedef == null) {
82             throw new YangParseException("Unresolved type: '" + qname.getLocalName() + "'.");
83         }
84         if (type == null || type instanceof UnknownType) {
85             type = typedef.build();
86         }
87
88         typeBuilder = new ExtendedType.Builder(qname, type, description, reference, schemaPath);
89
90         typeBuilder.status(status);
91         typeBuilder.units(units);
92         typeBuilder.defaultValue(defaultValue);
93         typeBuilder.addedByUses(addedByUses);
94
95         typeBuilder.ranges(ranges);
96         typeBuilder.lengths(lengths);
97         typeBuilder.patterns(patterns);
98         typeBuilder.fractionDigits(fractionDigits);
99
100         // UNKNOWN NODES
101         if (unknownNodes == null) {
102             unknownNodes = new ArrayList<UnknownSchemaNode>();
103             for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
104                 unknownNodes.add(b.build());
105             }
106         }
107         typeBuilder.unknownSchemaNodes(unknownNodes);
108         result = typeBuilder.build();
109         return result;
110     }
111
112     @Override
113     public int getLine() {
114         return line;
115     }
116
117     @Override
118     public QName getQName() {
119         return qname;
120     }
121
122     @Override
123     public SchemaPath getPath() {
124         return schemaPath;
125     }
126
127     @Override
128     public void setPath(final SchemaPath schemaPath) {
129         this.schemaPath = schemaPath;
130     }
131
132     @Override
133     public String getDescription() {
134         return description;
135     }
136
137     @Override
138     public void setDescription(final String description) {
139         this.description = description;
140     }
141
142     @Override
143     public String getReference() {
144         return reference;
145     }
146
147     @Override
148     public void setReference(final String reference) {
149         this.reference = reference;
150     }
151
152     @Override
153     public Status getStatus() {
154         return status;
155     }
156
157     @Override
158     public void setStatus(final Status status) {
159         if (status != null) {
160             this.status = status;
161         }
162     }
163
164     @Override
165     public boolean isAddedByUses() {
166         return addedByUses;
167     }
168
169     @Override
170     public void setAddedByUses(final boolean addedByUses) {
171         this.addedByUses = addedByUses;
172     }
173
174     @Override
175     public String getUnits() {
176         return units;
177     }
178
179     @Override
180     public void setUnits(final String units) {
181         this.units = units;
182     }
183
184     @Override
185     public Object getDefaultValue() {
186         return defaultValue;
187     }
188
189     @Override
190     public void setDefaultValue(final Object defaultValue) {
191         this.defaultValue = defaultValue;
192     }
193
194     @Override
195     public List<UnknownSchemaNode> getUnknownNodes() {
196         return Collections.emptyList();
197     }
198
199     @Override
200     public List<UnknownSchemaNodeBuilder> getUnknownNodeBuilders() {
201         return addedUnknownNodes;
202     }
203
204     @Override
205     public void addUnknownSchemaNode(final UnknownSchemaNodeBuilder unknownNode) {
206         addedUnknownNodes.add(unknownNode);
207     }
208
209     public void setUnknownNodes(List<UnknownSchemaNode> unknownNodes) {
210         this.unknownNodes = unknownNodes;
211     }
212
213     @Override
214     public List<RangeConstraint> getRanges() {
215         return ranges;
216     }
217
218     @Override
219     public void setRanges(final List<RangeConstraint> ranges) {
220         if (ranges != null) {
221             this.ranges = ranges;
222         }
223     }
224
225     @Override
226     public List<LengthConstraint> getLengths() {
227         return lengths;
228     }
229
230     @Override
231     public void setLengths(final List<LengthConstraint> lengths) {
232         if (lengths != null) {
233             this.lengths = lengths;
234         }
235     }
236
237     @Override
238     public List<PatternConstraint> getPatterns() {
239         return patterns;
240     }
241
242     @Override
243     public void setPatterns(final List<PatternConstraint> patterns) {
244         if (patterns != null) {
245             this.patterns = patterns;
246         }
247     }
248
249     @Override
250     public Integer getFractionDigits() {
251         return fractionDigits;
252     }
253
254     @Override
255     public void setFractionDigits(final Integer fractionDigits) {
256         this.fractionDigits = fractionDigits;
257     }
258
259     @Override
260     public String toString() {
261         final StringBuilder result = new StringBuilder("TypedefBuilder[" + qname.getLocalName());
262         result.append(", type=");
263         if (type == null) {
264             result.append(typedef);
265         } else {
266             result.append(type);
267         }
268         result.append("]");
269         return result.toString();
270     }
271
272 }