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.mdsal.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.generator.util.AbstractBaseType;
16 import org.opendaylight.mdsal.binding.model.api.AnnotationType;
17 import org.opendaylight.mdsal.binding.model.api.Constant;
18 import org.opendaylight.mdsal.binding.model.api.Enumeration;
19 import org.opendaylight.mdsal.binding.model.api.Enumeration.Pair;
20 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty;
21 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
22 import org.opendaylight.mdsal.binding.model.api.MethodSignature;
23 import org.opendaylight.mdsal.binding.model.api.Type;
24 import org.opendaylight.mdsal.binding.model.api.type.builder.AnnotationTypeBuilder;
25 import org.opendaylight.mdsal.binding.model.api.type.builder.EnumBuilder;
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;
33 public final class EnumerationBuilderImpl extends AbstractBaseType implements EnumBuilder {
34 private final String packageName;
35 private final String name;
36 private List<Enumeration.Pair> values = Collections.emptyList();
37 private List<AnnotationTypeBuilder> annotationBuilders = Collections.emptyList();
38 private List<Pair> unmodifiableValues = Collections.emptyList();
39 private String description;
40 private String reference;
41 private String moduleName;
42 private Iterable<QName> schemaPath;
44 public EnumerationBuilderImpl(final String packageName, final String name) {
45 super(packageName, name);
46 this.packageName = packageName;
50 public void setReference(final String reference) {
51 this.reference = reference;
54 public void setModuleName(final String moduleName) {
55 this.moduleName = moduleName;
58 public void setSchemaPath(final Iterable<QName> schemaPath) {
59 this.schemaPath = schemaPath;
63 public void setDescription(final String description) {
64 this.description = description;
69 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
70 if ((packageName != null) && (name != null)) {
71 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
72 if (!this.annotationBuilders.contains(builder)) {
73 this.annotationBuilders = LazyCollections.lazyAdd(this.annotationBuilders, builder);
81 public void addValue(final String name, final int value, final String description) {
82 final EnumPairImpl p = new EnumPairImpl(name, value, description);
83 this.values = LazyCollections.lazyAdd(this.values, p);
84 this.unmodifiableValues = Collections.unmodifiableList(this.values);
88 public Enumeration toInstance(final Type definingType) {
89 return new EnumerationImpl(definingType, this.annotationBuilders, this.packageName, this.name, this.unmodifiableValues,
90 this.description, this.reference, this.moduleName, this.schemaPath);
96 * @see java.lang.Object#toString()
99 public String toString() {
100 final StringBuilder builder = new StringBuilder();
101 builder.append("EnumerationBuilderImpl [packageName=");
102 builder.append(this.packageName);
103 builder.append(", name=");
104 builder.append(this.name);
105 builder.append(", values=");
106 builder.append(this.values);
108 return builder.toString();
112 public void updateEnumPairsFromEnumTypeDef(final EnumTypeDefinition enumTypeDef) {
113 final List<EnumPair> enums = enumTypeDef.getValues();
115 for (final EnumPair enumPair : enums) {
116 if (enumPair != null) {
117 this.addValue(enumPair.getName(), enumPair.getValue(), enumPair.getDescription());
124 private static final class EnumPairImpl implements Enumeration.Pair {
126 private final String name;
127 private final String mappedName;
128 private final int value;
129 private final String description;
131 public EnumPairImpl(final String name, final int value, final String description) {
134 this.mappedName = BindingMapping.getClassName(name);
136 this.description = description;
140 public String getName() {
145 public String getMappedName() {
146 return this.mappedName;
150 public int getValue() {
157 * @see java.lang.Object#hashCode()
160 public int hashCode() {
161 final int prime = 31;
163 result = (prime * result) + Objects.hashCode(this.name);
164 result = (prime * result) + Objects.hashCode(this.value);
171 * @see java.lang.Object#equals(java.lang.Object)
174 public boolean equals(final Object obj) {
181 if (getClass() != obj.getClass()) {
184 final EnumPairImpl other = (EnumPairImpl) obj;
185 return Objects.equals(this.name, other.name) && Objects.equals(this.value, other.value);
191 * @see java.lang.Object#toString()
194 public String toString() {
195 final StringBuilder builder = new StringBuilder();
196 builder.append("EnumPair [name=");
197 builder.append(this.name);
198 builder.append(", mappedName=");
199 builder.append(getMappedName());
200 builder.append(", value=");
201 builder.append(this.value);
203 return builder.toString();
207 public String getDescription() {
208 return this.description;
212 public String getReference() {
217 public Status getStatus() {
218 // TODO Auto-generated method stub
224 private static final class EnumerationImpl extends AbstractBaseType implements Enumeration {
226 private final Type definingType;
227 private final String description;
228 private final String reference;
229 private final String moduleName;
230 private final Iterable<QName> schemaPath;
231 private final List<Pair> values;
232 private final List<AnnotationType> annotations;
234 public EnumerationImpl(final Type definingType, final List<AnnotationTypeBuilder> annotationBuilders,
235 final String packageName, final String name, final List<Pair> values, final String description,
236 final String reference, final String moduleName, final Iterable<QName> schemaPath) {
237 super(packageName, name);
238 this.definingType = definingType;
239 this.values = values;
240 this.description = description;
241 this.moduleName = moduleName;
242 this.schemaPath = schemaPath;
243 this.reference = reference;
245 final ArrayList<AnnotationType> a = new ArrayList<>();
246 for (final AnnotationTypeBuilder builder : annotationBuilders) {
247 a.add(builder.toInstance());
249 this.annotations = ImmutableList.copyOf(a);
253 public Type getParentType() {
254 return this.definingType;
258 public List<Pair> getValues() {
263 public List<AnnotationType> getAnnotations() {
264 return this.annotations;
268 public String toFormattedString() {
269 final StringBuilder builder = new StringBuilder();
270 builder.append("public enum");
272 builder.append(getName());
273 builder.append(" {");
274 builder.append("\n");
277 for (final Enumeration.Pair valPair : this.values) {
278 builder.append("\t");
280 builder.append(valPair.getMappedName());
281 builder.append(" (");
282 builder.append(valPair.getValue());
284 if (i == (this.values.size() - 1)) {
285 builder.append(" );");
287 builder.append(" ),");
291 builder.append("\n}");
292 return builder.toString();
298 * @see java.lang.Object#toString()
301 public String toString() {
302 final StringBuilder builder = new StringBuilder();
303 builder.append("Enumeration [packageName=");
304 builder.append(getPackageName());
305 if (this.definingType != null) {
306 builder.append(", definingType=");
307 builder.append(this.definingType.getPackageName());
309 builder.append(this.definingType.getName());
311 builder.append(", definingType= null");
313 builder.append(", name=");
314 builder.append(getName());
315 builder.append(", values=");
316 builder.append(this.values);
318 return builder.toString();
322 public String getComment() {
327 public boolean isAbstract() {
332 public List<Type> getImplements() {
333 return Collections.emptyList();
337 public List<GeneratedType> getEnclosedTypes() {
338 return Collections.emptyList();
342 public List<Enumeration> getEnumerations() {
343 return Collections.emptyList();
347 public List<Constant> getConstantDefinitions() {
348 return Collections.emptyList();
352 public List<MethodSignature> getMethodDefinitions() {
353 return Collections.emptyList();
357 public List<GeneratedProperty> getProperties() {
358 return Collections.emptyList();
362 public String getDescription() {
363 return this.description;
367 public String getReference() {
368 return this.reference;
372 public Iterable<QName> getSchemaPath() {
373 return this.schemaPath;
377 public String getModuleName() {
378 return this.moduleName;