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<RangeConstraint> ranges = Collections.emptyList();
32 private List<LengthConstraint> lengths = Collections.emptyList();
33 private List<PatternConstraint> patterns = Collections.emptyList();
34 private Integer fractionDigits = null;
36 private String description;
37 private String reference;
38 private Status status = Status.CURRENT;
40 private Object defaultValue;
41 private boolean addedByUses;
43 public TypeDefinitionBuilderImpl(final String moduleName, final int line, final QName qname) {
44 super(moduleName, line, qname);
47 public TypeDefinitionBuilderImpl(TypeDefinitionBuilder tdb) {
48 super(tdb.getModuleName(), tdb.getLine(), tdb.getQName());
49 schemaPath = tdb.getPath();
52 typedef = tdb.getTypedef();
54 unknownNodes = tdb.getUnknownNodes();
55 for (UnknownSchemaNodeBuilder usnb : tdb.getUnknownNodeBuilders()) {
56 addedUnknownNodes.add(usnb);
58 ranges = tdb.getRanges();
59 lengths = tdb.getLengths();
60 patterns = tdb.getPatterns();
61 fractionDigits = tdb.getFractionDigits();
63 description = tdb.getDescription();
64 reference = tdb.getReference();
65 status = tdb.getStatus();
66 units = tdb.getUnits();
67 defaultValue = tdb.getDefaultValue();
68 addedByUses = tdb.isAddedByUses();
72 public TypeDefinition<? extends TypeDefinition<?>> build() {
73 TypeDefinition<?> result = null;
74 ExtendedType.Builder typeBuilder = null;
75 if ((type == null || type instanceof UnknownType) && typedef == null) {
76 throw new YangParseException("Unresolved type: '" + qname.getLocalName() + "'.");
78 if (type == null || type instanceof UnknownType) {
79 type = typedef.build();
82 typeBuilder = new ExtendedType.Builder(qname, type, description, reference, schemaPath);
84 typeBuilder.status(status);
85 typeBuilder.units(units);
86 typeBuilder.defaultValue(defaultValue);
87 typeBuilder.addedByUses(addedByUses);
89 typeBuilder.ranges(ranges);
90 typeBuilder.lengths(lengths);
91 typeBuilder.patterns(patterns);
92 typeBuilder.fractionDigits(fractionDigits);
95 if (unknownNodes == null) {
96 unknownNodes = new ArrayList<UnknownSchemaNode>();
97 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
98 unknownNodes.add(b.build());
100 Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
102 typeBuilder.unknownSchemaNodes(unknownNodes);
103 result = typeBuilder.build();
108 public SchemaPath getPath() {
113 public void setPath(final SchemaPath schemaPath) {
114 this.schemaPath = schemaPath;
118 public String getDescription() {
123 public void setDescription(final String description) {
124 this.description = description;
128 public String getReference() {
133 public void setReference(final String reference) {
134 this.reference = reference;
138 public Status getStatus() {
143 public void setStatus(final Status status) {
144 if (status != null) {
145 this.status = status;
150 public boolean isAddedByUses() {
155 public void setAddedByUses(final boolean addedByUses) {
156 this.addedByUses = addedByUses;
160 public String getUnits() {
165 public void setUnits(final String units) {
170 public Object getDefaultValue() {
175 public void setDefaultValue(final Object defaultValue) {
176 this.defaultValue = defaultValue;
180 public List<UnknownSchemaNode> getUnknownNodes() {
181 return Collections.emptyList();
185 public List<RangeConstraint> getRanges() {
190 public void setRanges(final List<RangeConstraint> ranges) {
191 if (ranges != null) {
192 this.ranges = ranges;
197 public List<LengthConstraint> getLengths() {
202 public void setLengths(final List<LengthConstraint> lengths) {
203 if (lengths != null) {
204 this.lengths = lengths;
209 public List<PatternConstraint> getPatterns() {
214 public void setPatterns(final List<PatternConstraint> patterns) {
215 if (patterns != null) {
216 this.patterns = patterns;
221 public Integer getFractionDigits() {
222 return fractionDigits;
226 public void setFractionDigits(final Integer fractionDigits) {
227 this.fractionDigits = fractionDigits;
231 public String toString() {
232 final StringBuilder result = new StringBuilder("TypedefBuilder[" + qname.getLocalName());
233 result.append(", type=");
235 result.append(typedef);
240 return result.toString();