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