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.yangtools.yang.parser.builder.impl;
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
14 import org.opendaylight.yangtools.yang.common.QName;
15 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
16 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
17 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
18 import org.opendaylight.yangtools.yang.model.api.Status;
19 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
20 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
21 import org.opendaylight.yangtools.yang.parser.builder.api.AbstractTypeAwareBuilder;
22 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
23 import org.opendaylight.yangtools.yang.parser.util.Comparators;
24 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
26 public final class LeafSchemaNodeBuilder extends AbstractTypeAwareBuilder implements DataSchemaNodeBuilder {
27 private boolean isBuilt;
28 private final LeafSchemaNodeImpl instance;
30 private SchemaPath schemaPath;
31 // DataSchemaNode args
32 private final ConstraintsBuilder constraints;
34 public LeafSchemaNodeBuilder(final String moduleName, final int line, final QName qname, final SchemaPath schemaPath) {
35 super(moduleName, line, qname);
36 this.schemaPath = schemaPath;
37 instance = new LeafSchemaNodeImpl(qname, schemaPath);
38 constraints = new ConstraintsBuilder(moduleName, line);
41 public LeafSchemaNodeBuilder(String moduleName, int line, QName qname, SchemaPath path, LeafSchemaNode base) {
42 super(moduleName, line, qname);
43 this.schemaPath = path;
44 instance = new LeafSchemaNodeImpl(qname, path);
45 constraints = new ConstraintsBuilder(moduleName, line, base.getConstraints());
47 instance.description = base.getDescription();
48 instance.reference = base.getReference();
49 instance.status = base.getStatus();
50 instance.augmenting = base.isAugmenting();
51 instance.addedByUses = base.isAddedByUses();
52 instance.configuration = base.isConfiguration();
53 instance.constraintsDef = base.getConstraints();
54 this.type = base.getType();
55 instance.unknownNodes.addAll(base.getUnknownSchemaNodes());
56 instance.defaultStr = base.getDefault();
57 instance.unitsStr = base.getUnits();
61 public LeafSchemaNode build() {
63 instance.setConstraints(constraints.build());
65 if (type == null && typedef == null) {
66 throw new YangParseException(moduleName, line, "Failed to resolve leaf type.");
71 instance.setType(typedef.build());
73 instance.setType(type);
77 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
78 unknownNodes.add(b.build());
80 Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
81 instance.addUnknownSchemaNodes(unknownNodes);
90 public SchemaPath getPath() {
95 public void setPath(SchemaPath path) {
100 public ConstraintsBuilder getConstraints() {
105 public String getDescription() {
106 return instance.description;
110 public void setDescription(final String description) {
111 instance.description = description;
115 public String getReference() {
116 return instance.reference;
120 public void setReference(final String reference) {
121 instance.reference = reference;
125 public Status getStatus() {
126 return instance.status;
130 public void setStatus(Status status) {
131 if (status != null) {
132 instance.status = status;
137 public boolean isAugmenting() {
138 return instance.augmenting;
142 public void setAugmenting(final boolean augmenting) {
143 instance.augmenting = augmenting;
147 public boolean isAddedByUses() {
148 return instance.addedByUses;
152 public void setAddedByUses(final boolean addedByUses) {
153 instance.addedByUses = addedByUses;
157 public Boolean isConfiguration() {
158 return instance.configuration;
162 public void setConfiguration(final Boolean configuration) {
163 instance.configuration = configuration;
166 public String getDefaultStr() {
167 return instance.defaultStr;
170 public void setDefaultStr(String defaultStr) {
171 instance.defaultStr = defaultStr;
174 public String getUnits() {
175 return instance.unitsStr;
178 public void setUnits(String unitsStr) {
179 instance.unitsStr = unitsStr;
183 public int hashCode() {
184 final int prime = 31;
186 result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
191 public boolean equals(Object obj) {
198 if (getClass() != obj.getClass()) {
201 LeafSchemaNodeBuilder other = (LeafSchemaNodeBuilder) obj;
202 if (schemaPath == null) {
203 if (other.schemaPath != null) {
206 } else if (!schemaPath.equals(other.schemaPath)) {
209 if (parentBuilder == null) {
210 if (other.parentBuilder != null) {
213 } else if (!parentBuilder.equals(other.parentBuilder)) {
220 public String toString() {
221 return "leaf " + qname.getLocalName();
224 private final class LeafSchemaNodeImpl implements LeafSchemaNode {
225 private final QName qname;
226 private SchemaPath path;
227 private String description;
228 private String reference;
229 private Status status = Status.CURRENT;
230 private boolean augmenting;
231 private boolean addedByUses;
232 private boolean configuration;
233 private ConstraintDefinition constraintsDef;
234 private TypeDefinition<?> type;
235 private final List<UnknownSchemaNode> unknownNodes = new ArrayList<>();
236 private String defaultStr;
237 private String unitsStr;
239 private LeafSchemaNodeImpl(final QName qname, final SchemaPath path) {
245 public QName getQName() {
250 public SchemaPath getPath() {
255 public String getDescription() {
260 public String getReference() {
265 public Status getStatus() {
270 public boolean isAugmenting() {
275 public boolean isAddedByUses() {
280 public boolean isConfiguration() {
281 return configuration;
285 public ConstraintDefinition getConstraints() {
286 return constraintsDef;
289 private void setConstraints(ConstraintDefinition constraintsDef) {
290 this.constraintsDef = constraintsDef;
294 public TypeDefinition<?> getType() {
298 private void setType(TypeDefinition<? extends TypeDefinition<?>> type) {
303 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
304 return Collections.unmodifiableList(unknownNodes);
307 private void addUnknownSchemaNodes(List<UnknownSchemaNode> unknownNodes) {
308 if (unknownNodes != null) {
309 this.unknownNodes.addAll(unknownNodes);
314 public String getDefault() {
319 public String getUnits() {
324 public int hashCode() {
325 final int prime = 31;
327 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
328 result = prime * result + ((path == null) ? 0 : path.hashCode());
333 public boolean equals(Object obj) {
340 if (getClass() != obj.getClass()) {
343 LeafSchemaNodeImpl other = (LeafSchemaNodeImpl) obj;
345 if (other.qname != null) {
348 } else if (!qname.equals(other.qname)) {
352 if (other.path != null) {
355 } else if (!path.equals(other.path)) {
362 public String toString() {
363 StringBuilder sb = new StringBuilder(LeafSchemaNodeImpl.class.getSimpleName());
365 sb.append("qname=" + qname);
366 sb.append(", path=" + path);
368 return sb.toString();