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