BUG-865: deprecate pre-Beryllium parser elements
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / RpcDefinitionBuilder.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.parser.builder.impl;
9
10 import com.google.common.base.Preconditions;
11 import com.google.common.collect.ImmutableList;
12 import com.google.common.collect.ImmutableSet;
13 import java.util.HashSet;
14 import java.util.Objects;
15 import java.util.Set;
16 import java.util.TreeSet;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
19 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
20 import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
21 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
22 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
23 import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder;
24 import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;
25 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
26 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractSchemaNodeBuilder;
27 import org.opendaylight.yangtools.yang.parser.builder.util.Comparators;
28
29 /**
30  * @deprecated Pre-Beryllium implementation, scheduled for removal.
31  */
32 @Deprecated
33 public final class RpcDefinitionBuilder extends AbstractSchemaNodeBuilder {
34     private RpcDefinitionImpl instance;
35     private ContainerSchemaNodeBuilder inputBuilder;
36     private ContainerSchemaNodeBuilder outputBuilder;
37     private final Set<TypeDefinitionBuilder> addedTypedefs = new HashSet<>();
38     private final Set<GroupingBuilder> addedGroupings = new HashSet<>();
39
40     RpcDefinitionBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
41         super(moduleName, line, qname);
42         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
43     }
44
45     public ContainerSchemaNodeBuilder getInput() {
46         return inputBuilder;
47     }
48
49     public ContainerSchemaNodeBuilder getOutput() {
50         return outputBuilder;
51     }
52
53     @Override
54     public RpcDefinition build() {
55         if (instance != null) {
56             return instance;
57         }
58
59         instance = new RpcDefinitionImpl(qname, schemaPath);
60
61         final ContainerSchemaNode input = inputBuilder == null ? null : inputBuilder.build();
62         final ContainerSchemaNode output = outputBuilder == null ? null : outputBuilder.build();
63         instance.setInput(input);
64         instance.setOutput(output);
65
66         instance.description = description;
67         instance.reference = reference;
68         instance.status = status;
69
70         // TYPEDEFS
71         final Set<TypeDefinition<?>> typedefs = new TreeSet<>(Comparators.SCHEMA_NODE_COMP);
72         for (TypeDefinitionBuilder entry : addedTypedefs) {
73             typedefs.add(entry.build());
74         }
75         instance.typeDefinitions = ImmutableSet.copyOf(typedefs);
76
77         // GROUPINGS
78         final Set<GroupingDefinition> groupings = new TreeSet<>(Comparators.SCHEMA_NODE_COMP);
79         for (GroupingBuilder builder : addedGroupings) {
80             groupings.add(builder.build());
81         }
82         instance.groupings = ImmutableSet.copyOf(groupings);
83
84         // UNKNOWN NODES
85         for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
86             unknownNodes.add(b.build());
87         }
88         instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
89
90         return instance;
91     }
92
93     void setInput(final ContainerSchemaNodeBuilder inputBuilder) {
94         this.inputBuilder = inputBuilder;
95     }
96
97     void setOutput(final ContainerSchemaNodeBuilder outputBuilder) {
98         this.outputBuilder = outputBuilder;
99     }
100
101     public Set<TypeDefinitionBuilder> getTypeDefinitions() {
102         return addedTypedefs;
103     }
104
105     public void addTypedef(final TypeDefinitionBuilder type) {
106         addedTypedefs.add(type);
107     }
108
109     public Set<GroupingBuilder> getGroupings() {
110         return addedGroupings;
111     }
112
113     public void addGrouping(final GroupingBuilder grouping) {
114         addedGroupings.add(grouping);
115     }
116
117     @Override
118     public int hashCode() {
119         final int prime = 31;
120         int result = 1;
121         result = prime * result + Objects.hashCode(qname);
122         result = prime * result + Objects.hashCode(schemaPath);
123         return result;
124     }
125
126     @Override
127     public boolean equals(final Object obj) {
128         if (obj == null) {
129             return false;
130         }
131         if (!(obj instanceof RpcDefinitionBuilder)) {
132             return false;
133         }
134         final RpcDefinitionBuilder other = (RpcDefinitionBuilder) obj;
135         if (other.qname == null) {
136             if (this.qname != null) {
137                 return false;
138             }
139         } else if (!other.qname.equals(this.qname)) {
140             return false;
141         }
142         if (other.schemaPath == null) {
143             if (this.schemaPath != null) {
144                 return false;
145             }
146         } else if (!other.schemaPath.equals(this.schemaPath)) {
147             return false;
148         }
149         return true;
150     }
151
152     @Override
153     public String toString() {
154         return "rpc " + qname.getLocalName();
155     }
156
157 }