BUG-865: deprecate pre-Beryllium parser elements
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / builder / impl / ChoiceCaseBuilder.java
1 /*
2  * Copyright (c) 2014 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.ArrayList;
14 import java.util.List;
15 import java.util.Objects;
16 import org.opendaylight.yangtools.yang.common.QName;
17 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
18 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
19 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
20 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationSchemaBuilder;
21 import org.opendaylight.yangtools.yang.parser.builder.api.AugmentationTargetBuilder;
22 import org.opendaylight.yangtools.yang.parser.builder.api.ConstraintsBuilder;
23 import org.opendaylight.yangtools.yang.parser.builder.api.DataSchemaNodeBuilder;
24 import org.opendaylight.yangtools.yang.parser.builder.api.GroupingBuilder;
25 import org.opendaylight.yangtools.yang.parser.builder.api.SchemaNodeBuilder;
26 import org.opendaylight.yangtools.yang.parser.builder.api.TypeDefinitionBuilder;
27 import org.opendaylight.yangtools.yang.parser.builder.api.UnknownSchemaNodeBuilder;
28 import org.opendaylight.yangtools.yang.parser.builder.util.AbstractDocumentedDataNodeContainerBuilder;
29 import org.opendaylight.yangtools.yang.parser.util.YangParseException;
30
31 /**
32  * @deprecated Pre-Beryllium implementation, scheduled for removal.
33  */
34 @Deprecated
35 public final class ChoiceCaseBuilder extends AbstractDocumentedDataNodeContainerBuilder implements DataSchemaNodeBuilder,
36 AugmentationTargetBuilder {
37     private ChoiceCaseNodeImpl instance;
38     // SchemaNode args
39     private SchemaPath schemaPath;
40     // DataSchemaNode args
41     private boolean augmenting;
42     private ChoiceCaseNode originalNode;
43     private ChoiceCaseBuilder originalBuilder;
44     private boolean addedByUses;
45     private final ConstraintsBuilder constraints;
46     // AugmentationTarget args
47     private final List<AugmentationSchema> augmentations = new ArrayList<>();
48     private final List<AugmentationSchemaBuilder> augmentationBuilders = new ArrayList<>();
49
50     public ChoiceCaseBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path) {
51         super(moduleName, line, qname);
52         this.schemaPath = Preconditions.checkNotNull(path, "Schema Path must not be null");
53         constraints = new ConstraintsBuilderImpl(moduleName, line);
54     }
55
56     public ChoiceCaseBuilder(final String moduleName, final int line, final QName qname, final SchemaPath path,
57             final ChoiceCaseNode base) {
58         super(moduleName, line, qname, Preconditions.checkNotNull(path, "Schema Path must not be null"), base);
59         this.schemaPath = path;
60         constraints = new ConstraintsBuilderImpl(moduleName, line, base.getConstraints());
61
62         augmenting = base.isAugmenting();
63         addedByUses = base.isAddedByUses();
64         originalNode = base;
65         addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
66                 qname));
67         augmentations.addAll(base.getAvailableAugmentations());
68     }
69
70     @Override
71     public ChoiceCaseNode build() {
72         if (instance != null) {
73             return instance;
74         }
75         buildChildren();
76         instance = new ChoiceCaseNodeImpl(qname, schemaPath,this);
77
78         instance.augmenting = augmenting;
79         instance.addedByUses = addedByUses;
80
81         instance.constraints = constraints.build();
82
83         // ORIGINAL NODE
84         if (originalNode == null && originalBuilder != null) {
85             originalNode = originalBuilder.build();
86         }
87         instance.original = originalNode;
88
89         // UNKNOWN NODES
90         for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
91             unknownNodes.add(b.build());
92         }
93         instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
94
95         // AUGMENTATIONS
96         for (AugmentationSchemaBuilder builder : augmentationBuilders) {
97             augmentations.add(builder.build());
98         }
99         instance.augmentations = ImmutableSet.copyOf(augmentations);
100
101         return instance;
102     }
103
104     @Override
105     public SchemaPath getPath() {
106         return schemaPath;
107     }
108
109     @Override
110     public void setPath(final SchemaPath path) {
111         this.schemaPath = path;
112     }
113     @Override
114     public boolean isAugmenting() {
115         return augmenting;
116     }
117
118     @Override
119     public void setAugmenting(final boolean augmenting) {
120         this.augmenting = augmenting;
121     }
122
123     @Override
124     public boolean isAddedByUses() {
125         return addedByUses;
126     }
127
128     @Override
129     public void setAddedByUses(final boolean addedByUses) {
130         this.addedByUses = addedByUses;
131     }
132
133     @Override
134     public ChoiceCaseBuilder getOriginal() {
135         return originalBuilder;
136     }
137
138     @Override
139     public void setOriginal(final SchemaNodeBuilder builder) {
140         Preconditions.checkArgument(builder instanceof ChoiceCaseBuilder, "Original of case cannot be " + builder);
141         this.originalBuilder = (ChoiceCaseBuilder) builder;
142     }
143
144     @Override
145     public void addTypedef(final TypeDefinitionBuilder typedefBuilder) {
146         throw new YangParseException(getModuleName(), typedefBuilder.getLine(), "Can not add type definition to choice case.");
147     }
148
149     @Override
150     public void addGrouping(final GroupingBuilder groupingBuilder) {
151         throw new YangParseException(getModuleName(), groupingBuilder.getLine(), "Can not add grouping to choice case.");
152     }
153
154     @Override
155     public boolean isConfiguration() {
156         return false;
157     }
158
159     @Override
160     public void setConfiguration(final boolean configuration) {
161         throw new YangParseException(getModuleName(), getLine(), "Can not add config statement to choice case.");
162     }
163
164     @Override
165     public ConstraintsBuilder getConstraints() {
166         return constraints;
167     }
168
169     @Override
170     public void addAugmentation(final AugmentationSchemaBuilder augment) {
171         augmentationBuilders.add(augment);
172     }
173
174     @Override
175     public int hashCode() {
176         final int prime = 31;
177         int result = 1;
178         result = prime * result + Objects.hashCode(schemaPath);
179         return result;
180     }
181
182     @Override
183     public boolean equals(final Object obj) {
184         if (this == obj) {
185             return true;
186         }
187         if (obj == null) {
188             return false;
189         }
190         if (getClass() != obj.getClass()) {
191             return false;
192         }
193         ChoiceCaseBuilder other = (ChoiceCaseBuilder) obj;
194         if (schemaPath == null) {
195             if (other.schemaPath != null) {
196                 return false;
197             }
198         } else if (!schemaPath.equals(other.schemaPath)) {
199             return false;
200         }
201         if (getParent() == null) {
202             if (other.getParent() != null) {
203                 return false;
204             }
205         } else if (!getParent().equals(other.getParent())) {
206             return false;
207         }
208         return true;
209     }
210
211     @Override
212     public String toString() {
213         return "case " + getQName().getLocalName();
214     }
215
216     @Override
217     protected String getStatementName() {
218         return "choice";
219     }
220
221 }