Test for class RefineHolder.java
[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.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
13
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;
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() {
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());
108                 }
109             }
110
111             // UNKNOWN NODES
112             if (unknownNodes == null) {
113                 unknownNodes = new ArrayList<UnknownSchemaNode>();
114                 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
115                     unknownNodes.add(b.build());
116                 }
117                 Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
118             }
119             instance.setUnknownSchemaNodes(unknownNodes);
120
121             isBuilt = true;
122         }
123
124         return instance;
125     }
126
127     public void setQName(QName qname) {
128         this.qname = qname;
129     }
130
131     public boolean isAddedByUses() {
132         return addedByUses;
133     }
134
135     public void setAddedByUses(final boolean addedByUses) {
136         this.addedByUses = addedByUses;
137     }
138
139     public QName getNodeType() {
140         return nodeType;
141     }
142
143     public void setNodeType(final QName nodeType) {
144         this.nodeType = nodeType;
145     }
146
147     public String getNodeParameter() {
148         return nodeParameter;
149     }
150
151     public void setNodeParameter(final String nodeParameter) {
152         this.nodeParameter = nodeParameter;
153     }
154
155     public ExtensionDefinition getExtensionDefinition() {
156         return extensionDefinition;
157     }
158
159     public void setExtensionDefinition(final ExtensionDefinition extensionDefinition) {
160         this.extensionDefinition = extensionDefinition;
161     }
162
163     public ExtensionBuilder getExtensionBuilder() {
164         return extensionBuilder;
165     }
166
167     public void setExtensionBuilder(final ExtensionBuilder extension) {
168         this.extensionBuilder = extension;
169     }
170
171     @Override
172     public String toString() {
173         StringBuilder sb = new StringBuilder();
174         sb.append(nodeType.getPrefix());
175         sb.append(":");
176         sb.append(nodeType.getLocalName());
177         sb.append(" ");
178         sb.append(nodeParameter);
179         return sb.toString();
180     }
181
182     private final class UnknownSchemaNodeImpl implements UnknownSchemaNode {
183         private final QName qname;
184         private SchemaPath path;
185         private ExtensionDefinition extension;
186         private String description;
187         private String reference;
188         private Status status = Status.CURRENT;
189         private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
190         private QName nodeType;
191         private String nodeParameter;
192         private boolean addedByUses;
193
194         private UnknownSchemaNodeImpl(final QName qname) {
195             this.qname = qname;
196         }
197
198         @Override
199         public QName getQName() {
200             return qname;
201         }
202
203         @Override
204         public SchemaPath getPath() {
205             return path;
206         }
207
208         private void setPath(final SchemaPath path) {
209             this.path = path;
210         }
211
212         @Override
213         public ExtensionDefinition getExtensionDefinition() {
214             return extension;
215         }
216
217         private void setExtensionDefinition(final ExtensionDefinition extension) {
218             this.extension = extension;
219         }
220
221         @Override
222         public String getDescription() {
223             return description;
224         }
225
226         private void setDescription(final String description) {
227             this.description = description;
228         }
229
230         @Override
231         public String getReference() {
232             return reference;
233         }
234
235         private void setReference(final String reference) {
236             this.reference = reference;
237         }
238
239         @Override
240         public Status getStatus() {
241             return status;
242         }
243
244         private void setStatus(final Status status) {
245             if (status != null) {
246                 this.status = status;
247             }
248         }
249
250         @Override
251         public boolean isAddedByUses() {
252             return addedByUses;
253         }
254
255         private void setAddedByUses(final boolean addedByUses) {
256             this.addedByUses = addedByUses;
257         }
258
259         @Override
260         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
261             return unknownNodes;
262         }
263
264         private void setUnknownSchemaNodes(final List<UnknownSchemaNode> unknownNodes) {
265             if (unknownNodes != null) {
266                 this.unknownNodes = unknownNodes;
267             }
268         }
269
270         @Override
271         public QName getNodeType() {
272             return nodeType;
273         }
274
275         private void setNodeType(final QName nodeType) {
276             this.nodeType = nodeType;
277         }
278
279         @Override
280         public String getNodeParameter() {
281             return nodeParameter;
282         }
283
284         private void setNodeParameter(final String nodeParameter) {
285             this.nodeParameter = nodeParameter;
286         }
287
288         @Override
289         public String toString() {
290             StringBuilder sb = new StringBuilder();
291             sb.append(nodeType.getPrefix());
292             sb.append(":");
293             sb.append(nodeType.getLocalName());
294             sb.append(" ");
295             sb.append(nodeParameter);
296             return sb.toString();
297         }
298
299         @Override
300         public int hashCode() {
301             final int prime = 31;
302             int result = 1;
303             result = prime * result + ((qname == null) ? 0 : qname.hashCode());
304             result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
305             result = prime * result + ((nodeType == null) ? 0 : nodeType.hashCode());
306             result = prime * result + ((nodeParameter == null) ? 0 : nodeParameter.hashCode());
307             return result;
308         }
309
310         @Override
311         public boolean equals(Object obj) {
312             if (this == obj) {
313                 return true;
314             }
315             if (obj == null) {
316                 return false;
317             }
318             if (getClass() != obj.getClass()) {
319                 return false;
320             }
321             UnknownSchemaNodeImpl other = (UnknownSchemaNodeImpl) obj;
322             if (qname == null) {
323                 if (other.qname != null) {
324                     return false;
325                 }
326             } else if (!qname.equals(other.qname)) {
327                 return false;
328             }
329             if (path == null) {
330                 if (other.path != null) {
331                     return false;
332                 }
333             } else if (!path.equals(other.path)) {
334                 return false;
335             }
336             if (nodeType == null) {
337                 if (other.nodeType != null) {
338                     return false;
339                 }
340             } else if (!nodeType.equals(other.nodeType)) {
341                 return false;
342             }
343             if (nodeParameter == null) {
344                 if (other.nodeParameter != null) {
345                     return false;
346                 }
347             } else if (!nodeParameter.equals(other.nodeParameter)) {
348                 return false;
349             }
350             return true;
351         }
352
353     }
354
355 }