Initial opendaylight infrastructure commit!!
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / model / parser / builder / 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.controller.model.parser.builder;\r
9 \r
10 import java.util.HashSet;\r
11 import java.util.List;\r
12 import java.util.Set;\r
13 \r
14 import org.opendaylight.controller.model.parser.api.ChildNodeBuilder;\r
15 import org.opendaylight.controller.model.parser.api.DataSchemaNodeBuilder;\r
16 import org.opendaylight.controller.model.parser.api.GroupingBuilder;\r
17 import org.opendaylight.controller.model.parser.api.SchemaNodeBuilder;\r
18 import org.opendaylight.controller.model.parser.api.TypeDefinitionAwareBuilder;\r
19 import org.opendaylight.controller.model.parser.api.TypeDefinitionBuilder;\r
20 import org.opendaylight.controller.model.parser.api.UsesNodeBuilder;\r
21 import org.opendaylight.controller.yang.common.QName;\r
22 import org.opendaylight.controller.yang.model.api.ContainerSchemaNode;\r
23 import org.opendaylight.controller.yang.model.api.ExtensionDefinition;\r
24 import org.opendaylight.controller.yang.model.api.GroupingDefinition;\r
25 import org.opendaylight.controller.yang.model.api.RpcDefinition;\r
26 import org.opendaylight.controller.yang.model.api.SchemaPath;\r
27 import org.opendaylight.controller.yang.model.api.Status;\r
28 import org.opendaylight.controller.yang.model.api.TypeDefinition;\r
29 \r
30 public class RpcDefinitionBuilder implements ChildNodeBuilder,\r
31         SchemaNodeBuilder, TypeDefinitionAwareBuilder {\r
32 \r
33     private final RpcDefinitionImpl instance;\r
34     private final QName qname;\r
35     private ContainerSchemaNodeBuilder inputBuilder;\r
36     private ContainerSchemaNodeBuilder outputBuilder;\r
37     private final Set<TypeDefinitionBuilder> addedTypedefs = new HashSet<TypeDefinitionBuilder>();\r
38     private final Set<GroupingBuilder> addedGroupings = new HashSet<GroupingBuilder>();\r
39 \r
40     RpcDefinitionBuilder(QName qname) {\r
41         this.qname = qname;\r
42         this.instance = new RpcDefinitionImpl(qname);\r
43     }\r
44 \r
45     @Override\r
46     public RpcDefinition build() {\r
47         final ContainerSchemaNode input = inputBuilder.build();\r
48         final ContainerSchemaNode output = outputBuilder.build();\r
49         instance.setInput(input);\r
50         instance.setOutput(output);\r
51 \r
52         // TYPEDEFS\r
53         Set<TypeDefinition<?>> typedefs = new HashSet<TypeDefinition<?>>();\r
54         for (TypeDefinitionBuilder entry : addedTypedefs) {\r
55             typedefs.add(entry.build());\r
56         }\r
57         instance.setTypeDefinitions(typedefs);\r
58 \r
59         // GROUPINGS\r
60         final Set<GroupingDefinition> groupings = new HashSet<GroupingDefinition>();\r
61         for (GroupingBuilder entry : addedGroupings) {\r
62             groupings.add(entry.build());\r
63         }\r
64         instance.setGroupings(groupings);\r
65 \r
66         return instance;\r
67     }\r
68 \r
69     void setInput(ContainerSchemaNodeBuilder inputBuilder) {\r
70         this.inputBuilder = inputBuilder;\r
71     }\r
72 \r
73     void setOutput(ContainerSchemaNodeBuilder outputBuilder) {\r
74         this.outputBuilder = outputBuilder;\r
75     }\r
76 \r
77     @Override\r
78     public void addTypedef(TypeDefinitionBuilder type) {\r
79         addedTypedefs.add(type);\r
80     }\r
81 \r
82     @Override\r
83     public void setPath(SchemaPath schemaPath) {\r
84         instance.setPath(schemaPath);\r
85     }\r
86 \r
87     @Override\r
88     public void setDescription(String description) {\r
89         instance.setDescription(description);\r
90     }\r
91 \r
92     @Override\r
93     public void setReference(String reference) {\r
94         instance.setReference(reference);\r
95     }\r
96 \r
97     @Override\r
98     public void setStatus(Status status) {\r
99         instance.setStatus(status);\r
100     }\r
101 \r
102     @Override\r
103     public QName getQName() {\r
104         return null;\r
105     }\r
106 \r
107     @Override\r
108     public void addChildNode(DataSchemaNodeBuilder childNode) {\r
109         throw new UnsupportedOperationException(\r
110                 "Can not add child node to rpc definition: rpc can not contains child nodes.");\r
111     }\r
112 \r
113     @Override\r
114     public void addGrouping(GroupingBuilder grouping) {\r
115         addedGroupings.add(grouping);\r
116     }\r
117 \r
118     @Override\r
119     public void addUsesNode(UsesNodeBuilder usesBuilder) {\r
120         throw new UnsupportedOperationException(\r
121                 "Can not add uses node to rpc definition: rpc can not contains uses nodes.");\r
122     }\r
123 \r
124     @Override\r
125     public int hashCode() {\r
126         return qname.hashCode();\r
127     }\r
128 \r
129     @Override\r
130     public boolean equals(Object obj) {\r
131         if (obj == null) {\r
132             return false;\r
133         }\r
134         if (!(obj instanceof RpcDefinitionBuilder)) {\r
135             return false;\r
136         }\r
137         RpcDefinitionBuilder other = (RpcDefinitionBuilder) obj;\r
138         if (other.qname == null) {\r
139             if (this.qname != null) {\r
140                 return false;\r
141             }\r
142         } else if (!other.qname.equals(this.qname)) {\r
143             return false;\r
144         }\r
145         return true;\r
146     }\r
147 \r
148     private static class RpcDefinitionImpl implements RpcDefinition {\r
149 \r
150         private final QName qname;\r
151         private SchemaPath path;\r
152         private String description;\r
153         private String reference;\r
154         private Status status;\r
155 \r
156         private ContainerSchemaNode input;\r
157         private ContainerSchemaNode output;\r
158 \r
159         private Set<TypeDefinition<?>> typeDefinitions;\r
160         private Set<GroupingDefinition> groupings;\r
161 \r
162         private RpcDefinitionImpl(QName qname) {\r
163             this.qname = qname;\r
164         }\r
165 \r
166         @Override\r
167         public QName getQName() {\r
168             return qname;\r
169         }\r
170 \r
171         @Override\r
172         public SchemaPath getPath() {\r
173             return path;\r
174         }\r
175 \r
176         private void setPath(SchemaPath path) {\r
177             this.path = path;\r
178         }\r
179 \r
180         @Override\r
181         public String getDescription() {\r
182             return description;\r
183         }\r
184 \r
185         private void setDescription(String description) {\r
186             this.description = description;\r
187         }\r
188 \r
189         @Override\r
190         public String getReference() {\r
191             return reference;\r
192         }\r
193 \r
194         private void setReference(String reference) {\r
195             this.reference = reference;\r
196         }\r
197 \r
198         @Override\r
199         public Status getStatus() {\r
200             return status;\r
201         }\r
202 \r
203         private void setStatus(Status status) {\r
204             this.status = status;\r
205         }\r
206 \r
207         @Override\r
208         public ContainerSchemaNode getInput() {\r
209             return input;\r
210         }\r
211 \r
212         private void setInput(ContainerSchemaNode input) {\r
213             this.input = input;\r
214         }\r
215 \r
216         @Override\r
217         public ContainerSchemaNode getOutput() {\r
218             return output;\r
219         }\r
220 \r
221         private void setOutput(ContainerSchemaNode output) {\r
222             this.output = output;\r
223         }\r
224 \r
225         @Override\r
226         public Set<TypeDefinition<?>> getTypeDefinitions() {\r
227             return typeDefinitions;\r
228         }\r
229 \r
230         private void setTypeDefinitions(Set<TypeDefinition<?>> typeDefinitions) {\r
231             this.typeDefinitions = typeDefinitions;\r
232         }\r
233 \r
234         @Override\r
235         public Set<GroupingDefinition> getGroupings() {\r
236             return groupings;\r
237         }\r
238 \r
239         private void setGroupings(Set<GroupingDefinition> groupings) {\r
240             this.groupings = groupings;\r
241         }\r
242 \r
243         @Override\r
244         public List<ExtensionDefinition> getExtensionSchemaNodes() {\r
245             // TODO Auto-generated method stub\r
246             return null;\r
247         }\r
248 \r
249         @Override\r
250         public String toString() {\r
251             StringBuilder sb = new StringBuilder(\r
252                     RpcDefinitionImpl.class.getSimpleName() + "[");\r
253             sb.append("qname=" + qname);\r
254             sb.append(", path=" + path);\r
255             sb.append(", description=" + description);\r
256             sb.append(", reference=" + reference);\r
257             sb.append(", status=" + status);\r
258             sb.append(", input=" + input);\r
259             sb.append(", output=" + output + "]");\r
260             return sb.toString();\r
261         }\r
262     }\r
263 \r
264 }\r