Merge "BUG 428 remove importing unnecessary imports"
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / UnknownSchemaNodeBuilderImpl.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.ExtensionBuilder;
20 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
21 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractSchemaNodeBuilder;
22 import org.opendaylight.yangtools.yang.parser.builder.util.Comparators;
23
24 import com.google.common.base.Preconditions;
25
26 public final class UnknownSchemaNodeBuilderImpl extends AbstractSchemaNodeBuilder implements UnknownSchemaNodeBuilder {
27     private boolean isBuilt;
28     private final UnknownSchemaNodeImpl instance;
29     private QName nodeType;
30     private String nodeParameter;
31
32     private ExtensionDefinition extensionDefinition;
33     private ExtensionBuilder extensionBuilder;
34
35     public UnknownSchemaNodeBuilderImpl(final String moduleName, final int line, final QName qname, final SchemaPath path) {
36         super(moduleName, line, qname);
37         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
38         instance = new UnknownSchemaNodeImpl(qname, path);
39     }
40
41     public UnknownSchemaNodeBuilderImpl(final String moduleName, final int line, final QName qname, final SchemaPath path, final UnknownSchemaNode base) {
42         super(moduleName, line, base.getQName());
43         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
44         instance = new UnknownSchemaNodeImpl(qname, path);
45
46         instance.nodeType = base.getNodeType();
47         instance.nodeParameter = base.getNodeParameter();
48         instance.description = base.getDescription();
49         instance.reference = base.getReference();
50         instance.status = base.getStatus();
51         instance.addedByUses = base.isAddedByUses();
52         instance.extension = base.getExtensionDefinition();
53         instance.unknownNodes.addAll(base.getUnknownSchemaNodes());
54     }
55
56     /* (non-Javadoc)
57      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#getPath()
58      */
59     @Override
60     public SchemaPath getPath() {
61         return instance.path;
62     }
63
64     @Override
65     public int hashCode() {
66         final int prime = 31;
67         int result = 1;
68         result = prime * result + ((qname == null) ? 0 : qname.hashCode());
69         result = prime * result + ((schemaPath == null) ? 0 : schemaPath.hashCode());
70         result = prime * result + ((nodeType == null) ? 0 : nodeType.hashCode());
71         result = prime * result + ((nodeParameter == null) ? 0 : nodeParameter.hashCode());
72         return result;
73     }
74
75     @Override
76     public boolean equals(final Object obj) {
77         if (this == obj) {
78             return true;
79         }
80         if (obj == null) {
81             return false;
82         }
83         if (getClass() != obj.getClass()) {
84             return false;
85         }
86         UnknownSchemaNodeBuilderImpl other = (UnknownSchemaNodeBuilderImpl) obj;
87         if (qname == null) {
88             if (other.qname != null) {
89                 return false;
90             }
91         } else if (!qname.equals(other.qname)) {
92             return false;
93         }
94         if (schemaPath == null) {
95             if (other.schemaPath != null) {
96                 return false;
97             }
98         } else if (!schemaPath.equals(other.schemaPath)) {
99             return false;
100         }
101         if (nodeType == null) {
102             if (other.nodeType != null) {
103                 return false;
104             }
105         } else if (!nodeType.equals(other.nodeType)) {
106             return false;
107         }
108         if (nodeParameter == null) {
109             if (other.nodeParameter != null) {
110                 return false;
111             }
112         } else if (!nodeParameter.equals(other.nodeParameter)) {
113             return false;
114         }
115         return true;
116     }
117
118     /* (non-Javadoc)
119      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#build()
120      */
121     @Override
122     public UnknownSchemaNode build() {
123         if (!isBuilt) {
124             instance.setNodeType(nodeType);
125             instance.setNodeParameter(nodeParameter);
126
127             // EXTENSION
128             if (extensionDefinition != null) {
129                 instance.setExtensionDefinition(extensionDefinition);
130             } else {
131                 if (extensionBuilder != null) {
132                     instance.setExtensionDefinition(extensionBuilder.build());
133                 }
134             }
135
136             // UNKNOWN NODES
137             for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
138                 unknownNodes.add(b.build());
139             }
140             Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
141             instance.setUnknownSchemaNodes(unknownNodes);
142
143             isBuilt = true;
144         }
145
146         return instance;
147     }
148
149     /* (non-Javadoc)
150      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#getDescription()
151      */
152     @Override
153     public String getDescription() {
154         return instance.description;
155     }
156
157     @Override
158     public void setDescription(final String description) {
159         instance.description = description;
160     }
161
162     /* (non-Javadoc)
163      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#getReference()
164      */
165     @Override
166     public String getReference() {
167         return instance.reference;
168     }
169
170     /* (non-Javadoc)
171      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#setReference(java.lang.String)
172      */
173     @Override
174     public void setReference(final String reference) {
175         instance.reference = reference;
176     }
177
178     /* (non-Javadoc)
179      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#getStatus()
180      */
181     @Override
182     public Status getStatus() {
183         return instance.status;
184     }
185
186     /* (non-Javadoc)
187      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#setStatus(org.opendaylight.yangtools.yang.model.api.Status)
188      */
189     @Override
190     public void setStatus(final Status status) {
191         if (status != null) {
192             instance.status = status;
193         }
194     }
195
196     /* (non-Javadoc)
197      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#isAddedByUses()
198      */
199     @Override
200     public boolean isAddedByUses() {
201         return instance.addedByUses;
202     }
203
204     /* (non-Javadoc)
205      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#setAddedByUses(boolean)
206      */
207     @Override
208     public void setAddedByUses(final boolean addedByUses) {
209         instance.addedByUses = addedByUses;
210     }
211
212     /* (non-Javadoc)
213      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#getNodeType()
214      */
215     @Override
216     public QName getNodeType() {
217         return nodeType;
218     }
219
220     @Override
221     public void setNodeType(final QName nodeType) {
222         this.nodeType = nodeType;
223     }
224
225     /* (non-Javadoc)
226      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#getNodeParameter()
227      */
228     @Override
229     public String getNodeParameter() {
230         return nodeParameter;
231     }
232
233     /* (non-Javadoc)
234      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#setNodeParameter(java.lang.String)
235      */
236     @Override
237     public void setNodeParameter(final String nodeParameter) {
238         this.nodeParameter = nodeParameter;
239     }
240
241     /* (non-Javadoc)
242      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#getExtensionDefinition()
243      */
244     @Override
245     public ExtensionDefinition getExtensionDefinition() {
246         return extensionDefinition;
247     }
248
249     /* (non-Javadoc)
250      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#setExtensionDefinition(org.opendaylight.yangtools.yang.model.api.ExtensionDefinition)
251      */
252     @Override
253     public void setExtensionDefinition(final ExtensionDefinition extensionDefinition) {
254         this.extensionDefinition = extensionDefinition;
255     }
256
257     /* (non-Javadoc)
258      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#getExtensionBuilder()
259      */
260     @Override
261     public ExtensionBuilder getExtensionBuilder() {
262         return extensionBuilder;
263     }
264
265     /* (non-Javadoc)
266      * @see org.opendaylight.yangtools.yang.parser.builder.impl.IUnkownSchemaNodeBuilder#setExtensionBuilder(org.opendaylight.yangtools.yang.parser.builder.impl.ExtensionBuilder)
267      */
268     @Override
269     public void setExtensionBuilder(final ExtensionBuilder extension) {
270         this.extensionBuilder = extension;
271     }
272
273     @Override
274     public String toString() {
275         StringBuilder sb = new StringBuilder();
276         sb.append(nodeType.getPrefix());
277         sb.append(":");
278         sb.append(nodeType.getLocalName());
279         sb.append(" ");
280         sb.append(nodeParameter);
281         return sb.toString();
282     }
283
284     private static final class UnknownSchemaNodeImpl implements UnknownSchemaNode {
285         private final QName qname;
286         private final SchemaPath path;
287         private ExtensionDefinition extension;
288         private String description;
289         private String reference;
290         private Status status = Status.CURRENT;
291         private final List<UnknownSchemaNode> unknownNodes = new ArrayList<>();
292         private QName nodeType;
293         private String nodeParameter;
294         private boolean addedByUses;
295
296         private UnknownSchemaNodeImpl(final QName qname, final SchemaPath path) {
297             this.qname = qname;
298             this.path = path;
299         }
300
301         @Override
302         public QName getQName() {
303             return qname;
304         }
305
306         @Override
307         public SchemaPath getPath() {
308             return path;
309         }
310
311         @Override
312         public ExtensionDefinition getExtensionDefinition() {
313             return extension;
314         }
315
316         private void setExtensionDefinition(final ExtensionDefinition extension) {
317             this.extension = extension;
318         }
319
320         @Override
321         public String getDescription() {
322             return description;
323         }
324
325         @Override
326         public String getReference() {
327             return reference;
328         }
329
330         @Override
331         public Status getStatus() {
332             return status;
333         }
334
335         @Override
336         public boolean isAddedByUses() {
337             return addedByUses;
338         }
339
340         @Override
341         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
342             return unknownNodes;
343         }
344
345         private void setUnknownSchemaNodes(final List<UnknownSchemaNode> unknownNodes) {
346             if (unknownNodes != null) {
347                 this.unknownNodes.addAll(unknownNodes);
348             }
349         }
350
351         @Override
352         public QName getNodeType() {
353             return nodeType;
354         }
355
356         private void setNodeType(final QName nodeType) {
357             this.nodeType = nodeType;
358         }
359
360         @Override
361         public String getNodeParameter() {
362             return nodeParameter;
363         }
364
365         private void setNodeParameter(final String nodeParameter) {
366             this.nodeParameter = nodeParameter;
367         }
368
369         @Override
370         public String toString() {
371             StringBuilder sb = new StringBuilder();
372             sb.append(nodeType.getPrefix());
373             sb.append(":");
374             sb.append(nodeType.getLocalName());
375             sb.append(" ");
376             sb.append(nodeParameter);
377             return sb.toString();
378         }
379
380         @Override
381         public int hashCode() {
382             final int prime = 31;
383             int result = 1;
384             result = prime * result + ((qname == null) ? 0 : qname.hashCode());
385             result = prime * result + ((path == null) ? 0 : path.hashCode());
386             result = prime * result + ((nodeType == null) ? 0 : nodeType.hashCode());
387             result = prime * result + ((nodeParameter == null) ? 0 : nodeParameter.hashCode());
388             return result;
389         }
390
391         @Override
392         public boolean equals(final Object obj) {
393             if (this == obj) {
394                 return true;
395             }
396             if (obj == null) {
397                 return false;
398             }
399             if (getClass() != obj.getClass()) {
400                 return false;
401             }
402             UnknownSchemaNodeImpl other = (UnknownSchemaNodeImpl) obj;
403             if (qname == null) {
404                 if (other.qname != null) {
405                     return false;
406                 }
407             } else if (!qname.equals(other.qname)) {
408                 return false;
409             }
410             if (path == null) {
411                 if (other.path != null) {
412                     return false;
413                 }
414             } else if (!path.equals(other.path)) {
415                 return false;
416             }
417             if (nodeType == null) {
418                 if (other.nodeType != null) {
419                     return false;
420                 }
421             } else if (!nodeType.equals(other.nodeType)) {
422                 return false;
423             }
424             if (nodeParameter == null) {
425                 if (other.nodeParameter != null) {
426                     return false;
427                 }
428             } else if (!nodeParameter.equals(other.nodeParameter)) {
429                 return false;
430             }
431             return true;
432         }
433
434     }
435
436 }