2 * Copyright (c) 2013 Cisco Systems, Inc. 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.controller.yang.parser.builder.impl;
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
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.Comparators;
27 import org.opendaylight.controller.yang.parser.util.YangParseException;
29 public final class TypeDefinitionBuilderImpl extends AbstractTypeAwareBuilder implements TypeDefinitionBuilder {
30 private SchemaPath schemaPath;
31 private List<UnknownSchemaNode> unknownNodes;
32 private final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
33 private List<RangeConstraint> ranges = Collections.emptyList();
34 private List<LengthConstraint> lengths = Collections.emptyList();
35 private List<PatternConstraint> patterns = Collections.emptyList();
36 private Integer fractionDigits = null;
38 private String description;
39 private String reference;
40 private Status status = Status.CURRENT;
42 private Object defaultValue;
43 private boolean addedByUses;
45 public TypeDefinitionBuilderImpl(final QName qname, final int line) {
49 public TypeDefinitionBuilderImpl(TypeDefinitionBuilder tdb) {
50 super(tdb.getLine(), tdb.getQName());
51 schemaPath = tdb.getPath();
54 typedef = tdb.getTypedef();
56 unknownNodes = tdb.getUnknownNodes();
57 for (UnknownSchemaNodeBuilder usnb : tdb.getUnknownNodeBuilders()) {
58 addedUnknownNodes.add(usnb);
60 ranges = tdb.getRanges();
61 lengths = tdb.getLengths();
62 patterns = tdb.getPatterns();
63 fractionDigits = tdb.getFractionDigits();
65 description = tdb.getDescription();
66 reference = tdb.getReference();
67 status = tdb.getStatus();
68 units = tdb.getUnits();
69 defaultValue = tdb.getDefaultValue();
70 addedByUses = tdb.isAddedByUses();
74 public TypeDefinition<? extends TypeDefinition<?>> build() {
75 TypeDefinition<?> result = null;
76 ExtendedType.Builder typeBuilder = null;
77 if ((type == null || type instanceof UnknownType) && typedef == null) {
78 throw new YangParseException("Unresolved type: '" + qname.getLocalName() + "'.");
80 if (type == null || type instanceof UnknownType) {
81 type = typedef.build();
84 typeBuilder = new ExtendedType.Builder(qname, type, description, reference, schemaPath);
86 typeBuilder.status(status);
87 typeBuilder.units(units);
88 typeBuilder.defaultValue(defaultValue);
89 typeBuilder.addedByUses(addedByUses);
91 typeBuilder.ranges(ranges);
92 typeBuilder.lengths(lengths);
93 typeBuilder.patterns(patterns);
94 typeBuilder.fractionDigits(fractionDigits);
97 if (unknownNodes == null) {
98 unknownNodes = new ArrayList<UnknownSchemaNode>();
99 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
100 unknownNodes.add(b.build());
102 Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
104 typeBuilder.unknownSchemaNodes(unknownNodes);
105 result = typeBuilder.build();
110 public SchemaPath getPath() {
115 public void setPath(final SchemaPath schemaPath) {
116 this.schemaPath = schemaPath;
120 public String getDescription() {
125 public void setDescription(final String description) {
126 this.description = description;
130 public String getReference() {
135 public void setReference(final String reference) {
136 this.reference = reference;
140 public Status getStatus() {
145 public void setStatus(final Status status) {
146 if (status != null) {
147 this.status = status;
152 public boolean isAddedByUses() {
157 public void setAddedByUses(final boolean addedByUses) {
158 this.addedByUses = addedByUses;
162 public String getUnits() {
167 public void setUnits(final String units) {
172 public Object getDefaultValue() {
177 public void setDefaultValue(final Object defaultValue) {
178 this.defaultValue = defaultValue;
182 public List<UnknownSchemaNode> getUnknownNodes() {
183 return Collections.emptyList();
187 public List<UnknownSchemaNodeBuilder> getUnknownNodeBuilders() {
188 return addedUnknownNodes;
192 public void addUnknownSchemaNode(final UnknownSchemaNodeBuilder unknownNode) {
193 addedUnknownNodes.add(unknownNode);
196 public void setUnknownNodes(List<UnknownSchemaNode> unknownNodes) {
197 this.unknownNodes = unknownNodes;
201 public List<RangeConstraint> getRanges() {
206 public void setRanges(final List<RangeConstraint> ranges) {
207 if (ranges != null) {
208 this.ranges = ranges;
213 public List<LengthConstraint> getLengths() {
218 public void setLengths(final List<LengthConstraint> lengths) {
219 if (lengths != null) {
220 this.lengths = lengths;
225 public List<PatternConstraint> getPatterns() {
230 public void setPatterns(final List<PatternConstraint> patterns) {
231 if (patterns != null) {
232 this.patterns = patterns;
237 public Integer getFractionDigits() {
238 return fractionDigits;
242 public void setFractionDigits(final Integer fractionDigits) {
243 this.fractionDigits = fractionDigits;
247 public String toString() {
248 final StringBuilder result = new StringBuilder("TypedefBuilder[" + qname.getLocalName());
249 result.append(", type=");
251 result.append(typedef);
256 return result.toString();