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