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.ArrayList;
11 import java.util.Collections;
12 import java.util.HashSet;
13 import java.util.List;
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.model.parser.builder.api.ChildNodeBuilder;
25 import org.opendaylight.controller.yang.model.parser.builder.api.DataSchemaNodeBuilder;
26 import org.opendaylight.controller.yang.model.parser.builder.api.GroupingBuilder;
27 import org.opendaylight.controller.yang.model.parser.builder.api.SchemaNodeBuilder;
28 import org.opendaylight.controller.yang.model.parser.builder.api.TypeDefinitionAwareBuilder;
29 import org.opendaylight.controller.yang.model.parser.builder.api.TypeDefinitionBuilder;
30 import org.opendaylight.controller.yang.model.parser.builder.api.UsesNodeBuilder;
32 public class RpcDefinitionBuilder implements ChildNodeBuilder,
33 SchemaNodeBuilder, TypeDefinitionAwareBuilder {
35 private final RpcDefinitionImpl instance;
36 private final QName qname;
37 private ContainerSchemaNodeBuilder inputBuilder;
38 private ContainerSchemaNodeBuilder outputBuilder;
39 private final Set<TypeDefinitionBuilder> addedTypedefs = new HashSet<TypeDefinitionBuilder>();
40 private final Set<GroupingBuilder> addedGroupings = new HashSet<GroupingBuilder>();
41 private final List<UnknownSchemaNodeBuilder> addedUnknownNodes = new ArrayList<UnknownSchemaNodeBuilder>();
43 RpcDefinitionBuilder(QName qname) {
45 this.instance = new RpcDefinitionImpl(qname);
49 public RpcDefinition build() {
50 final ContainerSchemaNode input = inputBuilder.build();
51 final ContainerSchemaNode output = outputBuilder.build();
52 instance.setInput(input);
53 instance.setOutput(output);
56 Set<TypeDefinition<?>> typedefs = new HashSet<TypeDefinition<?>>();
57 for (TypeDefinitionBuilder entry : addedTypedefs) {
58 typedefs.add(entry.build());
60 instance.setTypeDefinitions(typedefs);
63 final Set<GroupingDefinition> groupings = new HashSet<GroupingDefinition>();
64 for (GroupingBuilder entry : addedGroupings) {
65 groupings.add(entry.build());
67 instance.setGroupings(groupings);
70 final List<UnknownSchemaNode> unknownNodes = new ArrayList<UnknownSchemaNode>();
71 for(UnknownSchemaNodeBuilder b : addedUnknownNodes) {
72 unknownNodes.add(b.build());
74 instance.setUnknownSchemaNodes(unknownNodes);
79 void setInput(ContainerSchemaNodeBuilder inputBuilder) {
80 this.inputBuilder = inputBuilder;
83 void setOutput(ContainerSchemaNodeBuilder outputBuilder) {
84 this.outputBuilder = outputBuilder;
88 public void addTypedef(TypeDefinitionBuilder type) {
89 addedTypedefs.add(type);
93 public void setPath(SchemaPath schemaPath) {
94 instance.setPath(schemaPath);
98 public void setDescription(String description) {
99 instance.setDescription(description);
103 public void setReference(String reference) {
104 instance.setReference(reference);
108 public void setStatus(Status status) {
109 instance.setStatus(status);
113 public QName getQName() {
118 public void addChildNode(DataSchemaNodeBuilder childNode) {
119 throw new UnsupportedOperationException(
120 "Can not add child node to rpc definition: rpc can not contains child nodes.");
124 public void addGrouping(GroupingBuilder grouping) {
125 addedGroupings.add(grouping);
129 public void addUsesNode(UsesNodeBuilder usesBuilder) {
130 throw new UnsupportedOperationException(
131 "Can not add uses node to rpc definition: rpc can not contains uses nodes.");
135 public void addUnknownSchemaNode(UnknownSchemaNodeBuilder unknownSchemaNodeBuilder) {
136 addedUnknownNodes.add(unknownSchemaNodeBuilder);
140 public int hashCode() {
141 return qname.hashCode();
145 public boolean equals(Object obj) {
149 if (!(obj instanceof RpcDefinitionBuilder)) {
152 RpcDefinitionBuilder other = (RpcDefinitionBuilder) obj;
153 if (other.qname == null) {
154 if (this.qname != null) {
157 } else if (!other.qname.equals(this.qname)) {
163 private static class RpcDefinitionImpl implements RpcDefinition {
165 private final QName qname;
166 private SchemaPath path;
167 private String description;
168 private String reference;
169 private Status status;
170 private ContainerSchemaNode input;
171 private ContainerSchemaNode output;
172 private Set<TypeDefinition<?>> typeDefinitions;
173 private Set<GroupingDefinition> groupings;
174 private List<UnknownSchemaNode> unknownSchemaNodes = Collections.emptyList();
176 private RpcDefinitionImpl(QName qname) {
181 public QName getQName() {
186 public SchemaPath getPath() {
190 private void setPath(SchemaPath path) {
195 public String getDescription() {
199 private void setDescription(String description) {
200 this.description = description;
204 public String getReference() {
208 private void setReference(String reference) {
209 this.reference = reference;
213 public Status getStatus() {
217 private void setStatus(Status status) {
218 this.status = status;
222 public ContainerSchemaNode getInput() {
226 private void setInput(ContainerSchemaNode input) {
231 public ContainerSchemaNode getOutput() {
235 private void setOutput(ContainerSchemaNode output) {
236 this.output = output;
240 public Set<TypeDefinition<?>> getTypeDefinitions() {
241 return typeDefinitions;
244 private void setTypeDefinitions(Set<TypeDefinition<?>> typeDefinitions) {
245 this.typeDefinitions = typeDefinitions;
249 public Set<GroupingDefinition> getGroupings() {
253 private void setGroupings(Set<GroupingDefinition> groupings) {
254 this.groupings = groupings;
258 public List<UnknownSchemaNode> getUnknownSchemaNodes() {
259 return unknownSchemaNodes;
262 private void setUnknownSchemaNodes(List<UnknownSchemaNode> unknownSchemaNodes) {
263 if(unknownSchemaNodes != null) {
264 this.unknownSchemaNodes = unknownSchemaNodes;
269 public int hashCode() {
270 final int prime = 31;
272 result = prime * result + ((qname == null) ? 0 : qname.hashCode());
277 public boolean equals(Object obj) {
284 if (getClass() != obj.getClass()) {
287 RpcDefinitionImpl other = (RpcDefinitionImpl) obj;
289 if (other.qname != null) {
292 } else if (!qname.equals(other.qname)) {
299 public String toString() {
300 StringBuilder sb = new StringBuilder(
301 RpcDefinitionImpl.class.getSimpleName() + "[");
302 sb.append("qname=" + qname);
303 sb.append(", path=" + path);
304 sb.append(", description=" + description);
305 sb.append(", reference=" + reference);
306 sb.append(", status=" + status);
307 sb.append(", input=" + input);
308 sb.append(", output=" + output + "]");
309 return sb.toString();