Merge "Custom Node Type jaxb string to id"
[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 final class RpcDefinitionBuilder implements SchemaNodeBuilder,
30         TypeDefinitionAwareBuilder {
31     private boolean isBuilt;
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 (!isBuilt) {
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             isBuilt = 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     public Set<TypeDefinitionBuilder> getTypeDefinitions() {
98         return addedTypedefs;
99     }
100
101     @Override
102     public void addTypedef(final TypeDefinitionBuilder type) {
103         addedTypedefs.add(type);
104     }
105
106     public void addGrouping(GroupingBuilder grouping) {
107         addedGroupings.add(grouping);
108     }
109
110     @Override
111     public SchemaPath getPath() {
112         return schemaPath;
113     }
114
115     @Override
116     public void setPath(SchemaPath schemaPath) {
117         this.schemaPath = schemaPath;
118     }
119
120     @Override
121     public void setDescription(final String description) {
122         instance.setDescription(description);
123     }
124
125     @Override
126     public void setReference(final String reference) {
127         instance.setReference(reference);
128     }
129
130     @Override
131     public void setStatus(final Status status) {
132         instance.setStatus(status);
133     }
134
135     @Override
136     public QName getQName() {
137         return null;
138     }
139
140     @Override
141     public void addUnknownSchemaNode(final UnknownSchemaNodeBuilder unknownNode) {
142         addedUnknownNodes.add(unknownNode);
143     }
144
145     @Override
146     public int hashCode() {
147         return qname.hashCode();
148     }
149
150     @Override
151     public boolean equals(Object obj) {
152         if (obj == null) {
153             return false;
154         }
155         if (!(obj instanceof RpcDefinitionBuilder)) {
156             return false;
157         }
158         final RpcDefinitionBuilder other = (RpcDefinitionBuilder) obj;
159         if (other.qname == null) {
160             if (this.qname != null) {
161                 return false;
162             }
163         } else if (!other.qname.equals(this.qname)) {
164             return false;
165         }
166         return true;
167     }
168
169     private final class RpcDefinitionImpl implements RpcDefinition {
170         private final QName qname;
171         private SchemaPath path;
172         private String description;
173         private String reference;
174         private Status status;
175         private ContainerSchemaNode input;
176         private ContainerSchemaNode output;
177         private Set<TypeDefinition<?>> typeDefinitions;
178         private Set<GroupingDefinition> groupings;
179         private List<UnknownSchemaNode> unknownNodes = Collections.emptyList();
180
181         private RpcDefinitionImpl(final QName qname) {
182             this.qname = qname;
183         }
184
185         @Override
186         public QName getQName() {
187             return qname;
188         }
189
190         @Override
191         public SchemaPath getPath() {
192             return path;
193         }
194
195         private void setPath(SchemaPath path) {
196             this.path = path;
197         }
198
199         @Override
200         public String getDescription() {
201             return description;
202         }
203
204         private void setDescription(String description) {
205             this.description = description;
206         }
207
208         @Override
209         public String getReference() {
210             return reference;
211         }
212
213         private void setReference(String reference) {
214             this.reference = reference;
215         }
216
217         @Override
218         public Status getStatus() {
219             return status;
220         }
221
222         private void setStatus(Status status) {
223             this.status = status;
224         }
225
226         @Override
227         public ContainerSchemaNode getInput() {
228             return input;
229         }
230
231         private void setInput(ContainerSchemaNode input) {
232             this.input = input;
233         }
234
235         @Override
236         public ContainerSchemaNode getOutput() {
237             return output;
238         }
239
240         private void setOutput(ContainerSchemaNode output) {
241             this.output = output;
242         }
243
244         @Override
245         public Set<TypeDefinition<?>> getTypeDefinitions() {
246             return typeDefinitions;
247         }
248
249         private void setTypeDefinitions(Set<TypeDefinition<?>> typeDefinitions) {
250             this.typeDefinitions = typeDefinitions;
251         }
252
253         @Override
254         public Set<GroupingDefinition> getGroupings() {
255             return groupings;
256         }
257
258         private void setGroupings(Set<GroupingDefinition> groupings) {
259             this.groupings = groupings;
260         }
261
262         @Override
263         public List<UnknownSchemaNode> getUnknownSchemaNodes() {
264             return unknownNodes;
265         }
266
267         private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownNodes) {
268             if (unknownNodes != null) {
269                 this.unknownNodes = unknownNodes;
270             }
271         }
272
273         @Override
274         public int hashCode() {
275             final int prime = 31;
276             int result = 1;
277             result = prime * result + ((qname == null) ? 0 : qname.hashCode());
278             result = prime * result + ((path == null) ? 0 : path.hashCode());
279             return result;
280         }
281
282         @Override
283         public boolean equals(Object obj) {
284             if (this == obj) {
285                 return true;
286             }
287             if (obj == null) {
288                 return false;
289             }
290             if (getClass() != obj.getClass()) {
291                 return false;
292             }
293             final RpcDefinitionImpl other = (RpcDefinitionImpl) obj;
294             if (qname == null) {
295                 if (other.qname != null) {
296                     return false;
297                 }
298             } else if (!qname.equals(other.qname)) {
299                 return false;
300             }
301             if (path == null) {
302                 if (other.path != null) {
303                     return false;
304                 }
305             } else if (!path.equals(other.path)) {
306                 return false;
307             }
308             return true;
309         }
310
311         @Override
312         public String toString() {
313             StringBuilder sb = new StringBuilder(
314                     RpcDefinitionImpl.class.getSimpleName() + "[");
315             sb.append("qname=" + qname);
316             sb.append(", path=" + path);
317             sb.append(", input=" + input);
318             sb.append(", output=" + output + "]");
319             return sb.toString();
320         }
321     }
322
323 }