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 static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.parseToClassName;
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.List;
16 import org.opendaylight.yangtools.binding.generator.util.AbstractBaseType;
17 import org.opendaylight.yangtools.sal.binding.model.api.AnnotationType;
18 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
19 import org.opendaylight.yangtools.sal.binding.model.api.Type;
20 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.AnnotationTypeBuilder;
21 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.EnumBuilder;
22 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
23 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
25 public final class EnumerationBuilderImpl extends AbstractBaseType implements EnumBuilder {
26 private final String packageName;
27 private final String name;
28 private final List<Enumeration.Pair> values;
29 private final List<AnnotationTypeBuilder> annotationBuilders = new ArrayList<>();
31 public EnumerationBuilderImpl(final String packageName, final String name) {
32 super(packageName, name);
33 this.packageName = packageName;
35 values = new ArrayList<>();
39 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
40 if (packageName != null && name != null) {
41 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
42 if (annotationBuilders.add(builder)) {
50 public void addValue(final String name, final Integer value) {
51 values.add(new EnumPairImpl(name, value));
55 public Enumeration toInstance(final Type definingType) {
56 return new EnumerationImpl(definingType, annotationBuilders, packageName, name, values);
62 * @see java.lang.Object#hashCode()
65 public int hashCode() {
68 result = prime * result + ((name == null) ? 0 : name.hashCode());
69 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
76 * @see java.lang.Object#equals(java.lang.Object)
79 public boolean equals(Object obj) {
86 if (getClass() != obj.getClass()) {
89 EnumerationBuilderImpl other = (EnumerationBuilderImpl) obj;
91 if (other.name != null) {
94 } else if (!name.equals(other.name)) {
97 if (packageName == null) {
98 if (other.packageName != null) {
101 } else if (!packageName.equals(other.packageName)) {
110 * @see java.lang.Object#toString()
113 public String toString() {
114 StringBuilder builder = new StringBuilder();
115 builder.append("EnumerationBuilderImpl [packageName=");
116 builder.append(packageName);
117 builder.append(", name=");
118 builder.append(name);
119 builder.append(", values=");
120 builder.append(values);
122 return builder.toString();
126 public void updateEnumPairsFromEnumTypeDef(final EnumTypeDefinition enumTypeDef) {
127 final List<EnumPair> enums = enumTypeDef.getValues();
130 for (final EnumPair enumPair : enums) {
131 if (enumPair != null) {
132 final String enumPairName = parseToClassName(enumPair.getName());
133 Integer enumPairValue = enumPair.getValue();
135 if (enumPairValue == null) {
136 enumPairValue = listIndex;
138 this.addValue(enumPairName, enumPairValue);
146 private static final class EnumPairImpl implements Enumeration.Pair {
148 private final String name;
149 private final Integer value;
151 public EnumPairImpl(String name, Integer value) {
158 public String getName() {
163 public Integer getValue() {
170 * @see java.lang.Object#hashCode()
173 public int hashCode() {
174 final int prime = 31;
176 result = prime * result + ((name == null) ? 0 : name.hashCode());
177 result = prime * result + ((value == null) ? 0 : value.hashCode());
184 * @see java.lang.Object#equals(java.lang.Object)
187 public boolean equals(Object obj) {
194 if (getClass() != obj.getClass()) {
197 EnumPairImpl other = (EnumPairImpl) obj;
199 if (other.name != null) {
202 } else if (!name.equals(other.name)) {
206 if (other.value != null) {
209 } else if (!value.equals(other.value)) {
218 * @see java.lang.Object#toString()
221 public String toString() {
222 StringBuilder builder = new StringBuilder();
223 builder.append("EnumPair [name=");
224 builder.append(name);
225 builder.append(", value=");
226 builder.append(value);
228 return builder.toString();
232 private static final class EnumerationImpl implements Enumeration {
234 private final Type definingType;
235 private final String packageName;
236 private final String name;
237 private final List<Pair> values;
238 private List<AnnotationType> annotations = new ArrayList<>();
240 public EnumerationImpl(final Type definingType, final List<AnnotationTypeBuilder> annotationBuilders,
241 final String packageName, final String name, final List<Pair> values) {
243 this.definingType = definingType;
244 for (final AnnotationTypeBuilder builder : annotationBuilders) {
245 annotations.add(builder.toInstance());
247 this.annotations = Collections.unmodifiableList(annotations);
248 this.packageName = packageName;
250 this.values = Collections.unmodifiableList(values);
254 public Type getDefiningType() {
259 public String getPackageName() {
264 public String getName() {
269 public String getFullyQualifiedName() {
270 return packageName + "." + name;
274 public List<Pair> getValues() {
279 public List<AnnotationType> getAnnotations() {
284 public String toFormattedString() {
285 StringBuilder builder = new StringBuilder();
286 builder.append("public enum");
288 builder.append(name);
289 builder.append(" {");
290 builder.append("\n");
293 for (final Enumeration.Pair valPair : values) {
294 builder.append("\t");
296 builder.append(valPair.getName());
297 builder.append(" (");
298 builder.append(valPair.getValue());
300 if (i == (values.size() - 1)) {
301 builder.append(" );");
303 builder.append(" ),");
307 builder.append("\n}");
308 return builder.toString();
314 * @see java.lang.Object#hashCode()
317 public int hashCode() {
318 final int prime = 31;
320 result = prime * result + ((name == null) ? 0 : name.hashCode());
321 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
322 result = prime * result + ((values == null) ? 0 : values.hashCode());
330 * @see java.lang.Object#equals(java.lang.Object)
333 public boolean equals(Object obj) {
340 if (getClass() != obj.getClass()) {
343 EnumerationImpl other = (EnumerationImpl) obj;
345 if (other.name != null) {
348 } else if (!name.equals(other.name)) {
351 if (packageName == null) {
352 if (other.packageName != null) {
355 } else if (!packageName.equals(other.packageName)) {
358 if (values == null) {
359 if (other.values != null) {
362 } else if (!values.equals(other.values)) {
371 * @see java.lang.Object#toString()
374 public String toString() {
375 StringBuilder builder = new StringBuilder();
376 builder.append("Enumeration [packageName=");
377 builder.append(packageName);
378 if (definingType != null) {
379 builder.append(", definingType=");
380 builder.append(definingType.getPackageName());
382 builder.append(definingType.getName());
384 builder.append(", definingType= null");
386 builder.append(", name=");
387 builder.append(name);
388 builder.append(", values=");
389 builder.append(values);
391 return builder.toString();