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