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.ExtensionDefinition;
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.UnknownSchemaNode;
19 import org.opendaylight.yangtools.yang.parser.builder.api.AbstractSchemaNodeBuilder;
20 import org.opendaylight.yangtools.yang.parser.util.Comparators;
22 public final class UnknownSchemaNodeBuilder extends AbstractSchemaNodeBuilder {
23 private boolean isBuilt;
24 private final UnknownSchemaNodeImpl instance;
25 private QName nodeType;
26 private String nodeParameter;
28 private ExtensionDefinition extensionDefinition;
29 private ExtensionBuilder extensionBuilder;
31 public UnknownSchemaNodeBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
32 super(moduleName, line, qname);
33 this.schemaPath = path;
34 instance = new UnknownSchemaNodeImpl(qname, path);
37 public UnknownSchemaNodeBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path, final UnknownSchemaNode base) {
38 super(moduleName, line, base.getQName());
39 this.schemaPath = path;
40 instance = new UnknownSchemaNodeImpl(qname, path);
42 instance.nodeType = base.getNodeType();
43 instance.nodeParameter = base.getNodeParameter();
44 instance.description = base.getDescription();
45 instance.reference = base.getReference();
46 instance.status = base.getStatus();
47 instance.addedByUses = base.isAddedByUses();
48 instance.extension = base.getExtensionDefinition();
49 instance.unknownNodes.addAll(base.getUnknownSchemaNodes());
53 public SchemaPath getPath() {
58 public int hashCode() {
61 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
62 result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
63 result = prime * result + ((nodeType == null) ? 0 : nodeType.hashCode());
64 result = prime * result + ((nodeParameter == null) ? 0 : nodeParameter.hashCode());
69 public boolean equals(Object obj) {
76 if (getClass() != obj.getClass()) {
79 UnknownSchemaNodeBuilder other = (UnknownSchemaNodeBuilder) obj;
81 if (other.qname != null) {
84 } else if (!qname.equals(other.qname)) {
87 if (schemaPath == null) {
88 if (other.schemaPath != null) {
91 } else if (!schemaPath.equals(other.schemaPath)) {
94 if (nodeType == null) {
95 if (other.nodeType != null) {
98 } else if (!nodeType.equals(other.nodeType)) {
101 if (nodeParameter == null) {
102 if (other.nodeParameter != null) {
105 } else if (!nodeParameter.equals(other.nodeParameter)) {
112 public UnknownSchemaNode build() {
114 instance.setNodeType(nodeType);
115 instance.setNodeParameter(nodeParameter);
118 if (extensionDefinition != null) {
119 instance.setExtensionDefinition(extensionDefinition);
121 if (extensionBuilder != null) {
122 instance.setExtensionDefinition(extensionBuilder.build());
127 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
128 unknownNodes.add(b.build());
130 Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
131 instance.setUnknownSchemaNodes(unknownNodes);
140 public String getDescription() {
141 return instance.description;
145 public void setDescription(final String description) {
146 instance.description = description;
150 public String getReference() {
151 return instance.reference;
155 public void setReference(final String reference) {
156 instance.reference = reference;
160 public Status getStatus() {
161 return instance.status;
165 public void setStatus(Status status) {
166 if (status != null) {
167 instance.status = status;
171 public boolean isAddedByUses() {
172 return instance.addedByUses;
175 public void setAddedByUses(final boolean addedByUses) {
176 instance.addedByUses = addedByUses;
179 public QName getNodeType() {
183 public void setNodeType(final QName nodeType) {
184 this.nodeType = nodeType;
187 public String getNodeParameter() {
188 return nodeParameter;
191 public void setNodeParameter(final String nodeParameter) {
192 this.nodeParameter = nodeParameter;
195 public ExtensionDefinition getExtensionDefinition() {
196 return extensionDefinition;
199 public void setExtensionDefinition(final ExtensionDefinition extensionDefinition) {
200 this.extensionDefinition = extensionDefinition;
203 public ExtensionBuilder getExtensionBuilder() {
204 return extensionBuilder;
207 public void setExtensionBuilder(final ExtensionBuilder extension) {
208 this.extensionBuilder = extension;
212 public String toString() {
213 StringBuilder sb = new StringBuilder();
214 sb.append(nodeType.getPrefix());
216 sb.append(nodeType.getLocalName());
218 sb.append(nodeParameter);
219 return sb.toString();
222 private static final class UnknownSchemaNodeImpl implements UnknownSchemaNode {
223 private final QName qname;
224 private final SchemaPath path;
225 private ExtensionDefinition extension;
226 private String description;
227 private String reference;
228 private Status status = Status.CURRENT;
229 private final List<UnknownSchemaNode> unknownNodes = new ArrayList<>();
230 private QName nodeType;
231 private String nodeParameter;
232 private boolean addedByUses;
234 private UnknownSchemaNodeImpl(final QName qname, final SchemaPath path) {
240 public QName getQName() {
245 public SchemaPath getPath() {
250 public ExtensionDefinition getExtensionDefinition() {
254 private void setExtensionDefinition(final ExtensionDefinition extension) {
255 this.extension = extension;
259 public String getDescription() {
264 public String getReference() {
269 public Status getStatus() {
274 public boolean isAddedByUses() {
279 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
283 private void setUnknownSchemaNodes(final List<UnknownSchemaNode> unknownNodes) {
284 if (unknownNodes != null) {
285 this.unknownNodes.addAll(unknownNodes);
290 public QName getNodeType() {
294 private void setNodeType(final QName nodeType) {
295 this.nodeType = nodeType;
299 public String getNodeParameter() {
300 return nodeParameter;
303 private void setNodeParameter(final String nodeParameter) {
304 this.nodeParameter = nodeParameter;
308 public String toString() {
309 StringBuilder sb = new StringBuilder();
310 sb.append(nodeType.getPrefix());
312 sb.append(nodeType.getLocalName());
314 sb.append(nodeParameter);
315 return sb.toString();
319 public int hashCode() {
320 final int prime = 31;
322 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
323 result = prime * result + ((path == null) ? 0 : path.hashCode());
324 result = prime * result + ((nodeType == null) ? 0 : nodeType.hashCode());
325 result = prime * result + ((nodeParameter == null) ? 0 : nodeParameter.hashCode());
330 public boolean equals(Object obj) {
337 if (getClass() != obj.getClass()) {
340 UnknownSchemaNodeImpl other = (UnknownSchemaNodeImpl) obj;
342 if (other.qname != null) {
345 } else if (!qname.equals(other.qname)) {
349 if (other.path != null) {
352 } else if (!path.equals(other.path)) {
355 if (nodeType == null) {
356 if (other.nodeType != null) {
359 } else if (!nodeType.equals(other.nodeType)) {
362 if (nodeParameter == null) {
363 if (other.nodeParameter != null) {
366 } else if (!nodeParameter.equals(other.nodeParameter)) {