Refactored parsing of uses and augment statements.
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / 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.yangtools.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.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
16 import org.opendaylight.yangtools.yang.model.api.Status;
17 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
18 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
20 import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
21 import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
22 import org.opendaylight.yangtools.yang.model.util.ExtendedType;
23 import org.opendaylight.yangtools.yang.model.util.UnknownType;
24 import org.opendaylight.yangtools.yang.parser.builder.api.AbstractTypeAwareBuilder;
25 import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;
26 import org.opendaylight.yangtools.yang.parser.util.Comparators;
27 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
28
29 public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder implements TypeDefinitionBuilder {
30     private SchemaPath schemaPath;
31     private List<RangeConstraint> ranges = Collections.emptyList();
32     private List<LengthConstraint> lengths = Collections.emptyList();
33     private List<PatternConstraint> patterns = Collections.emptyList();
34     private Integer fractionDigits = null;
35
36     private String description;
37     private String reference;
38     private Status status = Status.CURRENT;
39     private String units;
40     private Object defaultValue;
41     private boolean addedByUses;
42
43     public TypeDefinitionBuilderImpl(final String moduleName, final int line, final QName qname) {
44         super(moduleName, line, qname);
45     }
46
47     @Override
48     public TypeDefinition<? extends TypeDefinition<?>> build() {
49         TypeDefinition<?> result = null;
50         ExtendedType.Builder typeBuilder = null;
51         if ((type == null || type instanceof UnknownType) && typedef == null) {
52             throw new YangParseException("Unresolved type: '" + qname.getLocalName() + "'.");
53         }
54         if (type == null || type instanceof UnknownType) {
55             type = typedef.build();
56         }
57
58         typeBuilder = new ExtendedType.Builder(qname, type, description, reference, schemaPath);
59
60         typeBuilder.status(status);
61         typeBuilder.units(units);
62         typeBuilder.defaultValue(defaultValue);
63         typeBuilder.addedByUses(addedByUses);
64
65         typeBuilder.ranges(ranges);
66         typeBuilder.lengths(lengths);
67         typeBuilder.patterns(patterns);
68         typeBuilder.fractionDigits(fractionDigits);
69
70         // UNKNOWN NODES
71         if (unknownNodes == null) {
72             unknownNodes = new ArrayList<UnknownSchemaNode>();
73             for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
74                 unknownNodes.add(b.build());
75             }
76             Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
77         }
78         typeBuilder.unknownSchemaNodes(unknownNodes);
79         result = typeBuilder.build();
80         return result;
81     }
82
83     @Override
84     public SchemaPath getPath() {
85         return schemaPath;
86     }
87
88     @Override
89     public void setPath(final SchemaPath schemaPath) {
90         this.schemaPath = schemaPath;
91     }
92
93     @Override
94     public String getDescription() {
95         return description;
96     }
97
98     @Override
99     public void setDescription(final String description) {
100         this.description = description;
101     }
102
103     @Override
104     public String getReference() {
105         return reference;
106     }
107
108     @Override
109     public void setReference(final String reference) {
110         this.reference = reference;
111     }
112
113     @Override
114     public Status getStatus() {
115         return status;
116     }
117
118     @Override
119     public void setStatus(final Status status) {
120         if (status != null) {
121             this.status = status;
122         }
123     }
124
125     @Override
126     public boolean isAddedByUses() {
127         return addedByUses;
128     }
129
130     @Override
131     public void setAddedByUses(final boolean addedByUses) {
132         this.addedByUses = addedByUses;
133     }
134
135     @Override
136     public String getUnits() {
137         return units;
138     }
139
140     @Override
141     public void setUnits(final String units) {
142         this.units = units;
143     }
144
145     @Override
146     public Object getDefaultValue() {
147         return defaultValue;
148     }
149
150     @Override
151     public void setDefaultValue(final Object defaultValue) {
152         this.defaultValue = defaultValue;
153     }
154
155     @Override
156     public List<UnknownSchemaNode> getUnknownNodes() {
157         return Collections.emptyList();
158     }
159
160     @Override
161     public List<RangeConstraint> getRanges() {
162         return ranges;
163     }
164
165     @Override
166     public void setRanges(final List<RangeConstraint> ranges) {
167         if (ranges != null) {
168             this.ranges = ranges;
169         }
170     }
171
172     @Override
173     public List<LengthConstraint> getLengths() {
174         return lengths;
175     }
176
177     @Override
178     public void setLengths(final List<LengthConstraint> lengths) {
179         if (lengths != null) {
180             this.lengths = lengths;
181         }
182     }
183
184     @Override
185     public List<PatternConstraint> getPatterns() {
186         return patterns;
187     }
188
189     @Override
190     public void setPatterns(final List<PatternConstraint> patterns) {
191         if (patterns != null) {
192             this.patterns = patterns;
193         }
194     }
195
196     @Override
197     public Integer getFractionDigits() {
198         return fractionDigits;
199     }
200
201     @Override
202     public void setFractionDigits(final Integer fractionDigits) {
203         this.fractionDigits = fractionDigits;
204     }
205
206     @Override
207     public String toString() {
208         final StringBuilder result = new StringBuilder("TypedefBuilder[" + qname.getLocalName());
209         result.append(", type=");
210         if (type == null) {
211             result.append(typedef);
212         } else {
213             result.append(type);
214         }
215         result.append("]");
216         return result.toString();
217     }
218
219 }