2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.yang.model.parser.builder.impl;
10 import java.util.Collections;
11 import java.util.HashSet;
12 import java.util.List;
15 import org.opendaylight.controller.yang.common.QName;
16 import org.opendaylight.controller.yang.model.api.ContainerSchemaNode;
17 import org.opendaylight.controller.yang.model.api.GroupingDefinition;
18 import org.opendaylight.controller.yang.model.api.RpcDefinition;
19 import org.opendaylight.controller.yang.model.api.SchemaPath;
20 import org.opendaylight.controller.yang.model.api.Status;
21 import org.opendaylight.controller.yang.model.api.TypeDefinition;
22 import org.opendaylight.controller.yang.model.api.UnknownSchemaNode;
23 import org.opendaylight.controller.yang.model.parser.builder.api.ChildNodeBuilder;
24 import org.opendaylight.controller.yang.model.parser.builder.api.DataSchemaNodeBuilder;
25 import org.opendaylight.controller.yang.model.parser.builder.api.GroupingBuilder;
26 import org.opendaylight.controller.yang.model.parser.builder.api.SchemaNodeBuilder;
27 import org.opendaylight.controller.yang.model.parser.builder.api.TypeDefinitionAwareBuilder;
28 import org.opendaylight.controller.yang.model.parser.builder.api.TypeDefinitionBuilder;
29 import org.opendaylight.controller.yang.model.parser.builder.api.UsesNodeBuilder;
31 public class RpcDefinitionBuilder implements ChildNodeBuilder,
32 SchemaNodeBuilder, TypeDefinitionAwareBuilder {
34 private final RpcDefinitionImpl instance;
35 private final QName qname;
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>();
41 RpcDefinitionBuilder(QName qname) {
43 this.instance = new RpcDefinitionImpl(qname);
47 public RpcDefinition build() {
48 final ContainerSchemaNode input = inputBuilder.build();
49 final ContainerSchemaNode output = outputBuilder.build();
50 instance.setInput(input);
51 instance.setOutput(output);
54 Set<TypeDefinition<?>> typedefs = new HashSet<TypeDefinition<?>>();
55 for (TypeDefinitionBuilder entry : addedTypedefs) {
56 typedefs.add(entry.build());
58 instance.setTypeDefinitions(typedefs);
61 final Set<GroupingDefinition> groupings = new HashSet<GroupingDefinition>();
62 for (GroupingBuilder entry : addedGroupings) {
63 groupings.add(entry.build());
65 instance.setGroupings(groupings);
70 void setInput(ContainerSchemaNodeBuilder inputBuilder) {
71 this.inputBuilder = inputBuilder;
74 void setOutput(ContainerSchemaNodeBuilder outputBuilder) {
75 this.outputBuilder = outputBuilder;
79 public void addTypedef(TypeDefinitionBuilder type) {
80 addedTypedefs.add(type);
84 public void setPath(SchemaPath schemaPath) {
85 instance.setPath(schemaPath);
89 public void setDescription(String description) {
90 instance.setDescription(description);
94 public void setReference(String reference) {
95 instance.setReference(reference);
99 public void setStatus(Status status) {
100 instance.setStatus(status);
104 public QName getQName() {
109 public void addChildNode(DataSchemaNodeBuilder childNode) {
110 throw new UnsupportedOperationException(
111 "Can not add child node to rpc definition: rpc can not contains child nodes.");
115 public void addGrouping(GroupingBuilder grouping) {
116 addedGroupings.add(grouping);
120 public void addUsesNode(UsesNodeBuilder usesBuilder) {
121 throw new UnsupportedOperationException(
122 "Can not add uses node to rpc definition: rpc can not contains uses nodes.");
126 public int hashCode() {
127 return qname.hashCode();
131 public boolean equals(Object obj) {
135 if (!(obj instanceof RpcDefinitionBuilder)) {
138 RpcDefinitionBuilder other = (RpcDefinitionBuilder) obj;
139 if (other.qname == null) {
140 if (this.qname != null) {
143 } else if (!other.qname.equals(this.qname)) {
149 private static class RpcDefinitionImpl implements RpcDefinition {
151 private final QName qname;
152 private SchemaPath path;
153 private String description;
154 private String reference;
155 private Status status;
156 private ContainerSchemaNode input;
157 private ContainerSchemaNode output;
158 private Set<TypeDefinition<?>> typeDefinitions;
159 private Set<GroupingDefinition> groupings;
160 private List<UnknownSchemaNode> unknownSchemaNodes = Collections.emptyList();
162 private RpcDefinitionImpl(QName qname) {
167 public QName getQName() {
172 public SchemaPath getPath() {
176 private void setPath(SchemaPath path) {
181 public String getDescription() {
185 private void setDescription(String description) {
186 this.description = description;
190 public String getReference() {
194 private void setReference(String reference) {
195 this.reference = reference;
199 public Status getStatus() {
203 private void setStatus(Status status) {
204 this.status = status;
208 public ContainerSchemaNode getInput() {
212 private void setInput(ContainerSchemaNode input) {
217 public ContainerSchemaNode getOutput() {
221 private void setOutput(ContainerSchemaNode output) {
222 this.output = output;
226 public Set<TypeDefinition<?>> getTypeDefinitions() {
227 return typeDefinitions;
230 private void setTypeDefinitions(Set<TypeDefinition<?>> typeDefinitions) {
231 this.typeDefinitions = typeDefinitions;
235 public Set<GroupingDefinition> getGroupings() {
239 private void setGroupings(Set<GroupingDefinition> groupings) {
240 this.groupings = groupings;
244 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
245 return unknownSchemaNodes;
249 public int hashCode() {
250 final int prime = 31;
252 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
253 result = prime * result + ((path == null) ? 0 : path.hashCode());
254 result = prime * result
255 + ((description == null) ? 0 : description.hashCode());
256 result = prime * result
257 + ((reference == null) ? 0 : reference.hashCode());
258 result = prime * result
259 + ((status == null) ? 0 : status.hashCode());
260 result = prime * result
261 + ((input == null) ? 0 : input.hashCode());
262 result = prime * result
263 + ((output == null) ? 0 : output.hashCode());
264 result = prime * result
265 + ((typeDefinitions == null) ? 0 : typeDefinitions.hashCode());
266 result = prime * result
267 + ((groupings == null) ? 0 : groupings.hashCode());
272 public boolean equals(Object obj) {
279 if (getClass() != obj.getClass()) {
282 RpcDefinitionImpl other = (RpcDefinitionImpl) obj;
284 if (other.qname != null) {
287 } else if (!qname.equals(other.qname)) {
291 if (other.path != null) {
294 } else if (!path.equals(other.path)) {
297 if (description == null) {
298 if (other.description != null) {
301 } else if (!description.equals(other.description)) {
304 if (reference == null) {
305 if (other.reference != null) {
308 } else if (!reference.equals(other.reference)) {
311 if (status == null) {
312 if (other.status != null) {
315 } else if (!status.equals(other.status)) {
319 if (other.input != null) {
322 } else if (!input.equals(other.input)) {
325 if (output == null) {
326 if (other.output != null) {
329 } else if (!output.equals(other.output)) {
332 if (typeDefinitions == null) {
333 if (other.typeDefinitions != null) {
336 } else if (!typeDefinitions.equals(other.typeDefinitions)) {
339 if (groupings == null) {
340 if (other.groupings != null) {
343 } else if (!groupings.equals(other.groupings)) {
350 public String toString() {
351 StringBuilder sb = new StringBuilder(
352 RpcDefinitionImpl.class.getSimpleName() + "[");
353 sb.append("qname=" + qname);
354 sb.append(", path=" + path);
355 sb.append(", description=" + description);
356 sb.append(", reference=" + reference);
357 sb.append(", status=" + status);
358 sb.append(", input=" + input);
359 sb.append(", output=" + output + "]");
360 return sb.toString();