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