54720b44e1afac2706ad5265cf8d98b9db8ce1a6
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / yang / parser / builder / impl / LeafSchemaNodeBuilder.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.controller.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.controller.yang.common.QName;
15 import org.opendaylight.controller.yang.model.api.ConstraintDefinition;
16 import org.opendaylight.controller.yang.model.api.LeafSchemaNode;
17 import org.opendaylight.controller.yang.model.api.SchemaPath;
18 import org.opendaylight.controller.yang.model.api.Status;
19 import org.opendaylight.controller.yang.model.api.TypeDefinition;
20 import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;
21 import org.opendaylight.controller.yang.parser.builder.api.AbstractTypeAwareBuilder;
22 import org.opendaylight.controller.yang.parser.builder.api.ConfigNode;
23 import org.opendaylight.controller.yang.parser.builder.api.DataSchemaNodeBuilder;
24 import org.opendaylight.controller.yang.parser.builder.api.GroupingMember;
25
26 public final class LeafSchemaNodeBuilder extends AbstractTypeAwareBuilder implements DataSchemaNodeBuilder,
27         GroupingMember, ConfigNode {
28     private boolean isBuilt;
29     private final LeafSchemaNodeImpl instance;
30     private final int line;
31     // SchemaNode args
32     private final QName qname;
33     private SchemaPath path;
34     private String description;
35     private String reference;
36     private Status status = Status.CURRENT;
37     private List<UnknownSchemaNode> unknownNodes;
38     private final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
39     // DataSchemaNode args
40     private boolean augmenting;
41     private boolean addedByUses;
42     private Boolean configuration;
43     private final ConstraintsBuilder constraints;
44     // leaf args
45     private String defaultStr;
46     private String unitsStr;
47
48     public LeafSchemaNodeBuilder(final QName qname, final SchemaPath schemaPath, final int line) {
49         this.qname = qname;
50         this.path = schemaPath;
51         this.line = line;
52         instance = new LeafSchemaNodeImpl(qname);
53         constraints = new ConstraintsBuilder(line);
54     }
55
56     public LeafSchemaNodeBuilder(final LeafSchemaNodeBuilder b) {
57         qname = b.getQName();
58         line = b.getLine();
59         instance = new LeafSchemaNodeImpl(qname);
60         constraints = b.getConstraints();
61         path = b.getPath();
62
63         type = b.getType();
64         typedef = b.getTypedef();
65
66         description = b.getDescription();
67         reference = b.getReference();
68         status = b.getStatus();
69         augmenting = b.isAugmenting();
70         addedByUses = b.isAddedByUses();
71         configuration = b.isConfiguration();
72         unknownNodes = b.unknownNodes;
73         addedUnknownNodes.addAll(b.getUnknownNodes());
74
75         defaultStr = b.getDefaultStr();
76         unitsStr = b.getUnits();
77     }
78
79     @Override
80     public LeafSchemaNode build() {
81         if (!isBuilt) {
82             instance.setPath(path);
83             instance.setConstraints(constraints.build());
84             instance.setDescription(description);
85             instance.setReference(reference);
86             instance.setStatus(status);
87             instance.setAugmenting(augmenting);
88             instance.setAddedByUses(addedByUses);
89             instance.setConfiguration(configuration);
90             instance.setDefault(defaultStr);
91             instance.setUnits(unitsStr);
92
93             // TYPE
94             if (type == null) {
95                 instance.setType(typedef.build());
96             } else {
97                 instance.setType(type);
98             }
99
100             // UNKNOWN NODES
101             if (unknownNodes == null) {
102                 unknownNodes = new ArrayList<UnknownSchemaNode>();
103                 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
104                     unknownNodes.add(b.build());
105                 }
106             }
107             instance.setUnknownSchemaNodes(unknownNodes);
108
109             isBuilt = true;
110         }
111         return instance;
112     }
113
114     @Override
115     public int getLine() {
116         return line;
117     }
118
119     @Override
120     public QName getQName() {
121         return qname;
122     }
123
124     public SchemaPath getPath() {
125         return path;
126     }
127
128     @Override
129     public void setPath(final SchemaPath path) {
130         this.path = path;
131     }
132
133     @Override
134     public ConstraintsBuilder getConstraints() {
135         return constraints;
136     }
137
138     @Override
139     public void addUnknownSchemaNode(final UnknownSchemaNodeBuilder unknownNode) {
140         addedUnknownNodes.add(unknownNode);
141     }
142
143     public List<UnknownSchemaNodeBuilder> getUnknownNodes() {
144         return addedUnknownNodes;
145     }
146
147     public void setUnknownNodes(List<UnknownSchemaNode> unknownNodes) {
148         this.unknownNodes = unknownNodes;
149     }
150
151     public String getDescription() {
152         return description;
153     }
154
155     @Override
156     public void setDescription(final String description) {
157         this.description = description;
158     }
159
160     public String getReference() {
161         return reference;
162     }
163
164     @Override
165     public void setReference(final String reference) {
166         this.reference = reference;
167     }
168
169     public Status getStatus() {
170         return status;
171     }
172
173     @Override
174     public void setStatus(final Status status) {
175         if (status != null) {
176             this.status = status;
177         }
178     }
179
180     public boolean isAugmenting() {
181         return augmenting;
182     }
183
184     @Override
185     public void setAugmenting(final boolean augmenting) {
186         this.augmenting = augmenting;
187     }
188
189     @Override
190     public boolean isAddedByUses() {
191         return addedByUses;
192     }
193
194     @Override
195     public void setAddedByUses(final boolean addedByUses) {
196         this.addedByUses = addedByUses;
197     }
198
199     public Boolean isConfiguration() {
200         return configuration;
201     }
202
203     @Override
204     public void setConfiguration(final Boolean configuration) {
205         this.configuration = configuration;
206     }
207
208     public String getDefaultStr() {
209         return defaultStr;
210     }
211
212     public void setDefaultStr(String defaultStr) {
213         this.defaultStr = defaultStr;
214     }
215
216     public String getUnits() {
217         return unitsStr;
218     }
219
220     public void setUnits(String unitsStr) {
221         this.unitsStr = unitsStr;
222     }
223
224     @Override
225     public String toString() {
226         return "leaf " + qname.getLocalName();
227     }
228
229     private final class LeafSchemaNodeImpl implements LeafSchemaNode {
230         private final QName qname;
231         private SchemaPath path;
232         private String description;
233         private String reference;
234         private Status status = Status.CURRENT;
235         private boolean augmenting;
236         private boolean addedByUses;
237         private boolean configuration;
238         private ConstraintDefinition constraintsDef;
239         private TypeDefinition<?> type;
240         private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
241         private String defaultStr;
242         private String unitsStr;
243
244         private LeafSchemaNodeImpl(final QName qname) {
245             this.qname = qname;
246         }
247
248         @Override
249         public QName getQName() {
250             return qname;
251         }
252
253         @Override
254         public SchemaPath getPath() {
255             return path;
256         }
257
258         private void setPath(final SchemaPath path) {
259             this.path = path;
260         }
261
262         @Override
263         public String getDescription() {
264             return description;
265         }
266
267         private void setDescription(String description) {
268             this.description = description;
269         }
270
271         @Override
272         public String getReference() {
273             return reference;
274         }
275
276         private void setReference(String reference) {
277             this.reference = reference;
278         }
279
280         @Override
281         public Status getStatus() {
282             return status;
283         }
284
285         private void setStatus(Status status) {
286             if (status != null) {
287                 this.status = status;
288             }
289         }
290
291         @Override
292         public boolean isAugmenting() {
293             return augmenting;
294         }
295
296         private void setAugmenting(boolean augmenting) {
297             this.augmenting = augmenting;
298         }
299
300         @Override
301         public boolean isAddedByUses() {
302             return addedByUses;
303         }
304
305         private void setAddedByUses(final boolean addedByUses) {
306             this.addedByUses = addedByUses;
307         }
308
309         @Override
310         public boolean isConfiguration() {
311             return configuration;
312         }
313
314         private void setConfiguration(boolean configuration) {
315             this.configuration = configuration;
316         }
317
318         @Override
319         public ConstraintDefinition getConstraints() {
320             return constraintsDef;
321         }
322
323         private void setConstraints(ConstraintDefinition constraintsDef) {
324             this.constraintsDef = constraintsDef;
325         }
326
327         @Override
328         public TypeDefinition<?> getType() {
329             return type;
330         }
331
332         private void setType(TypeDefinition<? extends TypeDefinition<?>> type) {
333             this.type = type;
334         }
335
336         @Override
337         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
338             return unknownNodes;
339         }
340
341         private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownNodes) {
342             if (unknownNodes != null) {
343                 this.unknownNodes = unknownNodes;
344             }
345         }
346
347         @Override
348         public String getDefault() {
349             return defaultStr;
350         }
351
352         private void setDefault(String defaultStr) {
353             this.defaultStr = defaultStr;
354         }
355
356         @Override
357         public String getUnits() {
358             return unitsStr;
359         }
360
361         public void setUnits(String unitsStr) {
362             this.unitsStr = unitsStr;
363         }
364
365         @Override
366         public int hashCode() {
367             final int prime = 31;
368             int result = 1;
369             result = prime * result + ((qname == null) ? 0 : qname.hashCode());
370             result = prime * result + ((path == null) ? 0 : path.hashCode());
371             return result;
372         }
373
374         @Override
375         public boolean equals(Object obj) {
376             if (this == obj) {
377                 return true;
378             }
379             if (obj == null) {
380                 return false;
381             }
382             if (getClass() != obj.getClass()) {
383                 return false;
384             }
385             LeafSchemaNodeImpl other = (LeafSchemaNodeImpl) obj;
386             if (qname == null) {
387                 if (other.qname != null) {
388                     return false;
389                 }
390             } else if (!qname.equals(other.qname)) {
391                 return false;
392             }
393             if (path == null) {
394                 if (other.path != null) {
395                     return false;
396                 }
397             } else if (!path.equals(other.path)) {
398                 return false;
399             }
400             return true;
401         }
402
403         @Override
404         public String toString() {
405             StringBuilder sb = new StringBuilder(LeafSchemaNodeImpl.class.getSimpleName());
406             sb.append("[");
407             sb.append("qname=" + qname);
408             sb.append(", path=" + path);
409             sb.append("]");
410             return sb.toString();
411         }
412     }
413
414 }