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