Bug 6859: Cleanup package names for mdsal-binding-generator-util module
[mdsal.git] / binding / mdsal-binding-generator-util / src / main / java / org / opendaylight / yangtools / binding / generator / util / generated / type / builder / EnumerationBuilderImpl.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.binding.generator.util.generated.type.builder;
9
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.yangtools.binding.generator.util.AbstractBaseType;
16 import org.opendaylight.yangtools.sal.binding.model.api.AnnotationType;
17 import org.opendaylight.yangtools.sal.binding.model.api.Constant;
18 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
19 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration.Pair;
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.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;
32
33 /**
34  * @deprecated Use {@link org.opendaylight.mdsal.binding.generator.util.generated.type.builder.EnumerationBuilderImpl} instead.
35  */
36 @Deprecated
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;
47
48     public EnumerationBuilderImpl(final String packageName, final String name) {
49         super(packageName, name);
50         this.packageName = packageName;
51         this.name = name;
52     }
53
54     public void setReference(final String reference) {
55         this.reference = reference;
56     }
57
58     public void setModuleName(final String moduleName) {
59         this.moduleName = moduleName;
60     }
61
62     public void setSchemaPath(final Iterable<QName> schemaPath) {
63         this.schemaPath = schemaPath;
64     }
65
66     @Override
67     public void setDescription(final String description) {
68         this.description = description;
69
70     }
71
72     @Override
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);
78                 return builder;
79             }
80         }
81         return null;
82     }
83
84     @Override
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);
89     }
90
91     @Override
92     public Enumeration toInstance(final Type definingType) {
93         return new EnumerationImpl(definingType, annotationBuilders, packageName, name, unmodifiableValues,
94                 description, reference, moduleName, schemaPath);
95     }
96
97     /*
98      * (non-Javadoc)
99      *
100      * @see java.lang.Object#toString()
101      */
102     @Override
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);
111         builder.append("]");
112         return builder.toString();
113     }
114
115     @Override
116     public void updateEnumPairsFromEnumTypeDef(final EnumTypeDefinition enumTypeDef) {
117         final List<EnumPair> enums = enumTypeDef.getValues();
118         if (enums != null) {
119             for (final EnumPair enumPair : enums) {
120                 if (enumPair != null) {
121                     this.addValue(enumPair.getName(), enumPair.getValue(), enumPair.getDescription());
122                 }
123             }
124         }
125
126     }
127
128     private static final class EnumPairImpl implements Enumeration.Pair {
129
130         private final String name;
131         private final String mappedName;
132         private final int value;
133         private final String description;
134
135         public EnumPairImpl(final String name, final int value, final String description) {
136             super();
137             this.name = name;
138             this.mappedName = BindingMapping.getClassName(name);
139             this.value = value;
140             this.description = description;
141         }
142
143         @Override
144         public String getName() {
145             return name;
146         }
147
148         @Override
149         public String getMappedName() {
150             return mappedName;
151         }
152
153         @Override
154         public int getValue() {
155             return value;
156         }
157
158         /*
159          * (non-Javadoc)
160          *
161          * @see java.lang.Object#hashCode()
162          */
163         @Override
164         public int hashCode() {
165             final int prime = 31;
166             int result = 1;
167             result = prime * result + Objects.hashCode(name);
168             result = prime * result + Objects.hashCode(value);
169             return result;
170         }
171
172         /*
173          * (non-Javadoc)
174          *
175          * @see java.lang.Object#equals(java.lang.Object)
176          */
177         @Override
178         public boolean equals(final Object obj) {
179             if (this == obj) {
180                 return true;
181             }
182             if (obj == null) {
183                 return false;
184             }
185             if (getClass() != obj.getClass()) {
186                 return false;
187             }
188             EnumPairImpl other = (EnumPairImpl) obj;
189             return Objects.equals(name, other.name) && Objects.equals(value, other.value);
190         }
191
192         /*
193          * (non-Javadoc)
194          *
195          * @see java.lang.Object#toString()
196          */
197         @Override
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);
206             builder.append("]");
207             return builder.toString();
208         }
209
210         @Override
211         public String getDescription() {
212             return description;
213         }
214
215         @Override
216         public String getReference() {
217             return null;
218         }
219
220         @Override
221         public Status getStatus() {
222             // TODO Auto-generated method stub
223             return null;
224         }
225
226     }
227
228     private static final class EnumerationImpl extends AbstractBaseType implements Enumeration {
229
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;
237
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;
248
249             final ArrayList<AnnotationType> a = new ArrayList<>();
250             for (final AnnotationTypeBuilder builder : annotationBuilders) {
251                 a.add(builder.toInstance());
252             }
253             this.annotations = ImmutableList.copyOf(a);
254         }
255
256         @Override
257         public Type getParentType() {
258             return definingType;
259         }
260
261         @Override
262         public List<Pair> getValues() {
263             return values;
264         }
265
266         @Override
267         public List<AnnotationType> getAnnotations() {
268             return annotations;
269         }
270
271         @Override
272         public String toFormattedString() {
273             StringBuilder builder = new StringBuilder();
274             builder.append("public enum");
275             builder.append(" ");
276             builder.append(getName());
277             builder.append(" {");
278             builder.append("\n");
279
280             int i = 0;
281             for (final Enumeration.Pair valPair : values) {
282                 builder.append("\t");
283                 builder.append(" ");
284                 builder.append(valPair.getMappedName());
285                 builder.append(" (");
286                 builder.append(valPair.getValue());
287
288                 if (i == (values.size() - 1)) {
289                     builder.append(" );");
290                 } else {
291                     builder.append(" ),");
292                 }
293                 ++i;
294             }
295             builder.append("\n}");
296             return builder.toString();
297         }
298
299         /*
300          * (non-Javadoc)
301          *
302          * @see java.lang.Object#toString()
303          */
304         @Override
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());
312                 builder.append(".");
313                 builder.append(definingType.getName());
314             } else {
315                 builder.append(", definingType= null");
316             }
317             builder.append(", name=");
318             builder.append(getName());
319             builder.append(", values=");
320             builder.append(values);
321             builder.append("]");
322             return builder.toString();
323         }
324
325         @Override
326         public String getComment() {
327             return null;
328         }
329
330         @Override
331         public boolean isAbstract() {
332             return false;
333         }
334
335         @Override
336         public List<Type> getImplements() {
337             return Collections.emptyList();
338         }
339
340         @Override
341         public List<GeneratedType> getEnclosedTypes() {
342             return Collections.emptyList();
343         }
344
345         @Override
346         public List<Enumeration> getEnumerations() {
347             return Collections.emptyList();
348         }
349
350         @Override
351         public List<Constant> getConstantDefinitions() {
352             return Collections.emptyList();
353         }
354
355         @Override
356         public List<MethodSignature> getMethodDefinitions() {
357             return Collections.emptyList();
358         }
359
360         @Override
361         public List<GeneratedProperty> getProperties() {
362             return Collections.emptyList();
363         }
364
365         @Override
366         public String getDescription() {
367             return description;
368         }
369
370         @Override
371         public String getReference() {
372             return reference;
373         }
374
375         @Override
376         public Iterable<QName> getSchemaPath() {
377             return schemaPath;
378         }
379
380         @Override
381         public String getModuleName() {
382             return moduleName;
383         }
384     }
385 }