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.Constant;
17 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
18 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty;
19 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;
20 import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature;
21 import org.opendaylight.yangtools.sal.binding.model.api.Type;
22 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.AnnotationTypeBuilder;
23 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.EnumBuilder;
24 import org.opendaylight.yangtools.yang.binding.BindingMapping;
25 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
26 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
28 public final class EnumerationBuilderImpl extends AbstractBaseType implements EnumBuilder {
29 private final String packageName;
30 private final String name;
31 private final List<Enumeration.Pair> values;
32 private final List<AnnotationTypeBuilder> annotationBuilders = new ArrayList<>();
34 public EnumerationBuilderImpl(final String packageName, final String name) {
35 super(packageName, name);
36 this.packageName = packageName;
38 values = new ArrayList<>();
42 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
43 if (packageName != null && name != null) {
44 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
45 if (annotationBuilders.add(builder)) {
53 public void addValue(final String name, final Integer value) {
54 values.add(new EnumPairImpl(name, value));
58 public Enumeration toInstance(final Type definingType) {
59 return new EnumerationImpl(definingType, annotationBuilders, packageName, name, values);
65 * @see java.lang.Object#hashCode()
68 public int hashCode() {
71 result = prime * result + ((name == null) ? 0 : name.hashCode());
72 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
79 * @see java.lang.Object#equals(java.lang.Object)
82 public boolean equals(Object obj) {
89 if (getClass() != obj.getClass()) {
92 EnumerationBuilderImpl other = (EnumerationBuilderImpl) obj;
94 if (other.name != null) {
97 } else if (!name.equals(other.name)) {
100 if (packageName == null) {
101 if (other.packageName != null) {
104 } else if (!packageName.equals(other.packageName)) {
113 * @see java.lang.Object#toString()
116 public String toString() {
117 StringBuilder builder = new StringBuilder();
118 builder.append("EnumerationBuilderImpl [packageName=");
119 builder.append(packageName);
120 builder.append(", name=");
121 builder.append(name);
122 builder.append(", values=");
123 builder.append(values);
125 return builder.toString();
129 public void updateEnumPairsFromEnumTypeDef(final EnumTypeDefinition enumTypeDef) {
130 final List<EnumPair> enums = enumTypeDef.getValues();
133 for (final EnumPair enumPair : enums) {
134 if (enumPair != null) {
135 final String enumPairName = BindingMapping.getClassName(enumPair.getName());
136 Integer enumPairValue = enumPair.getValue();
138 if (enumPairValue == null) {
139 enumPairValue = listIndex;
141 this.addValue(enumPairName, enumPairValue);
149 private static final class EnumPairImpl implements Enumeration.Pair {
151 private final String name;
152 private final Integer value;
154 public EnumPairImpl(String name, Integer value) {
161 public String getName() {
166 public Integer getValue() {
173 * @see java.lang.Object#hashCode()
176 public int hashCode() {
177 final int prime = 31;
179 result = prime * result + ((name == null) ? 0 : name.hashCode());
180 result = prime * result + ((value == null) ? 0 : value.hashCode());
187 * @see java.lang.Object#equals(java.lang.Object)
190 public boolean equals(Object obj) {
197 if (getClass() != obj.getClass()) {
200 EnumPairImpl other = (EnumPairImpl) obj;
202 if (other.name != null) {
205 } else if (!name.equals(other.name)) {
209 if (other.value != null) {
212 } else if (!value.equals(other.value)) {
221 * @see java.lang.Object#toString()
224 public String toString() {
225 StringBuilder builder = new StringBuilder();
226 builder.append("EnumPair [name=");
227 builder.append(name);
228 builder.append(", value=");
229 builder.append(value);
231 return builder.toString();
235 private static final class EnumerationImpl implements Enumeration {
237 private final Type definingType;
238 private final String packageName;
239 private final String name;
240 private final List<Pair> values;
241 private List<AnnotationType> annotations = new ArrayList<>();
243 public EnumerationImpl(final Type definingType, final List<AnnotationTypeBuilder> annotationBuilders,
244 final String packageName, final String name, final List<Pair> values) {
246 this.definingType = definingType;
247 for (final AnnotationTypeBuilder builder : annotationBuilders) {
248 annotations.add(builder.toInstance());
250 this.annotations = Collections.unmodifiableList(annotations);
251 this.packageName = packageName;
253 this.values = Collections.unmodifiableList(values);
257 public Type getParentType() {
262 public String getPackageName() {
267 public String getName() {
272 public String getFullyQualifiedName() {
273 return packageName + "." + name;
277 public List<Pair> getValues() {
282 public List<AnnotationType> getAnnotations() {
287 public String toFormattedString() {
288 StringBuilder builder = new StringBuilder();
289 builder.append("public enum");
291 builder.append(name);
292 builder.append(" {");
293 builder.append("\n");
296 for (final Enumeration.Pair valPair : values) {
297 builder.append("\t");
299 builder.append(valPair.getName());
300 builder.append(" (");
301 builder.append(valPair.getValue());
303 if (i == (values.size() - 1)) {
304 builder.append(" );");
306 builder.append(" ),");
310 builder.append("\n}");
311 return builder.toString();
317 * @see java.lang.Object#hashCode()
320 public int hashCode() {
321 final int prime = 31;
323 result = prime * result + ((name == null) ? 0 : name.hashCode());
324 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
325 result = prime * result + ((values == null) ? 0 : values.hashCode());
333 * @see java.lang.Object#equals(java.lang.Object)
336 public boolean equals(Object obj) {
343 if (getClass() != obj.getClass()) {
346 EnumerationImpl other = (EnumerationImpl) obj;
348 if (other.name != null) {
351 } else if (!name.equals(other.name)) {
354 if (packageName == null) {
355 if (other.packageName != null) {
358 } else if (!packageName.equals(other.packageName)) {
361 if (values == null) {
362 if (other.values != null) {
365 } else if (!values.equals(other.values)) {
374 * @see java.lang.Object#toString()
377 public String toString() {
378 StringBuilder builder = new StringBuilder();
379 builder.append("Enumeration [packageName=");
380 builder.append(packageName);
381 if (definingType != null) {
382 builder.append(", definingType=");
383 builder.append(definingType.getPackageName());
385 builder.append(definingType.getName());
387 builder.append(", definingType= null");
389 builder.append(", name=");
390 builder.append(name);
391 builder.append(", values=");
392 builder.append(values);
394 return builder.toString();
398 public String getComment() {
403 public boolean isAbstract() {
408 public List<Type> getImplements() {
409 return Collections.emptyList();
413 public List<GeneratedType> getEnclosedTypes() {
414 return Collections.emptyList();
418 public List<Enumeration> getEnumerations() {
419 return Collections.emptyList();
423 public List<Constant> getConstantDefinitions() {
424 return Collections.emptyList();
428 public List<MethodSignature> getMethodDefinitions() {
429 // TODO Auto-generated method stub
430 return Collections.emptyList();
434 public List<GeneratedProperty> getProperties() {
435 return Collections.emptyList();