2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
\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
8 package org.opendaylight.controller.model.parser.builder;
\r
10 import java.util.HashSet;
\r
11 import java.util.List;
\r
12 import java.util.Set;
\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
30 public class RpcDefinitionBuilder implements ChildNodeBuilder,
\r
31 SchemaNodeBuilder, TypeDefinitionAwareBuilder {
\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
40 RpcDefinitionBuilder(QName qname) {
\r
42 this.instance = new RpcDefinitionImpl(qname);
\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
53 Set<TypeDefinition<?>> typedefs = new HashSet<TypeDefinition<?>>();
\r
54 for (TypeDefinitionBuilder entry : addedTypedefs) {
\r
55 typedefs.add(entry.build());
\r
57 instance.setTypeDefinitions(typedefs);
\r
60 final Set<GroupingDefinition> groupings = new HashSet<GroupingDefinition>();
\r
61 for (GroupingBuilder entry : addedGroupings) {
\r
62 groupings.add(entry.build());
\r
64 instance.setGroupings(groupings);
\r
69 void setInput(ContainerSchemaNodeBuilder inputBuilder) {
\r
70 this.inputBuilder = inputBuilder;
\r
73 void setOutput(ContainerSchemaNodeBuilder outputBuilder) {
\r
74 this.outputBuilder = outputBuilder;
\r
78 public void addTypedef(TypeDefinitionBuilder type) {
\r
79 addedTypedefs.add(type);
\r
83 public void setPath(SchemaPath schemaPath) {
\r
84 instance.setPath(schemaPath);
\r
88 public void setDescription(String description) {
\r
89 instance.setDescription(description);
\r
93 public void setReference(String reference) {
\r
94 instance.setReference(reference);
\r
98 public void setStatus(Status status) {
\r
99 instance.setStatus(status);
\r
103 public QName getQName() {
\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
114 public void addGrouping(GroupingBuilder grouping) {
\r
115 addedGroupings.add(grouping);
\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
125 public int hashCode() {
\r
126 return qname.hashCode();
\r
130 public boolean equals(Object obj) {
\r
134 if (!(obj instanceof RpcDefinitionBuilder)) {
\r
137 RpcDefinitionBuilder other = (RpcDefinitionBuilder) obj;
\r
138 if (other.qname == null) {
\r
139 if (this.qname != null) {
\r
142 } else if (!other.qname.equals(this.qname)) {
\r
148 private static class RpcDefinitionImpl implements RpcDefinition {
\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
156 private ContainerSchemaNode input;
\r
157 private ContainerSchemaNode output;
\r
159 private Set<TypeDefinition<?>> typeDefinitions;
\r
160 private Set<GroupingDefinition> groupings;
\r
162 private RpcDefinitionImpl(QName qname) {
\r
163 this.qname = qname;
\r
167 public QName getQName() {
\r
172 public SchemaPath getPath() {
\r
176 private void setPath(SchemaPath path) {
\r
181 public String getDescription() {
\r
182 return description;
\r
185 private void setDescription(String description) {
\r
186 this.description = description;
\r
190 public String getReference() {
\r
194 private void setReference(String reference) {
\r
195 this.reference = reference;
\r
199 public Status getStatus() {
\r
203 private void setStatus(Status status) {
\r
204 this.status = status;
\r
208 public ContainerSchemaNode getInput() {
\r
212 private void setInput(ContainerSchemaNode input) {
\r
213 this.input = input;
\r
217 public ContainerSchemaNode getOutput() {
\r
221 private void setOutput(ContainerSchemaNode output) {
\r
222 this.output = output;
\r
226 public Set<TypeDefinition<?>> getTypeDefinitions() {
\r
227 return typeDefinitions;
\r
230 private void setTypeDefinitions(Set<TypeDefinition<?>> typeDefinitions) {
\r
231 this.typeDefinitions = typeDefinitions;
\r
235 public Set<GroupingDefinition> getGroupings() {
\r
239 private void setGroupings(Set<GroupingDefinition> groupings) {
\r
240 this.groupings = groupings;
\r
244 public List<ExtensionDefinition> getExtensionSchemaNodes() {
\r
245 // TODO Auto-generated method stub
\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