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