2 * Copyright (c) 2013 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.binding.generator.util.generated.type.builder;
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
14 import org.opendaylight.yangtools.binding.generator.util.AbstractBaseType;
15 import org.opendaylight.yangtools.sal.binding.model.api.AnnotationType;
16 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
17 import org.opendaylight.yangtools.sal.binding.model.api.Type;
18 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.AnnotationTypeBuilder;
19 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.EnumBuilder;
21 public final class EnumerationBuilderImpl extends AbstractBaseType implements EnumBuilder {
22 private final String packageName;
23 private final String name;
24 private final List<Enumeration.Pair> values;
25 private final List<AnnotationTypeBuilder> annotationBuilders = new ArrayList<>();
27 public EnumerationBuilderImpl(final String packageName, final String name) {
28 super(packageName, name);
29 this.packageName = packageName;
31 values = new ArrayList<>();
35 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
36 if (packageName != null && name != null) {
37 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
38 if (annotationBuilders.add(builder)) {
46 public void addValue(final String name, final Integer value) {
47 values.add(new EnumPairImpl(name, value));
51 public Enumeration toInstance(final Type definingType) {
52 return new EnumerationImpl(definingType, annotationBuilders, packageName, name, values);
58 * @see java.lang.Object#hashCode()
61 public int hashCode() {
64 result = prime * result + ((name == null) ? 0 : name.hashCode());
65 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
72 * @see java.lang.Object#equals(java.lang.Object)
75 public boolean equals(Object obj) {
82 if (getClass() != obj.getClass()) {
85 EnumerationBuilderImpl other = (EnumerationBuilderImpl) obj;
87 if (other.name != null) {
90 } else if (!name.equals(other.name)) {
93 if (packageName == null) {
94 if (other.packageName != null) {
97 } else if (!packageName.equals(other.packageName)) {
106 * @see java.lang.Object#toString()
109 public String toString() {
110 StringBuilder builder = new StringBuilder();
111 builder.append("EnumerationBuilderImpl [packageName=");
112 builder.append(packageName);
113 builder.append(", name=");
114 builder.append(name);
115 builder.append(", values=");
116 builder.append(values);
118 return builder.toString();
121 private static final class EnumPairImpl implements Enumeration.Pair {
123 private final String name;
124 private final Integer value;
126 public EnumPairImpl(String name, Integer value) {
133 public String getName() {
138 public Integer getValue() {
145 * @see java.lang.Object#hashCode()
148 public int hashCode() {
149 final int prime = 31;
151 result = prime * result + ((name == null) ? 0 : name.hashCode());
152 result = prime * result + ((value == null) ? 0 : value.hashCode());
159 * @see java.lang.Object#equals(java.lang.Object)
162 public boolean equals(Object obj) {
169 if (getClass() != obj.getClass()) {
172 EnumPairImpl other = (EnumPairImpl) obj;
174 if (other.name != null) {
177 } else if (!name.equals(other.name)) {
181 if (other.value != null) {
184 } else if (!value.equals(other.value)) {
193 * @see java.lang.Object#toString()
196 public String toString() {
197 StringBuilder builder = new StringBuilder();
198 builder.append("EnumPair [name=");
199 builder.append(name);
200 builder.append(", value=");
201 builder.append(value);
203 return builder.toString();
207 private static final class EnumerationImpl implements Enumeration {
209 private final Type definingType;
210 private final String packageName;
211 private final String name;
212 private final List<Pair> values;
213 private List<AnnotationType> annotations = new ArrayList<>();
215 public EnumerationImpl(final Type definingType, final List<AnnotationTypeBuilder> annotationBuilders,
216 final String packageName, final String name, final List<Pair> values) {
218 this.definingType = definingType;
219 for (final AnnotationTypeBuilder builder : annotationBuilders) {
220 annotations.add(builder.toInstance());
222 this.annotations = Collections.unmodifiableList(annotations);
223 this.packageName = packageName;
225 this.values = Collections.unmodifiableList(values);
229 public Type getDefiningType() {
234 public String getPackageName() {
239 public String getName() {
244 public String getFullyQualifiedName() {
245 return packageName + "." + name;
249 public List<Pair> getValues() {
254 public List<AnnotationType> getAnnotations() {
259 public String toFormattedString() {
260 StringBuilder builder = new StringBuilder();
261 builder.append("public enum");
263 builder.append(name);
264 builder.append(" {");
265 builder.append("\n");
268 for (final Enumeration.Pair valPair : values) {
269 builder.append("\t");
271 builder.append(valPair.getName());
272 builder.append(" (");
273 builder.append(valPair.getValue());
275 if (i == (values.size() - 1)) {
276 builder.append(" );");
278 builder.append(" ),");
282 builder.append("\n}");
283 return builder.toString();
289 * @see java.lang.Object#hashCode()
292 public int hashCode() {
293 final int prime = 31;
295 result = prime * result + ((name == null) ? 0 : name.hashCode());
296 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
297 result = prime * result + ((values == null) ? 0 : values.hashCode());
305 * @see java.lang.Object#equals(java.lang.Object)
308 public boolean equals(Object obj) {
315 if (getClass() != obj.getClass()) {
318 EnumerationImpl other = (EnumerationImpl) obj;
320 if (other.name != null) {
323 } else if (!name.equals(other.name)) {
326 if (packageName == null) {
327 if (other.packageName != null) {
330 } else if (!packageName.equals(other.packageName)) {
333 if (values == null) {
334 if (other.values != null) {
337 } else if (!values.equals(other.values)) {
346 * @see java.lang.Object#toString()
349 public String toString() {
350 StringBuilder builder = new StringBuilder();
351 builder.append("Enumeration [packageName=");
352 builder.append(packageName);
353 if (definingType != null) {
354 builder.append(", definingType=");
355 builder.append(definingType.getPackageName());
357 builder.append(definingType.getName());
359 builder.append(", definingType= null");
361 builder.append(", name=");
362 builder.append(name);
363 builder.append(", values=");
364 builder.append(values);
366 return builder.toString();