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
66 + ((packageName == null) ? 0 : packageName.hashCode());
73 * @see java.lang.Object#equals(java.lang.Object)
76 public boolean equals(Object obj) {
83 if (getClass() != obj.getClass()) {
86 EnumerationBuilderImpl other = (EnumerationBuilderImpl) obj;
88 if (other.name != null) {
91 } else if (!name.equals(other.name)) {
94 if (packageName == null) {
95 if (other.packageName != null) {
98 } else if (!packageName.equals(other.packageName)) {
107 * @see java.lang.Object#toString()
110 public String toString() {
111 StringBuilder builder = new StringBuilder();
112 builder.append("EnumerationBuilderImpl [packageName=");
113 builder.append(packageName);
114 builder.append(", name=");
115 builder.append(name);
116 builder.append(", values=");
117 builder.append(values);
119 return builder.toString();
122 private static final class EnumPairImpl implements Enumeration.Pair {
124 private final String name;
125 private final Integer value;
127 public EnumPairImpl(String name, Integer value) {
134 public String getName() {
139 public Integer getValue() {
146 * @see java.lang.Object#hashCode()
149 public int hashCode() {
150 final int prime = 31;
152 result = prime * result + ((name == null) ? 0 : name.hashCode());
153 result = prime * result + ((value == null) ? 0 : value.hashCode());
160 * @see java.lang.Object#equals(java.lang.Object)
163 public boolean equals(Object obj) {
170 if (getClass() != obj.getClass()) {
173 EnumPairImpl other = (EnumPairImpl) obj;
175 if (other.name != null) {
178 } else if (!name.equals(other.name)) {
182 if (other.value != null) {
185 } else if (!value.equals(other.value)) {
194 * @see java.lang.Object#toString()
197 public String toString() {
198 StringBuilder builder = new StringBuilder();
199 builder.append("EnumPair [name=");
200 builder.append(name);
201 builder.append(", value=");
202 builder.append(value);
204 return builder.toString();
208 private static final class EnumerationImpl implements Enumeration {
210 private final Type definingType;
211 private final String packageName;
212 private final String name;
213 private final List<Pair> values;
214 private List<AnnotationType> annotations = new ArrayList<>();
216 public EnumerationImpl(final Type definingType,
217 final List<AnnotationTypeBuilder> annotationBuilders,
218 final String packageName, final String name,
219 final List<Pair> values) {
221 this.definingType = definingType;
222 for (final AnnotationTypeBuilder builder : annotationBuilders) {
223 annotations.add(builder.toInstance());
225 this.annotations = Collections.unmodifiableList(annotations);
226 this.packageName = packageName;
228 this.values = Collections.unmodifiableList(values);
232 public Type getDefiningType() {
237 public String getPackageName() {
242 public String getName() {
247 public String getFullyQualifiedName() {
248 return packageName + "." + name;
252 public List<Pair> getValues() {
257 public List<AnnotationType> getAnnotations() {
262 public String toFormattedString() {
263 StringBuilder builder = new StringBuilder();
264 builder.append("public enum");
266 builder.append(name);
267 builder.append(" {");
268 builder.append("\n");
271 for (final Enumeration.Pair valPair : values) {
272 builder.append("\t");
274 builder.append(valPair.getName());
275 builder.append(" (");
276 builder.append(valPair.getValue());
278 if (i == (values.size() - 1)) {
279 builder.append(" );");
281 builder.append(" ),");
285 return builder.toString();
291 * @see java.lang.Object#hashCode()
294 public int hashCode() {
295 final int prime = 31;
297 result = prime * result + ((name == null) ? 0 : name.hashCode());
298 result = prime * result
299 + ((packageName == null) ? 0 : packageName.hashCode());
300 result = prime * result
301 + ((values == null) ? 0 : values.hashCode());
309 * @see java.lang.Object#equals(java.lang.Object)
312 public boolean equals(Object obj) {
319 if (getClass() != obj.getClass()) {
322 EnumerationImpl other = (EnumerationImpl) obj;
324 if (other.name != null) {
327 } else if (!name.equals(other.name)) {
330 if (packageName == null) {
331 if (other.packageName != null) {
334 } else if (!packageName.equals(other.packageName)) {
337 if (values == null) {
338 if (other.values != null) {
341 } else if (!values.equals(other.values)) {
350 * @see java.lang.Object#toString()
353 public String toString() {
354 StringBuilder builder = new StringBuilder();
355 builder.append("Enumeration [packageName=");
356 builder.append(packageName);
357 if (definingType != null) {
358 builder.append(", definingType=");
359 builder.append(definingType.getPackageName());
361 builder.append(definingType.getName());
363 builder.append(", definingType= null");
365 builder.append(", name=");
366 builder.append(name);
367 builder.append(", values=");
368 builder.append(values);
370 return builder.toString();