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.common.QName;
26 import org.opendaylight.yangtools.yang.model.api.Status;
27 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
28 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
30 public final class EnumerationBuilderImpl extends AbstractBaseType implements EnumBuilder {
31 private final String packageName;
32 private final String name;
33 private final List<Enumeration.Pair> values;
34 private final List<AnnotationTypeBuilder> annotationBuilders = new ArrayList<>();
35 private String description;
36 private String reference;
37 private String moduleName;
38 private Iterable<QName> schemaPath;
40 public EnumerationBuilderImpl(final String packageName, final String name) {
41 super(packageName, name);
42 this.packageName = packageName;
44 values = new ArrayList<>();
47 public void setReference(final String reference) {
48 this.reference = reference;
51 public void setModuleName(final String moduleName) {
52 this.moduleName = moduleName;
55 public void setSchemaPath(final Iterable<QName> schemaPath) {
56 this.schemaPath = schemaPath;
60 public void setDescription(String description) {
61 this.description = description;
66 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
67 if (packageName != null && name != null) {
68 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
69 if (annotationBuilders.add(builder)) {
77 public void addValue(final String name, final Integer value, final String description) {
78 values.add(new EnumPairImpl(name, value, description));
82 public Enumeration toInstance(final Type definingType) {
83 return new EnumerationImpl(definingType, annotationBuilders, packageName, name, values,
84 description, reference, moduleName, schemaPath);
88 public void updateEnumPairsFromEnumTypeDef(final EnumTypeDefinition enumTypeDef) {
89 final List<EnumPair> enums = enumTypeDef.getValues();
92 for (final EnumPair enumPair : enums) {
93 if (enumPair != null) {
94 final String enumPairName = BindingMapping.getClassName(enumPair.getName());
95 Integer enumPairValue = enumPair.getValue();
97 if (enumPairValue == null) {
98 enumPairValue = listIndex;
101 listIndex = enumPairValue;
104 this.addValue(enumPairName, enumPairValue, enumPair.getDescription());
114 * @see java.lang.Object#hashCode()
117 public int hashCode() {
118 final int prime = 31;
120 result = prime * result + ((name == null) ? 0 : name.hashCode());
121 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
128 * @see java.lang.Object#equals(java.lang.Object)
131 public boolean equals(Object obj) {
138 if (getClass() != obj.getClass()) {
141 EnumerationBuilderImpl other = (EnumerationBuilderImpl) obj;
143 if (other.name != null) {
146 } else if (!name.equals(other.name)) {
149 if (packageName == null) {
150 if (other.packageName != null) {
153 } else if (!packageName.equals(other.packageName)) {
162 * @see java.lang.Object#toString()
165 public String toString() {
166 StringBuilder builder = new StringBuilder();
167 builder.append("EnumerationBuilderImpl [packageName=");
168 builder.append(packageName);
169 builder.append(", name=");
170 builder.append(name);
171 builder.append(", values=");
172 builder.append(values);
174 return builder.toString();
177 private static final class EnumPairImpl implements Enumeration.Pair {
179 private final String name;
180 private final Integer value;
181 private final String description;
183 public EnumPairImpl(String name, Integer value, String description) {
187 this.description = description;
191 public String getName() {
196 public Integer getValue() {
203 * @see java.lang.Object#hashCode()
206 public int hashCode() {
207 final int prime = 31;
209 result = prime * result + ((name == null) ? 0 : name.hashCode());
210 result = prime * result + ((value == null) ? 0 : value.hashCode());
217 * @see java.lang.Object#equals(java.lang.Object)
220 public boolean equals(Object obj) {
227 if (getClass() != obj.getClass()) {
230 EnumPairImpl other = (EnumPairImpl) obj;
232 if (other.name != null) {
235 } else if (!name.equals(other.name)) {
239 if (other.value != null) {
242 } else if (!value.equals(other.value)) {
251 * @see java.lang.Object#toString()
254 public String toString() {
255 StringBuilder builder = new StringBuilder();
256 builder.append("EnumPair [name=");
257 builder.append(name);
258 builder.append(", value=");
259 builder.append(value);
261 return builder.toString();
265 public String getDescription() {
270 public String getReference() {
275 public Status getStatus() {
276 // TODO Auto-generated method stub
282 private static final class EnumerationImpl implements Enumeration {
284 private final Type definingType;
285 private final String packageName;
286 private final String name;
287 private final String description;
288 private final String reference;
289 private final String moduleName;
290 private final Iterable<QName> schemaPath;
291 private final List<Pair> values;
292 private List<AnnotationType> annotations = new ArrayList<>();
294 public EnumerationImpl(final Type definingType, final List<AnnotationTypeBuilder> annotationBuilders,
295 final String packageName, final String name, final List<Pair> values, final String description,
296 final String reference, final String moduleName, final Iterable<QName> schemaPath) {
298 this.definingType = definingType;
299 for (final AnnotationTypeBuilder builder : annotationBuilders) {
300 annotations.add(builder.toInstance());
302 this.annotations = Collections.unmodifiableList(annotations);
303 this.packageName = packageName;
305 this.values = Collections.unmodifiableList(values);
306 this.description = description;
307 this.reference = reference;
308 this.moduleName = moduleName;
309 this.schemaPath = schemaPath;
313 public Type getParentType() {
318 public String getPackageName() {
323 public String getName() {
328 public String getFullyQualifiedName() {
329 return packageName + "." + name;
333 public List<Pair> getValues() {
338 public List<AnnotationType> getAnnotations() {
343 public String toFormattedString() {
344 StringBuilder builder = new StringBuilder();
345 builder.append("public enum");
347 builder.append(name);
348 builder.append(" {");
349 builder.append("\n");
352 for (final Enumeration.Pair valPair : values) {
353 builder.append("\t");
355 builder.append(valPair.getName());
356 builder.append(" (");
357 builder.append(valPair.getValue());
359 if (i == (values.size() - 1)) {
360 builder.append(" );");
362 builder.append(" ),");
366 builder.append("\n}");
367 return builder.toString();
373 * @see java.lang.Object#hashCode()
376 public int hashCode() {
377 final int prime = 31;
379 result = prime * result + ((name == null) ? 0 : name.hashCode());
380 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
381 result = prime * result + ((values == null) ? 0 : values.hashCode());
389 * @see java.lang.Object#equals(java.lang.Object)
392 public boolean equals(Object obj) {
399 if (getClass() != obj.getClass()) {
402 EnumerationImpl other = (EnumerationImpl) obj;
404 if (other.name != null) {
407 } else if (!name.equals(other.name)) {
410 if (packageName == null) {
411 if (other.packageName != null) {
414 } else if (!packageName.equals(other.packageName)) {
417 if (values == null) {
418 if (other.values != null) {
421 } else if (!values.equals(other.values)) {
430 * @see java.lang.Object#toString()
433 public String toString() {
434 StringBuilder builder = new StringBuilder();
435 builder.append("Enumeration [packageName=");
436 builder.append(packageName);
437 if (definingType != null) {
438 builder.append(", definingType=");
439 builder.append(definingType.getPackageName());
441 builder.append(definingType.getName());
443 builder.append(", definingType= null");
445 builder.append(", name=");
446 builder.append(name);
447 builder.append(", values=");
448 builder.append(values);
450 return builder.toString();
454 public String getComment() {
459 public boolean isAbstract() {
464 public List<Type> getImplements() {
465 return Collections.emptyList();
469 public List<GeneratedType> getEnclosedTypes() {
470 return Collections.emptyList();
474 public List<Enumeration> getEnumerations() {
475 return Collections.emptyList();
479 public List<Constant> getConstantDefinitions() {
480 return Collections.emptyList();
484 public List<MethodSignature> getMethodDefinitions() {
485 // TODO Auto-generated method stub
486 return Collections.emptyList();
490 public List<GeneratedProperty> getProperties() {
491 return Collections.emptyList();
495 public String getDescription() {
500 public String getReference() {
505 public Iterable<QName> getSchemaPath() {
510 public String getModuleName() {