Merge "Custom Node Type jaxb string to id"
[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 final class LeafSchemaNodeBuilder extends AbstractTypeAwareBuilder
26         implements DataSchemaNodeBuilder, SchemaNodeBuilder {
27     private boolean isBuilt;
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 (!isBuilt) {
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             isBuilt = 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     public boolean isConfiguration() {
156         return configuration;
157     }
158
159     @Override
160     public void setConfiguration(final boolean configuration) {
161         instance.setConfiguration(configuration);
162     }
163
164     public String getDefaultStr() {
165         return defaultStr;
166     }
167
168     public void setDefaultStr(String defaultStr) {
169         this.defaultStr = defaultStr;
170     }
171
172     public String getUnits() {
173         return unitsStr;
174     }
175
176     public void setUnits(String unitsStr) {
177         this.unitsStr = unitsStr;
178     }
179
180     @Override
181     public String toString() {
182         return "leaf " + qname.getLocalName();
183     }
184
185     private final class LeafSchemaNodeImpl implements LeafSchemaNode {
186         private final QName qname;
187         private SchemaPath path;
188         private String description;
189         private String reference;
190         private Status status = Status.CURRENT;
191         private boolean augmenting;
192         private boolean configuration;
193         private ConstraintDefinition constraintsDef;
194         private TypeDefinition<?> type;
195         private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
196         private String defaultStr;
197         private String unitsStr;
198
199         private LeafSchemaNodeImpl(final QName qname) {
200             this.qname = qname;
201         }
202
203         @Override
204         public QName getQName() {
205             return qname;
206         }
207
208         @Override
209         public SchemaPath getPath() {
210             return path;
211         }
212
213         private void setPath(final SchemaPath path) {
214             this.path = path;
215         }
216
217         @Override
218         public String getDescription() {
219             return description;
220         }
221
222         private void setDescription(String description) {
223             this.description = description;
224         }
225
226         @Override
227         public String getReference() {
228             return reference;
229         }
230
231         private void setReference(String reference) {
232             this.reference = reference;
233         }
234
235         @Override
236         public Status getStatus() {
237             return status;
238         }
239
240         private void setStatus(Status status) {
241             if (status != null) {
242                 this.status = status;
243             }
244         }
245
246         @Override
247         public boolean isAugmenting() {
248             return augmenting;
249         }
250
251         private void setAugmenting(boolean augmenting) {
252             this.augmenting = augmenting;
253         }
254
255         @Override
256         public boolean isConfiguration() {
257             return configuration;
258         }
259
260         private void setConfiguration(boolean configuration) {
261             this.configuration = configuration;
262         }
263
264         @Override
265         public ConstraintDefinition getConstraints() {
266             return constraintsDef;
267         }
268
269         private void setConstraints(ConstraintDefinition constraintsDef) {
270             this.constraintsDef = constraintsDef;
271         }
272
273         @Override
274         public TypeDefinition<?> getType() {
275             return type;
276         }
277
278         private void setType(TypeDefinition<? extends TypeDefinition<?>> type) {
279             this.type = type;
280         }
281
282         @Override
283         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
284             return unknownNodes;
285         }
286
287         private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownNodes) {
288             if (unknownNodes != null) {
289                 this.unknownNodes = unknownNodes;
290             }
291         }
292
293         public String getDefault() {
294             return defaultStr;
295         }
296
297         private void setDefault(String defaultStr) {
298             this.defaultStr = defaultStr;
299         }
300
301         public String getUnits() {
302             return unitsStr;
303         }
304
305         public void setUnits(String unitsStr) {
306             this.unitsStr = unitsStr;
307         }
308
309         @Override
310         public int hashCode() {
311             final int prime = 31;
312             int result = 1;
313             result = prime * result + ((qname == null) ? 0 : qname.hashCode());
314             result = prime * result + ((path == null) ? 0 : path.hashCode());
315             return result;
316         }
317
318         @Override
319         public boolean equals(Object obj) {
320             if (this == obj) {
321                 return true;
322             }
323             if (obj == null) {
324                 return false;
325             }
326             if (getClass() != obj.getClass()) {
327                 return false;
328             }
329             LeafSchemaNodeImpl other = (LeafSchemaNodeImpl) obj;
330             if (qname == null) {
331                 if (other.qname != null) {
332                     return false;
333                 }
334             } else if (!qname.equals(other.qname)) {
335                 return false;
336             }
337             if (path == null) {
338                 if (other.path != null) {
339                     return false;
340                 }
341             } else if (!path.equals(other.path)) {
342                 return false;
343             }
344             return true;
345         }
346
347         @Override
348         public String toString() {
349             StringBuilder sb = new StringBuilder(
350                     LeafSchemaNodeImpl.class.getSimpleName());
351             sb.append("[");
352             sb.append("qname=" + qname);
353             sb.append(", path=" + path);
354             sb.append("]");
355             return sb.toString();
356         }
357     }
358
359 }