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.Constant;
19 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
20 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty;
21 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;
22 import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature;
23 import org.opendaylight.yangtools.sal.binding.model.api.Type;
24 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.AnnotationTypeBuilder;
25 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.EnumBuilder;
26 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
27 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
29 public final class EnumerationBuilderImpl extends AbstractBaseType implements EnumBuilder {
30 private final String packageName;
31 private final String name;
32 private final List<Enumeration.Pair> values;
33 private final List<AnnotationTypeBuilder> annotationBuilders = new ArrayList<>();
35 public EnumerationBuilderImpl(final String packageName, final String name) {
36 super(packageName, name);
37 this.packageName = packageName;
39 values = new ArrayList<>();
43 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
44 if (packageName != null && name != null) {
45 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
46 if (annotationBuilders.add(builder)) {
54 public void addValue(final String name, final Integer value) {
55 values.add(new EnumPairImpl(name, value));
59 public Enumeration toInstance(final Type definingType) {
60 return new EnumerationImpl(definingType, annotationBuilders, packageName, name, values);
66 * @see java.lang.Object#hashCode()
69 public int hashCode() {
72 result = prime * result + ((name == null) ? 0 : name.hashCode());
73 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
80 * @see java.lang.Object#equals(java.lang.Object)
83 public boolean equals(Object obj) {
90 if (getClass() != obj.getClass()) {
93 EnumerationBuilderImpl other = (EnumerationBuilderImpl) obj;
95 if (other.name != null) {
98 } else if (!name.equals(other.name)) {
101 if (packageName == null) {
102 if (other.packageName != null) {
105 } else if (!packageName.equals(other.packageName)) {
114 * @see java.lang.Object#toString()
117 public String toString() {
118 StringBuilder builder = new StringBuilder();
119 builder.append("EnumerationBuilderImpl [packageName=");
120 builder.append(packageName);
121 builder.append(", name=");
122 builder.append(name);
123 builder.append(", values=");
124 builder.append(values);
126 return builder.toString();
130 public void updateEnumPairsFromEnumTypeDef(final EnumTypeDefinition enumTypeDef) {
131 final List<EnumPair> enums = enumTypeDef.getValues();
134 for (final EnumPair enumPair : enums) {
135 if (enumPair != null) {
136 final String enumPairName = parseToClassName(enumPair.getName());
137 Integer enumPairValue = enumPair.getValue();
139 if (enumPairValue == null) {
140 enumPairValue = listIndex;
142 this.addValue(enumPairName, enumPairValue);
150 private static final class EnumPairImpl implements Enumeration.Pair {
152 private final String name;
153 private final Integer value;
155 public EnumPairImpl(String name, Integer value) {
162 public String getName() {
167 public Integer getValue() {
174 * @see java.lang.Object#hashCode()
177 public int hashCode() {
178 final int prime = 31;
180 result = prime * result + ((name == null) ? 0 : name.hashCode());
181 result = prime * result + ((value == null) ? 0 : value.hashCode());
188 * @see java.lang.Object#equals(java.lang.Object)
191 public boolean equals(Object obj) {
198 if (getClass() != obj.getClass()) {
201 EnumPairImpl other = (EnumPairImpl) obj;
203 if (other.name != null) {
206 } else if (!name.equals(other.name)) {
210 if (other.value != null) {
213 } else if (!value.equals(other.value)) {
222 * @see java.lang.Object#toString()
225 public String toString() {
226 StringBuilder builder = new StringBuilder();
227 builder.append("EnumPair [name=");
228 builder.append(name);
229 builder.append(", value=");
230 builder.append(value);
232 return builder.toString();
236 private static final class EnumerationImpl implements Enumeration {
238 private final Type definingType;
239 private final String packageName;
240 private final String name;
241 private final List<Pair> values;
242 private List<AnnotationType> annotations = new ArrayList<>();
244 public EnumerationImpl(final Type definingType, final List<AnnotationTypeBuilder> annotationBuilders,
245 final String packageName, final String name, final List<Pair> values) {
247 this.definingType = definingType;
248 for (final AnnotationTypeBuilder builder : annotationBuilders) {
249 annotations.add(builder.toInstance());
251 this.annotations = Collections.unmodifiableList(annotations);
252 this.packageName = packageName;
254 this.values = Collections.unmodifiableList(values);
258 public Type getParentType() {
263 public String getPackageName() {
268 public String getName() {
273 public String getFullyQualifiedName() {
274 return packageName + "." + name;
278 public List<Pair> getValues() {
283 public List<AnnotationType> getAnnotations() {
288 public String toFormattedString() {
289 StringBuilder builder = new StringBuilder();
290 builder.append("public enum");
292 builder.append(name);
293 builder.append(" {");
294 builder.append("\n");
297 for (final Enumeration.Pair valPair : values) {
298 builder.append("\t");
300 builder.append(valPair.getName());
301 builder.append(" (");
302 builder.append(valPair.getValue());
304 if (i == (values.size() - 1)) {
305 builder.append(" );");
307 builder.append(" ),");
311 builder.append("\n}");
312 return builder.toString();
318 * @see java.lang.Object#hashCode()
321 public int hashCode() {
322 final int prime = 31;
324 result = prime * result + ((name == null) ? 0 : name.hashCode());
325 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
326 result = prime * result + ((values == null) ? 0 : values.hashCode());
334 * @see java.lang.Object#equals(java.lang.Object)
337 public boolean equals(Object obj) {
344 if (getClass() != obj.getClass()) {
347 EnumerationImpl other = (EnumerationImpl) obj;
349 if (other.name != null) {
352 } else if (!name.equals(other.name)) {
355 if (packageName == null) {
356 if (other.packageName != null) {
359 } else if (!packageName.equals(other.packageName)) {
362 if (values == null) {
363 if (other.values != null) {
366 } else if (!values.equals(other.values)) {
375 * @see java.lang.Object#toString()
378 public String toString() {
379 StringBuilder builder = new StringBuilder();
380 builder.append("Enumeration [packageName=");
381 builder.append(packageName);
382 if (definingType != null) {
383 builder.append(", definingType=");
384 builder.append(definingType.getPackageName());
386 builder.append(definingType.getName());
388 builder.append(", definingType= null");
390 builder.append(", name=");
391 builder.append(name);
392 builder.append(", values=");
393 builder.append(values);
395 return builder.toString();
399 public String getComment() {
404 public boolean isAbstract() {
409 public List<Type> getImplements() {
410 return Collections.emptyList();
414 public List<GeneratedType> getEnclosedTypes() {
415 return Collections.emptyList();
419 public List<Enumeration> getEnumerations() {
420 return Collections.emptyList();
424 public List<Constant> getConstantDefinitions() {
425 return Collections.emptyList();
429 public List<MethodSignature> getMethodDefinitions() {
430 // TODO Auto-generated method stub
431 return Collections.emptyList();
435 public List<GeneratedProperty> getProperties() {
436 return Collections.emptyList();