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