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