2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
8 package org.opendaylight.yangtools.binding.generator.util.generated.type.builder;
\r
10 import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.parseToClassName;
\r
12 import java.util.ArrayList;
\r
13 import java.util.Collections;
\r
14 import java.util.List;
\r
16 import org.opendaylight.yangtools.binding.generator.util.AbstractBaseType;
\r
17 import org.opendaylight.yangtools.sal.binding.model.api.AnnotationType;
\r
18 import org.opendaylight.yangtools.sal.binding.model.api.Constant;
\r
19 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
\r
20 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;
\r
21 import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature;
\r
22 import org.opendaylight.yangtools.sal.binding.model.api.Type;
\r
23 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.AnnotationTypeBuilder;
\r
24 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.EnumBuilder;
\r
25 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
\r
26 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
\r
28 public final class EnumerationBuilderImpl extends AbstractBaseType implements EnumBuilder {
\r
29 private final String packageName;
\r
30 private final String name;
\r
31 private final List<Enumeration.Pair> values;
\r
32 private final List<AnnotationTypeBuilder> annotationBuilders = new ArrayList<>();
\r
34 public EnumerationBuilderImpl(final String packageName, final String name) {
\r
35 super(packageName, name);
\r
36 this.packageName = packageName;
\r
38 values = new ArrayList<>();
\r
42 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
\r
43 if (packageName != null && name != null) {
\r
44 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
\r
45 if (annotationBuilders.add(builder)) {
\r
53 public void addValue(final String name, final Integer value) {
\r
54 values.add(new EnumPairImpl(name, value));
\r
58 public Enumeration toInstance(final Type definingType) {
\r
59 return new EnumerationImpl(definingType, annotationBuilders, packageName, name, values);
\r
65 * @see java.lang.Object#hashCode()
\r
68 public int hashCode() {
\r
69 final int prime = 31;
\r
71 result = prime * result + ((name == null) ? 0 : name.hashCode());
\r
72 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
\r
79 * @see java.lang.Object#equals(java.lang.Object)
\r
82 public boolean equals(Object obj) {
\r
89 if (getClass() != obj.getClass()) {
\r
92 EnumerationBuilderImpl other = (EnumerationBuilderImpl) obj;
\r
94 if (other.name != null) {
\r
97 } else if (!name.equals(other.name)) {
\r
100 if (packageName == null) {
\r
101 if (other.packageName != null) {
\r
104 } else if (!packageName.equals(other.packageName)) {
\r
113 * @see java.lang.Object#toString()
\r
116 public String toString() {
\r
117 StringBuilder builder = new StringBuilder();
\r
118 builder.append("EnumerationBuilderImpl [packageName=");
\r
119 builder.append(packageName);
\r
120 builder.append(", name=");
\r
121 builder.append(name);
\r
122 builder.append(", values=");
\r
123 builder.append(values);
\r
124 builder.append("]");
\r
125 return builder.toString();
\r
129 public void updateEnumPairsFromEnumTypeDef(final EnumTypeDefinition enumTypeDef) {
\r
130 final List<EnumPair> enums = enumTypeDef.getValues();
\r
131 if (enums != null) {
\r
133 for (final EnumPair enumPair : enums) {
\r
134 if (enumPair != null) {
\r
135 final String enumPairName = parseToClassName(enumPair.getName());
\r
136 Integer enumPairValue = enumPair.getValue();
\r
138 if (enumPairValue == null) {
\r
139 enumPairValue = listIndex;
\r
141 this.addValue(enumPairName, enumPairValue);
\r
149 private static final class EnumPairImpl implements Enumeration.Pair {
\r
151 private final String name;
\r
152 private final Integer value;
\r
154 public EnumPairImpl(String name, Integer value) {
\r
157 this.value = value;
\r
161 public String getName() {
\r
166 public Integer getValue() {
\r
173 * @see java.lang.Object#hashCode()
\r
176 public int hashCode() {
\r
177 final int prime = 31;
\r
179 result = prime * result + ((name == null) ? 0 : name.hashCode());
\r
180 result = prime * result + ((value == null) ? 0 : value.hashCode());
\r
187 * @see java.lang.Object#equals(java.lang.Object)
\r
190 public boolean equals(Object obj) {
\r
197 if (getClass() != obj.getClass()) {
\r
200 EnumPairImpl other = (EnumPairImpl) obj;
\r
201 if (name == null) {
\r
202 if (other.name != null) {
\r
205 } else if (!name.equals(other.name)) {
\r
208 if (value == null) {
\r
209 if (other.value != null) {
\r
212 } else if (!value.equals(other.value)) {
\r
221 * @see java.lang.Object#toString()
\r
224 public String toString() {
\r
225 StringBuilder builder = new StringBuilder();
\r
226 builder.append("EnumPair [name=");
\r
227 builder.append(name);
\r
228 builder.append(", value=");
\r
229 builder.append(value);
\r
230 builder.append("]");
\r
231 return builder.toString();
\r
235 private static final class EnumerationImpl implements Enumeration {
\r
237 private final Type definingType;
\r
238 private final String packageName;
\r
239 private final String name;
\r
240 private final List<Pair> values;
\r
241 private List<AnnotationType> annotations = new ArrayList<>();
\r
243 public EnumerationImpl(final Type definingType, final List<AnnotationTypeBuilder> annotationBuilders,
\r
244 final String packageName, final String name, final List<Pair> values) {
\r
246 this.definingType = definingType;
\r
247 for (final AnnotationTypeBuilder builder : annotationBuilders) {
\r
248 annotations.add(builder.toInstance());
\r
250 this.annotations = Collections.unmodifiableList(annotations);
\r
251 this.packageName = packageName;
\r
253 this.values = Collections.unmodifiableList(values);
\r
257 public Type getParentType() {
\r
258 return definingType;
\r
262 public String getPackageName() {
\r
263 return packageName;
\r
267 public String getName() {
\r
272 public String getFullyQualifiedName() {
\r
273 return packageName + "." + name;
\r
277 public List<Pair> getValues() {
\r
282 public List<AnnotationType> getAnnotations() {
\r
283 return annotations;
\r
287 public String toFormattedString() {
\r
288 StringBuilder builder = new StringBuilder();
\r
289 builder.append("public enum");
\r
290 builder.append(" ");
\r
291 builder.append(name);
\r
292 builder.append(" {");
\r
293 builder.append("\n");
\r
296 for (final Enumeration.Pair valPair : values) {
\r
297 builder.append("\t");
\r
298 builder.append(" ");
\r
299 builder.append(valPair.getName());
\r
300 builder.append(" (");
\r
301 builder.append(valPair.getValue());
\r
303 if (i == (values.size() - 1)) {
\r
304 builder.append(" );");
\r
306 builder.append(" ),");
\r
310 builder.append("\n}");
\r
311 return builder.toString();
\r
317 * @see java.lang.Object#hashCode()
\r
320 public int hashCode() {
\r
321 final int prime = 31;
\r
323 result = prime * result + ((name == null) ? 0 : name.hashCode());
\r
324 result = prime * result + ((packageName == null) ? 0 : packageName.hashCode());
\r
325 result = prime * result + ((values == null) ? 0 : values.hashCode());
\r
333 * @see java.lang.Object#equals(java.lang.Object)
\r
336 public boolean equals(Object obj) {
\r
343 if (getClass() != obj.getClass()) {
\r
346 EnumerationImpl other = (EnumerationImpl) obj;
\r
347 if (name == null) {
\r
348 if (other.name != null) {
\r
351 } else if (!name.equals(other.name)) {
\r
354 if (packageName == null) {
\r
355 if (other.packageName != null) {
\r
358 } else if (!packageName.equals(other.packageName)) {
\r
361 if (values == null) {
\r
362 if (other.values != null) {
\r
365 } else if (!values.equals(other.values)) {
\r
374 * @see java.lang.Object#toString()
\r
377 public String toString() {
\r
378 StringBuilder builder = new StringBuilder();
\r
379 builder.append("Enumeration [packageName=");
\r
380 builder.append(packageName);
\r
381 if (definingType != null) {
\r
382 builder.append(", definingType=");
\r
383 builder.append(definingType.getPackageName());
\r
384 builder.append(".");
\r
385 builder.append(definingType.getName());
\r
387 builder.append(", definingType= null");
\r
389 builder.append(", name=");
\r
390 builder.append(name);
\r
391 builder.append(", values=");
\r
392 builder.append(values);
\r
393 builder.append("]");
\r
394 return builder.toString();
\r
398 public String getComment() {
\r
403 public boolean isAbstract() {
\r
408 public List<Type> getImplements() {
\r
409 return Collections.emptyList();
\r
413 public List<GeneratedType> getEnclosedTypes() {
\r
414 return Collections.emptyList();
\r
418 public List<Enumeration> getEnumerations() {
\r
419 return Collections.emptyList();
\r
423 public List<Constant> getConstantDefinitions() {
\r
424 return Collections.emptyList();
\r
428 public List<MethodSignature> getMethodDefinitions() {
\r
429 // TODO Auto-generated method stub
\r
430 return Collections.emptyList();
\r