Converted BindingGenerator and ParserUtils to xtend
[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 UnknownSchemaNode build() {
39         if (!isBuilt) {
40             instance.setPath(schemaPath);
41             instance.setNodeType(nodeType);
42             instance.setNodeParameter(nodeParameter);
43             instance.setDescription(description);
44             instance.setReference(reference);
45             instance.setStatus(status);
46             instance.setAddedByUses(addedByUses);
47
48             // EXTENSION
49             if (extensionDefinition != null) {
50                 instance.setExtensionDefinition(extensionDefinition);
51             } else {
52                 if (extensionBuilder != null) {
53                     instance.setExtensionDefinition(extensionBuilder.build());
54                 }
55             }
56
57             // UNKNOWN NODES
58             if (unknownNodes == null) {
59                 unknownNodes = new ArrayList<UnknownSchemaNode>();
60                 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
61                     unknownNodes.add(b.build());
62                 }
63                 Collections.sort(unknownNodes, Comparators.SCHEMA_NODE_COMP);
64             }
65             instance.setUnknownSchemaNodes(unknownNodes);
66
67             isBuilt = true;
68         }
69
70         return instance;
71     }
72
73     public boolean isAddedByUses() {
74         return addedByUses;
75     }
76
77     public void setAddedByUses(final boolean addedByUses) {
78         this.addedByUses = addedByUses;
79     }
80
81     public QName getNodeType() {
82         return nodeType;
83     }
84
85     public void setNodeType(final QName nodeType) {
86         this.nodeType = nodeType;
87     }
88
89     public String getNodeParameter() {
90         return nodeParameter;
91     }
92
93     public void setNodeParameter(final String nodeParameter) {
94         this.nodeParameter = nodeParameter;
95     }
96
97     public ExtensionDefinition getExtensionDefinition() {
98         return extensionDefinition;
99     }
100
101     public void setExtensionDefinition(final ExtensionDefinition extensionDefinition) {
102         this.extensionDefinition = extensionDefinition;
103     }
104
105     public ExtensionBuilder getExtensionBuilder() {
106         return extensionBuilder;
107     }
108
109     public void setExtensionBuilder(final ExtensionBuilder extension) {
110         this.extensionBuilder = extension;
111     }
112
113     @Override
114     public String toString() {
115         StringBuilder sb = new StringBuilder();
116         sb.append(nodeType.getPrefix());
117         sb.append(":");
118         sb.append(nodeType.getLocalName());
119         sb.append(" ");
120         sb.append(nodeParameter);
121         return sb.toString();
122     }
123
124     private final class UnknownSchemaNodeImpl implements UnknownSchemaNode {
125         private final QName qname;
126         private SchemaPath path;
127         private ExtensionDefinition extension;
128         private String description;
129         private String reference;
130         private Status status = Status.CURRENT;
131         private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
132         private QName nodeType;
133         private String nodeParameter;
134         private boolean addedByUses;
135
136         private UnknownSchemaNodeImpl(final QName qname) {
137             this.qname = qname;
138         }
139
140         @Override
141         public QName getQName() {
142             return qname;
143         }
144
145         @Override
146         public SchemaPath getPath() {
147             return path;
148         }
149
150         private void setPath(final SchemaPath path) {
151             this.path = path;
152         }
153
154         @Override
155         public ExtensionDefinition getExtensionDefinition() {
156             return extension;
157         }
158
159         private void setExtensionDefinition(final ExtensionDefinition extension) {
160             this.extension = extension;
161         }
162
163         @Override
164         public String getDescription() {
165             return description;
166         }
167
168         private void setDescription(final String description) {
169             this.description = description;
170         }
171
172         @Override
173         public String getReference() {
174             return reference;
175         }
176
177         private void setReference(final String reference) {
178             this.reference = reference;
179         }
180
181         @Override
182         public Status getStatus() {
183             return status;
184         }
185
186         private void setStatus(final Status status) {
187             if (status != null) {
188                 this.status = status;
189             }
190         }
191
192         @Override
193         public boolean isAddedByUses() {
194             return addedByUses;
195         }
196
197         private void setAddedByUses(final boolean addedByUses) {
198             this.addedByUses = addedByUses;
199         }
200
201         @Override
202         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
203             return unknownNodes;
204         }
205
206         private void setUnknownSchemaNodes(final List<UnknownSchemaNode> unknownNodes) {
207             if (unknownNodes != null) {
208                 this.unknownNodes = unknownNodes;
209             }
210         }
211
212         @Override
213         public QName getNodeType() {
214             return nodeType;
215         }
216
217         private void setNodeType(final QName nodeType) {
218             this.nodeType = nodeType;
219         }
220
221         @Override
222         public String getNodeParameter() {
223             return nodeParameter;
224         }
225
226         private void setNodeParameter(final String nodeParameter) {
227             this.nodeParameter = nodeParameter;
228         }
229
230         @Override
231         public String toString() {
232             StringBuilder sb = new StringBuilder();
233             sb.append(nodeType.getPrefix());
234             sb.append(":");
235             sb.append(nodeType.getLocalName());
236             sb.append(" ");
237             sb.append(nodeParameter);
238             return sb.toString();
239         }
240     }
241
242 }