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