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 com.google.common.collect.ImmutableList;
11 import java.util.ArrayList;
12 import java.util.Collections;
13 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.Enumeration.Pair;
19 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty;
20 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;
21 import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature;
22 import org.opendaylight.yangtools.sal.binding.model.api.Type;
23 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.AnnotationTypeBuilder;
24 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.EnumBuilder;
25 import org.opendaylight.yangtools.util.LazyCollections;
26 import org.opendaylight.yangtools.yang.binding.BindingMapping;
27 import org.opendaylight.yangtools.yang.common.QName;
28 import org.opendaylight.yangtools.yang.model.api.Status;
29 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
30 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
32 public final class EnumerationBuilderImpl extends AbstractBaseType implements EnumBuilder {
33 private final String packageName;
34 private final String name;
35 private List<Enumeration.Pair> values = Collections.emptyList();
36 private List<AnnotationTypeBuilder> annotationBuilders = Collections.emptyList();
37 private List<Pair> unmodifiableValues = Collections.emptyList();
38 private String description;
39 private String reference;
40 private String moduleName;
41 private Iterable<QName> schemaPath;
43 public EnumerationBuilderImpl(final String packageName, final String name) {
44 super(packageName, name);
45 this.packageName = packageName;
49 public void setReference(final String reference) {
50 this.reference = reference;
53 public void setModuleName(final String moduleName) {
54 this.moduleName = moduleName;
57 public void setSchemaPath(final Iterable<QName> schemaPath) {
58 this.schemaPath = schemaPath;
62 public void setDescription(String description) {
63 this.description = description;
68 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
69 if (packageName != null && name != null) {
70 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
71 if (!annotationBuilders.contains(builder)) {
72 annotationBuilders = LazyCollections.lazyAdd(annotationBuilders, builder);
80 public void addValue(final String name, final Integer value, final String description) {
81 final EnumPairImpl p = new EnumPairImpl(name, value, description);
82 values = LazyCollections.lazyAdd(values, p);
83 unmodifiableValues = Collections.unmodifiableList(values);
87 public Enumeration toInstance(final Type definingType) {
88 return new EnumerationImpl(definingType, annotationBuilders, packageName, name, unmodifiableValues,
89 description, reference, moduleName, schemaPath);
95 * @see java.lang.Object#hashCode()
98 public int hashCode() {
101 result = prime * result + ((name == null) ? 0 : name.hashCode());
102 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
109 * @see java.lang.Object#equals(java.lang.Object)
112 public boolean equals(final Object obj) {
119 if (getClass() != obj.getClass()) {
122 EnumerationBuilderImpl other = (EnumerationBuilderImpl) obj;
124 if (other.name != null) {
127 } else if (!name.equals(other.name)) {
130 if (packageName == null) {
131 if (other.packageName != null) {
134 } else if (!packageName.equals(other.packageName)) {
143 * @see java.lang.Object#toString()
146 public String toString() {
147 StringBuilder builder = new StringBuilder();
148 builder.append("EnumerationBuilderImpl [packageName=");
149 builder.append(packageName);
150 builder.append(", name=");
151 builder.append(name);
152 builder.append(", values=");
153 builder.append(values);
155 return builder.toString();
159 public void updateEnumPairsFromEnumTypeDef(final EnumTypeDefinition enumTypeDef) {
160 final List<EnumPair> enums = enumTypeDef.getValues();
163 for (final EnumPair enumPair : enums) {
164 if (enumPair != null) {
165 final String enumPairName = BindingMapping.getClassName(enumPair.getName());
166 Integer enumPairValue = enumPair.getValue();
168 if (enumPairValue == null) {
169 enumPairValue = listIndex;
172 listIndex = enumPairValue;
175 this.addValue(enumPairName, enumPairValue, enumPair.getDescription());
183 private static final class EnumPairImpl implements Enumeration.Pair {
185 private final String name;
186 private final Integer value;
187 private final String description;
189 public EnumPairImpl(final String name, final Integer value, final String description) {
193 this.description = description;
197 public String getName() {
202 public Integer getValue() {
209 * @see java.lang.Object#hashCode()
212 public int hashCode() {
213 final int prime = 31;
215 result = prime * result + ((name == null) ? 0 : name.hashCode());
216 result = prime * result + ((value == null) ? 0 : value.hashCode());
223 * @see java.lang.Object#equals(java.lang.Object)
226 public boolean equals(final Object obj) {
233 if (getClass() != obj.getClass()) {
236 EnumPairImpl other = (EnumPairImpl) obj;
238 if (other.name != null) {
241 } else if (!name.equals(other.name)) {
245 if (other.value != null) {
248 } else if (!value.equals(other.value)) {
257 * @see java.lang.Object#toString()
260 public String toString() {
261 StringBuilder builder = new StringBuilder();
262 builder.append("EnumPair [name=");
263 builder.append(name);
264 builder.append(", value=");
265 builder.append(value);
267 return builder.toString();
271 public String getDescription() {
276 public String getReference() {
281 public Status getStatus() {
282 // TODO Auto-generated method stub
288 private static final class EnumerationImpl implements Enumeration {
290 private final Type definingType;
291 private final String packageName;
292 private final String name;
293 private final String description;
294 private final String reference;
295 private final String moduleName;
296 private final Iterable<QName> schemaPath;
297 private final List<Pair> values;
298 private final List<AnnotationType> annotations;
300 public EnumerationImpl(final Type definingType, final List<AnnotationTypeBuilder> annotationBuilders,
301 final String packageName, final String name, final List<Pair> values, final String description,
302 final String reference, final String moduleName, final Iterable<QName> schemaPath) {
304 this.definingType = definingType;
305 this.packageName = packageName;
306 this.values = values;
308 this.description = description;
309 this.moduleName = moduleName;
310 this.schemaPath = schemaPath;
311 this.reference = reference;
313 final ArrayList<AnnotationType> a = new ArrayList<>();
314 for (final AnnotationTypeBuilder builder : annotationBuilders) {
315 a.add(builder.toInstance());
317 this.annotations = ImmutableList.copyOf(a);
321 public Type getParentType() {
326 public String getPackageName() {
331 public String getName() {
336 public String getFullyQualifiedName() {
337 return packageName + "." + name;
341 public List<Pair> getValues() {
346 public boolean isSuitableForBoxing() {
351 public List<AnnotationType> getAnnotations() {
356 public String toFormattedString() {
357 StringBuilder builder = new StringBuilder();
358 builder.append("public enum");
360 builder.append(name);
361 builder.append(" {");
362 builder.append("\n");
365 for (final Enumeration.Pair valPair : values) {
366 builder.append("\t");
368 builder.append(valPair.getName());
369 builder.append(" (");
370 builder.append(valPair.getValue());
372 if (i == (values.size() - 1)) {
373 builder.append(" );");
375 builder.append(" ),");
379 builder.append("\n}");
380 return builder.toString();
386 * @see java.lang.Object#hashCode()
389 public int hashCode() {
390 final int prime = 31;
392 result = prime * result + ((name == null) ? 0 : name.hashCode());
393 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
394 result = prime * result + ((values == null) ? 0 : values.hashCode());
402 * @see java.lang.Object#equals(java.lang.Object)
405 public boolean equals(final Object obj) {
412 if (getClass() != obj.getClass()) {
415 EnumerationImpl other = (EnumerationImpl) obj;
417 if (other.name != null) {
420 } else if (!name.equals(other.name)) {
423 if (packageName == null) {
424 if (other.packageName != null) {
427 } else if (!packageName.equals(other.packageName)) {
430 if (values == null) {
431 if (other.values != null) {
434 } else if (!values.equals(other.values)) {
443 * @see java.lang.Object#toString()
446 public String toString() {
447 StringBuilder builder = new StringBuilder();
448 builder.append("Enumeration [packageName=");
449 builder.append(packageName);
450 if (definingType != null) {
451 builder.append(", definingType=");
452 builder.append(definingType.getPackageName());
454 builder.append(definingType.getName());
456 builder.append(", definingType= null");
458 builder.append(", name=");
459 builder.append(name);
460 builder.append(", values=");
461 builder.append(values);
463 return builder.toString();
467 public String getComment() {
472 public boolean isAbstract() {
477 public List<Type> getImplements() {
478 return Collections.emptyList();
482 public List<GeneratedType> getEnclosedTypes() {
483 return Collections.emptyList();
487 public List<Enumeration> getEnumerations() {
488 return Collections.emptyList();
492 public List<Constant> getConstantDefinitions() {
493 return Collections.emptyList();
497 public List<MethodSignature> getMethodDefinitions() {
498 // TODO Auto-generated method stub
499 return Collections.emptyList();
503 public List<GeneratedProperty> getProperties() {
504 return Collections.emptyList();
508 public String getDescription() {
513 public String getReference() {
518 public Iterable<QName> getSchemaPath() {
523 public String getModuleName() {