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