2 * Copyright (c) 2014 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.yangtools.yang.parser.builder.impl;
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;
32 * @deprecated Pre-Beryllium implementation, scheduled for removal.
35 public final class ChoiceCaseBuilder extends AbstractDocumentedDataNodeContainerBuilder implements DataSchemaNodeBuilder,
36 AugmentationTargetBuilder {
37 private ChoiceCaseNodeImpl instance;
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<>();
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);
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());
62 augmenting = base.isAugmenting();
63 addedByUses = base.isAddedByUses();
65 addedUnknownNodes.addAll(BuilderUtils.wrapUnknownNodes(moduleName, line, base.getUnknownSchemaNodes(), path,
67 augmentations.addAll(base.getAvailableAugmentations());
71 public ChoiceCaseNode build() {
72 if (instance != null) {
76 instance = new ChoiceCaseNodeImpl(qname, schemaPath,this);
78 instance.augmenting = augmenting;
79 instance.addedByUses = addedByUses;
81 instance.constraints = constraints.build();
84 if (originalNode == null && originalBuilder != null) {
85 originalNode = originalBuilder.build();
87 instance.original = originalNode;
90 for (UnknownSchemaNodeBuilder b : addedUnknownNodes) {
91 unknownNodes.add(b.build());
93 instance.unknownNodes = ImmutableList.copyOf(unknownNodes);
96 for (AugmentationSchemaBuilder builder : augmentationBuilders) {
97 augmentations.add(builder.build());
99 instance.augmentations = ImmutableSet.copyOf(augmentations);
105 public SchemaPath getPath() {
110 public void setPath(final SchemaPath path) {
111 this.schemaPath = path;
114 public boolean isAugmenting() {
119 public void setAugmenting(final boolean augmenting) {
120 this.augmenting = augmenting;
124 public boolean isAddedByUses() {
129 public void setAddedByUses(final boolean addedByUses) {
130 this.addedByUses = addedByUses;
134 public ChoiceCaseBuilder getOriginal() {
135 return originalBuilder;
139 public void setOriginal(final SchemaNodeBuilder builder) {
140 Preconditions.checkArgument(builder instanceof ChoiceCaseBuilder, "Original of case cannot be " + builder);
141 this.originalBuilder = (ChoiceCaseBuilder) builder;
145 public void addTypedef(final TypeDefinitionBuilder typedefBuilder) {
146 throw new YangParseException(getModuleName(), typedefBuilder.getLine(), "Can not add type definition to choice case.");
150 public void addGrouping(final GroupingBuilder groupingBuilder) {
151 throw new YangParseException(getModuleName(), groupingBuilder.getLine(), "Can not add grouping to choice case.");
155 public boolean isConfiguration() {
160 public void setConfiguration(final boolean configuration) {
161 throw new YangParseException(getModuleName(), getLine(), "Can not add config statement to choice case.");
165 public ConstraintsBuilder getConstraints() {
170 public void addAugmentation(final AugmentationSchemaBuilder augment) {
171 augmentationBuilders.add(augment);
175 public int hashCode() {
176 final int prime = 31;
178 result = prime * result + Objects.hashCode(schemaPath);
183 public boolean equals(final Object obj) {
190 if (getClass() != obj.getClass()) {
193 ChoiceCaseBuilder other = (ChoiceCaseBuilder) obj;
194 if (schemaPath == null) {
195 if (other.schemaPath != null) {
198 } else if (!schemaPath.equals(other.schemaPath)) {
201 if (getParent() == null) {
202 if (other.getParent() != null) {
205 } else if (!getParent().equals(other.getParent())) {
212 public String toString() {
213 return "case " + getQName().getLocalName();
217 protected String getStatementName() {