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 java.util.Objects;
15 import org.opendaylight.mdsal.binding.model.api.AnnotationType;
16 import org.opendaylight.mdsal.binding.model.api.Constant;
17 import org.opendaylight.mdsal.binding.model.api.Enumeration;
18 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty;
19 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
20 import org.opendaylight.mdsal.binding.model.api.MethodSignature;
21 import org.opendaylight.mdsal.binding.model.api.Type;
22 import org.opendaylight.mdsal.binding.model.api.Enumeration.Pair;
23 import org.opendaylight.mdsal.binding.model.api.type.builder.AnnotationTypeBuilder;
24 import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder;
25 import org.opendaylight.yangtools.binding.generator.util.AbstractBaseType;
26 import org.opendaylight.yangtools.util.LazyCollections;
27 import org.opendaylight.yangtools.yang.binding.BindingMapping;
28 import org.opendaylight.yangtools.yang.common.QName;
29 import org.opendaylight.yangtools.yang.model.api.Status;
30 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;
31 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition.EnumPair;
34 * @deprecated Use {@link org.opendaylight.mdsal.binding.generator.util.generated.type.builder.EnumerationBuilderImpl} instead.
37 public final class EnumerationBuilderImpl extends AbstractBaseType implements EnumBuilder {
38 private final String packageName;
39 private final String name;
40 private List<Enumeration.Pair> values = Collections.emptyList();
41 private List<AnnotationTypeBuilder> annotationBuilders = Collections.emptyList();
42 private List<Pair> unmodifiableValues = Collections.emptyList();
43 private String description;
44 private String reference;
45 private String moduleName;
46 private Iterable<QName> schemaPath;
48 public EnumerationBuilderImpl(final String packageName, final String name) {
49 super(packageName, name);
50 this.packageName = packageName;
54 public void setReference(final String reference) {
55 this.reference = reference;
58 public void setModuleName(final String moduleName) {
59 this.moduleName = moduleName;
62 public void setSchemaPath(final Iterable<QName> schemaPath) {
63 this.schemaPath = schemaPath;
67 public void setDescription(final String description) {
68 this.description = description;
73 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
74 if (packageName != null && name != null) {
75 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
76 if (!annotationBuilders.contains(builder)) {
77 annotationBuilders = LazyCollections.lazyAdd(annotationBuilders, builder);
85 public void addValue(final String name, final int value, final String description) {
86 final EnumPairImpl p = new EnumPairImpl(name, value, description);
87 values = LazyCollections.lazyAdd(values, p);
88 unmodifiableValues = Collections.unmodifiableList(values);
92 public Enumeration toInstance(final Type definingType) {
93 return new EnumerationImpl(definingType, annotationBuilders, packageName, name, unmodifiableValues,
94 description, reference, moduleName, schemaPath);
100 * @see java.lang.Object#toString()
103 public String toString() {
104 StringBuilder builder = new StringBuilder();
105 builder.append("EnumerationBuilderImpl [packageName=");
106 builder.append(packageName);
107 builder.append(", name=");
108 builder.append(name);
109 builder.append(", values=");
110 builder.append(values);
112 return builder.toString();
116 public void updateEnumPairsFromEnumTypeDef(final EnumTypeDefinition enumTypeDef) {
117 final List<EnumPair> enums = enumTypeDef.getValues();
119 for (final EnumPair enumPair : enums) {
120 if (enumPair != null) {
121 this.addValue(enumPair.getName(), enumPair.getValue(), enumPair.getDescription());
128 private static final class EnumPairImpl implements Enumeration.Pair {
130 private final String name;
131 private final String mappedName;
132 private final int value;
133 private final String description;
135 public EnumPairImpl(final String name, final int value, final String description) {
138 this.mappedName = BindingMapping.getClassName(name);
140 this.description = description;
144 public String getName() {
149 public String getMappedName() {
154 public int getValue() {
161 * @see java.lang.Object#hashCode()
164 public int hashCode() {
165 final int prime = 31;
167 result = prime * result + Objects.hashCode(name);
168 result = prime * result + Objects.hashCode(value);
175 * @see java.lang.Object#equals(java.lang.Object)
178 public boolean equals(final Object obj) {
185 if (getClass() != obj.getClass()) {
188 EnumPairImpl other = (EnumPairImpl) obj;
189 return Objects.equals(name, other.name) && Objects.equals(value, other.value);
195 * @see java.lang.Object#toString()
198 public String toString() {
199 StringBuilder builder = new StringBuilder();
200 builder.append("EnumPair [name=");
201 builder.append(name);
202 builder.append(", mappedName=");
203 builder.append(getMappedName());
204 builder.append(", value=");
205 builder.append(value);
207 return builder.toString();
211 public String getDescription() {
216 public String getReference() {
221 public Status getStatus() {
222 // TODO Auto-generated method stub
228 private static final class EnumerationImpl extends AbstractBaseType implements Enumeration {
230 private final Type definingType;
231 private final String description;
232 private final String reference;
233 private final String moduleName;
234 private final Iterable<QName> schemaPath;
235 private final List<Pair> values;
236 private final List<AnnotationType> annotations;
238 public EnumerationImpl(final Type definingType, final List<AnnotationTypeBuilder> annotationBuilders,
239 final String packageName, final String name, final List<Pair> values, final String description,
240 final String reference, final String moduleName, final Iterable<QName> schemaPath) {
241 super(packageName, name);
242 this.definingType = definingType;
243 this.values = values;
244 this.description = description;
245 this.moduleName = moduleName;
246 this.schemaPath = schemaPath;
247 this.reference = reference;
249 final ArrayList<AnnotationType> a = new ArrayList<>();
250 for (final AnnotationTypeBuilder builder : annotationBuilders) {
251 a.add(builder.toInstance());
253 this.annotations = ImmutableList.copyOf(a);
257 public Type getParentType() {
262 public List<Pair> getValues() {
267 public List<AnnotationType> getAnnotations() {
272 public String toFormattedString() {
273 StringBuilder builder = new StringBuilder();
274 builder.append("public enum");
276 builder.append(getName());
277 builder.append(" {");
278 builder.append("\n");
281 for (final Enumeration.Pair valPair : values) {
282 builder.append("\t");
284 builder.append(valPair.getMappedName());
285 builder.append(" (");
286 builder.append(valPair.getValue());
288 if (i == (values.size() - 1)) {
289 builder.append(" );");
291 builder.append(" ),");
295 builder.append("\n}");
296 return builder.toString();
302 * @see java.lang.Object#toString()
305 public String toString() {
306 StringBuilder builder = new StringBuilder();
307 builder.append("Enumeration [packageName=");
308 builder.append(getPackageName());
309 if (definingType != null) {
310 builder.append(", definingType=");
311 builder.append(definingType.getPackageName());
313 builder.append(definingType.getName());
315 builder.append(", definingType= null");
317 builder.append(", name=");
318 builder.append(getName());
319 builder.append(", values=");
320 builder.append(values);
322 return builder.toString();
326 public String getComment() {
331 public boolean isAbstract() {
336 public List<Type> getImplements() {
337 return Collections.emptyList();
341 public List<GeneratedType> getEnclosedTypes() {
342 return Collections.emptyList();
346 public List<Enumeration> getEnumerations() {
347 return Collections.emptyList();
351 public List<Constant> getConstantDefinitions() {
352 return Collections.emptyList();
356 public List<MethodSignature> getMethodDefinitions() {
357 return Collections.emptyList();
361 public List<GeneratedProperty> getProperties() {
362 return Collections.emptyList();
366 public String getDescription() {
371 public String getReference() {
376 public Iterable<QName> getSchemaPath() {
381 public String getModuleName() {