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 org.opendaylight.yangtools.yang.common.QName;
11 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
12 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
13 import org.opendaylight.yangtools.yang.model.api.Status;
14 import org.opendaylight.yangtools.yang.parser.builder.api.ConstraintsBuilder;
15 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
16 import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
17 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
18 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractTypeAwareBuilder;
19 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
20 import com.google.common.base.Preconditions;
21 import com.google.common.collect.ImmutableList;
23 public final class LeafSchemaNodeBuilder extends AbstractTypeAwareBuilder implements DataSchemaNodeBuilder {
24 private LeafSchemaNodeImpl instance;
25 private String defaultStr;
26 private String unitsStr;
28 private SchemaPath schemaPath;
29 private String description;
30 private String reference;
31 private Status status = Status.CURRENT;
32 // DataSchemaNode args
33 private boolean augmenting;
34 private boolean addedByUses;
35 private LeafSchemaNode originalNode;
36 private LeafSchemaNodeBuilder originalBuilder;
37 private boolean configuration;
38 private final ConstraintsBuilder constraints;
40 public LeafSchemaNodeBuilder(final String moduleName, final int line, final QName qname, final SchemaPath schemaPath) {
41 super(moduleName, line, qname);
42 this.schemaPath = Preconditions.checkNotNull(schemaPath, "Schema Path must not be null");
43 constraints = new ConstraintsBuilderImpl(moduleName, line);
46 public LeafSchemaNodeBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path, final LeafSchemaNode base) {
47 super(moduleName, line, qname);
48 this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
49 constraints = new ConstraintsBuilderImpl(moduleName, line, base.getConstraints());
51 description = base.getDescription();
52 reference = base.getReference();
53 status = base.getStatus();
54 augmenting = base.isAugmenting();
55 addedByUses = base.isAddedByUses();
57 configuration = base.isConfiguration();
58 this.type = base.getType();
59 unknownNodes.addAll(base.getUnknownSchemaNodes());
61 defaultStr = base.getDefault();
62 unitsStr = base.getUnits();
66 public LeafSchemaNode build() {
67 if (instance != null) {
71 instance = new LeafSchemaNodeImpl(qname, schemaPath);
73 instance.description = description;
74 instance.reference = reference;
75 instance.status = status;
76 instance.augmenting = augmenting;
77 instance.addedByUses = addedByUses;
78 instance.configuration = configuration;
79 instance.constraintsDef = constraints.toInstance();
80 instance.defaultStr = defaultStr;
81 instance.unitsStr = unitsStr;
83 if (type == null && typedef == null) {
84 throw new YangParseException(getModuleName(), getLine(), "Failed to resolve leaf type.");
89 instance.type = typedef.build();
95 if (originalNode == null && originalBuilder != null) {
96 originalNode = originalBuilder.build();
98 instance.original = originalNode;
101 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
102 unknownNodes.add(b.build());
104 instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
110 public SchemaPath getPath() {
115 public void setPath(final SchemaPath path) {
116 this.schemaPath = path;
120 public ConstraintsBuilder getConstraints() {
125 public String getDescription() {
130 public void setDescription(final String description) {
131 this.description = description;
135 public String getReference() {
140 public void setReference(final String reference) {
141 this.reference = reference;
145 public Status getStatus() {
150 public void setStatus(final Status status) {
151 this.status = Preconditions.checkNotNull(status, "status cannot be null");
155 public boolean isAugmenting() {
160 public void setAugmenting(final boolean augmenting) {
161 this.augmenting = augmenting;
165 public boolean isAddedByUses() {
170 public void setAddedByUses(final boolean addedByUses) {
171 this.addedByUses = addedByUses;
175 public LeafSchemaNodeBuilder getOriginal() {
176 return originalBuilder;
180 public void setOriginal(final SchemaNodeBuilder builder) {
181 Preconditions.checkArgument(builder instanceof LeafSchemaNodeBuilder, "Original of leaf cannot be " + builder);
182 this.originalBuilder = (LeafSchemaNodeBuilder) builder;
186 public boolean isConfiguration() {
187 return configuration;
191 public void setConfiguration(final boolean configuration) {
192 this.configuration = configuration;
195 public String getDefaultStr() {
199 public void setDefaultStr(final String defaultStr) {
200 this.defaultStr = defaultStr;
203 public String getUnits() {
207 public void setUnits(final String unitsStr) {
208 this.unitsStr = unitsStr;
212 public int hashCode() {
213 final int prime = 31;
215 result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
220 public boolean equals(final Object obj) {
227 if (getClass() != obj.getClass()) {
230 LeafSchemaNodeBuilder other = (LeafSchemaNodeBuilder) obj;
231 if (schemaPath == null) {
232 if (other.schemaPath != null) {
235 } else if (!schemaPath.equals(other.schemaPath)) {
238 if (getParent() == null) {
239 if (other.getParent() != null) {
242 } else if (!getParent().equals(other.getParent())) {
249 public String toString() {
250 return "leaf " + qname.getLocalName();