Added getParent() method to DataSchemaNode and DataNodeContainer. Fixed Bugs.
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / UnknownSchemaNodeBuilder.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.parser.builder.impl;
9
10 import java.util.Collections;
11 import java.util.List;
12
13 import org.opendaylight.yangtools.yang.common.QName;
14 import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
15 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
16 import org.opendaylight.yangtools.yang.model.api.Status;
17 import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
18 import org.opendaylight.yangtools.yang.model.api.YangNode;
19 import org.opendaylight.yangtools.yang.parser.builder.api.AbstractSchemaNodeBuilder;
20 import org.opendaylight.yangtools.yang.parser.util.Comparators;
21
22 public final class UnknownSchemaNodeBuilder extends AbstractSchemaNodeBuilder {
23     private boolean isBuilt;
24     private final UnknownSchemaNodeImpl instance;
25     private boolean addedByUses;
26     private QName nodeType;
27     private String nodeParameter;
28
29     private ExtensionDefinition extensionDefinition;
30     private ExtensionBuilder extensionBuilder;
31
32     public UnknownSchemaNodeBuilder(final String moduleName, final int line, final QName qname) {
33         super(moduleName, line, qname);
34         instance = new UnknownSchemaNodeImpl(qname);
35     }
36
37     @Override
38     public int hashCode() {
39         final int prime = 31;
40         int result = 1;
41         result = prime * result + ((qname == null) ? 0 : qname.hashCode());
42         result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
43         result = prime * result + ((nodeType == null) ? 0 : nodeType.hashCode());
44         result = prime * result + ((nodeParameter == null) ? 0 : nodeParameter.hashCode());
45         return result;
46     }
47
48     @Override
49     public boolean equals(Object obj) {
50         if (this == obj) {
51             return true;
52         }
53         if (obj == null) {
54             return false;
55         }
56         if (getClass() != obj.getClass()) {
57             return false;
58         }
59         UnknownSchemaNodeBuilder other = (UnknownSchemaNodeBuilder) obj;
60         if (qname == null) {
61             if (other.qname != null) {
62                 return false;
63             }
64         } else if (!qname.equals(other.qname)) {
65             return false;
66         }
67         if (schemaPath == null) {
68             if (other.schemaPath != null) {
69                 return false;
70             }
71         } else if (!schemaPath.equals(other.schemaPath)) {
72             return false;
73         }
74         if (nodeType == null) {
75             if (other.nodeType != null) {
76                 return false;
77             }
78         } else if (!nodeType.equals(other.nodeType)) {
79             return false;
80         }
81         if (nodeParameter == null) {
82             if (other.nodeParameter != null) {
83                 return false;
84             }
85         } else if (!nodeParameter.equals(other.nodeParameter)) {
86             return false;
87         }
88         return true;
89     }
90
91     @Override
92     public UnknownSchemaNode build(YangNode parent) {
93         if (!isBuilt) {
94             instance.setPath(schemaPath);
95             instance.setNodeType(nodeType);
96             instance.setNodeParameter(nodeParameter);
97             instance.setDescription(description);
98             instance.setReference(reference);
99             instance.setStatus(status);
100             instance.setAddedByUses(addedByUses);
101
102             // EXTENSION
103             if (extensionDefinition != null) {
104                 instance.setExtensionDefinition(extensionDefinition);
105             } else {
106                 if (extensionBuilder != null) {
107                     instance.setExtensionDefinition(extensionBuilder.build(null));
108                 }
109             }
110
111             // UNKNOWN NODES
112             for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
113                 unknownNodes.add(b.build(null));
114             }
115             Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
116             instance.setUnknownSchemaNodes(unknownNodes);
117
118             isBuilt = true;
119         }
120
121         return instance;
122     }
123
124     public void setQName(QName qname) {
125         this.qname = qname;
126     }
127
128     public boolean isAddedByUses() {
129         return addedByUses;
130     }
131
132     public void setAddedByUses(final boolean addedByUses) {
133         this.addedByUses = addedByUses;
134     }
135
136     public QName getNodeType() {
137         return nodeType;
138     }
139
140     public void setNodeType(final QName nodeType) {
141         this.nodeType = nodeType;
142     }
143
144     public String getNodeParameter() {
145         return nodeParameter;
146     }
147
148     public void setNodeParameter(final String nodeParameter) {
149         this.nodeParameter = nodeParameter;
150     }
151
152     public ExtensionDefinition getExtensionDefinition() {
153         return extensionDefinition;
154     }
155
156     public void setExtensionDefinition(final ExtensionDefinition extensionDefinition) {
157         this.extensionDefinition = extensionDefinition;
158     }
159
160     public ExtensionBuilder getExtensionBuilder() {
161         return extensionBuilder;
162     }
163
164     public void setExtensionBuilder(final ExtensionBuilder extension) {
165         this.extensionBuilder = extension;
166     }
167
168     @Override
169     public String toString() {
170         StringBuilder sb = new StringBuilder();
171         sb.append(nodeType.getPrefix());
172         sb.append(":");
173         sb.append(nodeType.getLocalName());
174         sb.append(" ");
175         sb.append(nodeParameter);
176         return sb.toString();
177     }
178
179     private final class UnknownSchemaNodeImpl implements UnknownSchemaNode {
180         private final QName qname;
181         private SchemaPath path;
182         private ExtensionDefinition extension;
183         private String description;
184         private String reference;
185         private Status status = Status.CURRENT;
186         private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
187         private QName nodeType;
188         private String nodeParameter;
189         private boolean addedByUses;
190
191         private UnknownSchemaNodeImpl(final QName qname) {
192             this.qname = qname;
193         }
194
195         @Override
196         public QName getQName() {
197             return qname;
198         }
199
200         @Override
201         public SchemaPath getPath() {
202             return path;
203         }
204
205         private void setPath(final SchemaPath path) {
206             this.path = path;
207         }
208
209         @Override
210         public ExtensionDefinition getExtensionDefinition() {
211             return extension;
212         }
213
214         private void setExtensionDefinition(final ExtensionDefinition extension) {
215             this.extension = extension;
216         }
217
218         @Override
219         public String getDescription() {
220             return description;
221         }
222
223         private void setDescription(final String description) {
224             this.description = description;
225         }
226
227         @Override
228         public String getReference() {
229             return reference;
230         }
231
232         private void setReference(final String reference) {
233             this.reference = reference;
234         }
235
236         @Override
237         public Status getStatus() {
238             return status;
239         }
240
241         private void setStatus(final Status status) {
242             if (status != null) {
243                 this.status = status;
244             }
245         }
246
247         @Override
248         public boolean isAddedByUses() {
249             return addedByUses;
250         }
251
252         private void setAddedByUses(final boolean addedByUses) {
253             this.addedByUses = addedByUses;
254         }
255
256         @Override
257         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
258             return unknownNodes;
259         }
260
261         private void setUnknownSchemaNodes(final List<UnknownSchemaNode> unknownNodes) {
262             if (unknownNodes != null) {
263                 this.unknownNodes = unknownNodes;
264             }
265         }
266
267         @Override
268         public QName getNodeType() {
269             return nodeType;
270         }
271
272         private void setNodeType(final QName nodeType) {
273             this.nodeType = nodeType;
274         }
275
276         @Override
277         public String getNodeParameter() {
278             return nodeParameter;
279         }
280
281         private void setNodeParameter(final String nodeParameter) {
282             this.nodeParameter = nodeParameter;
283         }
284
285         @Override
286         public String toString() {
287             StringBuilder sb = new StringBuilder();
288             sb.append(nodeType.getPrefix());
289             sb.append(":");
290             sb.append(nodeType.getLocalName());
291             sb.append(" ");
292             sb.append(nodeParameter);
293             return sb.toString();
294         }
295
296         @Override
297         public int hashCode() {
298             final int prime = 31;
299             int result = 1;
300             result = prime * result + ((qname == null) ? 0 : qname.hashCode());
301             result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
302             result = prime * result + ((nodeType == null) ? 0 : nodeType.hashCode());
303             result = prime * result + ((nodeParameter == null) ? 0 : nodeParameter.hashCode());
304             return result;
305         }
306
307         @Override
308         public boolean equals(Object obj) {
309             if (this == obj) {
310                 return true;
311             }
312             if (obj == null) {
313                 return false;
314             }
315             if (getClass() != obj.getClass()) {
316                 return false;
317             }
318             UnknownSchemaNodeImpl other = (UnknownSchemaNodeImpl) obj;
319             if (qname == null) {
320                 if (other.qname != null) {
321                     return false;
322                 }
323             } else if (!qname.equals(other.qname)) {
324                 return false;
325             }
326             if (path == null) {
327                 if (other.path != null) {
328                     return false;
329                 }
330             } else if (!path.equals(other.path)) {
331                 return false;
332             }
333             if (nodeType == null) {
334                 if (other.nodeType != null) {
335                     return false;
336                 }
337             } else if (!nodeType.equals(other.nodeType)) {
338                 return false;
339             }
340             if (nodeParameter == null) {
341                 if (other.nodeParameter != null) {
342                     return false;
343                 }
344             } else if (!nodeParameter.equals(other.nodeParameter)) {
345                 return false;
346             }
347             return true;
348         }
349
350     }
351
352 }