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