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