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.Collections;
11 import java.util.List;
13 import org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.model.api.ConstraintDefinition;
15 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
16 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
17 import org.opendaylight.yangtools.yang.model.api.Status;
18 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
19 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
20 import org.opendaylight.yangtools.yang.model.api.YangNode;
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;
25 public final class LeafListSchemaNodeBuilder extends AbstractTypeAwareBuilder implements DataSchemaNodeBuilder {
26 private boolean isBuilt;
27 private final LeafListSchemaNodeImpl instance;
29 private SchemaPath schemaPath;
30 private String description;
31 private String reference;
32 private Status status = Status.CURRENT;
33 // DataSchemaNode args
34 private boolean augmenting;
35 private boolean addedByUses;
36 private Boolean configuration;
37 private final ConstraintsBuilder constraints;
38 // LeafListSchemaNode args
39 private boolean userOrdered;
41 public LeafListSchemaNodeBuilder(final String moduleName, final int line, final QName qname,
42 final SchemaPath schemaPath) {
43 super(moduleName, line, qname);
44 this.schemaPath = schemaPath;
45 instance = new LeafListSchemaNodeImpl(qname);
46 constraints = new ConstraintsBuilder(moduleName, line);
50 public LeafListSchemaNode build(YangNode parent) {
52 instance.setParent(parent);
53 instance.setConstraints(constraints.build());
54 instance.setPath(schemaPath);
55 instance.setDescription(description);
56 instance.setReference(reference);
57 instance.setStatus(status);
58 instance.setAugmenting(augmenting);
59 instance.setAddedByUses(addedByUses);
60 instance.setConfiguration(configuration);
61 instance.setUserOrdered(userOrdered);
64 instance.setType(typedef.build(instance));
66 instance.setType(type);
70 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
71 unknownNodes.add(b.build(instance));
73 Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
74 instance.setUnknownSchemaNodes(unknownNodes);
82 public void setQName(QName qname) {
84 instance.setQName(qname);
88 public SchemaPath getPath() {
93 public void setPath(final SchemaPath schemaPath) {
94 this.schemaPath = schemaPath;
98 public String getDescription() {
103 public void setDescription(final String description) {
104 this.description = description;
108 public String getReference() {
113 public void setReference(String reference) {
114 this.reference = reference;
118 public Status getStatus() {
123 public void setStatus(Status status) {
124 if (status != null) {
125 this.status = status;
130 public boolean isAugmenting() {
135 public void setAugmenting(boolean augmenting) {
136 this.augmenting = augmenting;
140 public boolean isAddedByUses() {
145 public void setAddedByUses(final boolean addedByUses) {
146 this.addedByUses = addedByUses;
150 public Boolean isConfiguration() {
151 return configuration;
155 public void setConfiguration(Boolean configuration) {
156 this.configuration = configuration;
160 public ConstraintsBuilder getConstraints() {
164 public boolean isUserOrdered() {
168 public void setUserOrdered(final boolean userOrdered) {
169 this.userOrdered = userOrdered;
173 public int hashCode() {
174 final int prime = 31;
176 result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
181 public boolean equals(Object obj) {
188 if (getClass() != obj.getClass()) {
191 LeafListSchemaNodeBuilder other = (LeafListSchemaNodeBuilder) obj;
192 if (schemaPath == null) {
193 if (other.schemaPath != null) {
196 } else if (!schemaPath.equals(other.schemaPath)) {
199 if (parentBuilder == null) {
200 if (other.parentBuilder != null) {
203 } else if (!parentBuilder.equals(other.parentBuilder)) {
210 public String toString() {
211 return "leaf-list " + qname.getLocalName();
214 private final class LeafListSchemaNodeImpl implements LeafListSchemaNode {
216 private SchemaPath path;
217 private YangNode parent;
218 private String description;
219 private String reference;
220 private Status status = Status.CURRENT;
221 private boolean augmenting;
222 private boolean addedByUses;
223 private boolean configuration;
224 private ConstraintDefinition constraintsDef;
225 private TypeDefinition<?> type;
226 private boolean userOrdered;
227 private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
229 private LeafListSchemaNodeImpl(final QName qname) {
234 public QName getQName() {
238 private void setQName(QName qname) {
243 public SchemaPath getPath() {
247 private void setPath(final SchemaPath path) {
252 public YangNode getParent() {
256 private void setParent(YangNode parent) {
257 this.parent = parent;
261 public String getDescription() {
265 private void setDescription(String description) {
266 this.description = description;
270 public String getReference() {
274 private void setReference(String reference) {
275 this.reference = reference;
279 public Status getStatus() {
283 private void setStatus(Status status) {
284 this.status = status;
288 public boolean isAugmenting() {
292 private void setAugmenting(boolean augmenting) {
293 this.augmenting = augmenting;
297 public boolean isAddedByUses() {
301 private void setAddedByUses(final boolean addedByUses) {
302 this.addedByUses = addedByUses;
306 public boolean isConfiguration() {
307 return configuration;
310 private void setConfiguration(boolean configuration) {
311 this.configuration = configuration;
315 public ConstraintDefinition getConstraints() {
316 return constraintsDef;
319 private void setConstraints(ConstraintDefinition constraintsDef) {
320 this.constraintsDef = constraintsDef;
324 public TypeDefinition<?> getType() {
328 public void setType(TypeDefinition<? extends TypeDefinition<?>> type) {
333 public boolean isUserOrdered() {
337 private void setUserOrdered(boolean userOrdered) {
338 this.userOrdered = userOrdered;
342 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
346 private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownNodes) {
347 if (unknownNodes != null) {
348 this.unknownNodes = unknownNodes;
353 public int hashCode() {
354 final int prime = 31;
356 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
357 result = prime * result + ((path == null) ? 0 : path.hashCode());
362 public boolean equals(Object obj) {
369 if (getClass() != obj.getClass()) {
372 LeafListSchemaNodeImpl other = (LeafListSchemaNodeImpl) obj;
374 if (other.qname != null) {
377 } else if (!qname.equals(other.qname)) {
381 if (other.path != null) {
384 } else if (!path.equals(other.path)) {
391 public String toString() {
392 StringBuilder sb = new StringBuilder(LeafListSchemaNodeImpl.class.getSimpleName());
396 return sb.toString();