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