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.controller.binding.generator.util.generated.type.builder;
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
14 import org.opendaylight.controller.sal.binding.model.api.AnnotationType;
15 import org.opendaylight.controller.sal.binding.model.api.Enumeration;
16 import org.opendaylight.controller.sal.binding.model.api.Type;
17 import org.opendaylight.controller.sal.binding.model.api.type.builder.AnnotationTypeBuilder;
18 import org.opendaylight.controller.sal.binding.model.api.type.builder.EnumBuilder;
20 final class EnumerationBuilderImpl implements EnumBuilder {
21 private final String packageName;
22 private final String name;
23 private final List<Enumeration.Pair> values;
24 private final List<AnnotationTypeBuilder> annotationBuilders = new ArrayList<AnnotationTypeBuilder>();
26 public EnumerationBuilderImpl(final String packageName, final String name) {
28 this.packageName = packageName;
30 values = new ArrayList<Enumeration.Pair>();
34 public String getPackageName() {
39 public String getName() {
44 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
45 if (packageName != null && name != null) {
46 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
47 if (annotationBuilders.add(builder)) {
55 public void addValue(final String name, final Integer value) {
56 values.add(new EnumPairImpl(name, value));
60 public Enumeration toInstance(final Type definingType) {
61 return new EnumerationImpl(definingType, annotationBuilders, packageName, name, values);
67 * @see java.lang.Object#hashCode()
70 public int hashCode() {
73 result = prime * result + ((name == null) ? 0 : name.hashCode());
74 result = prime * result
75 + ((packageName == null) ? 0 : packageName.hashCode());
82 * @see java.lang.Object#equals(java.lang.Object)
85 public boolean equals(Object obj) {
92 if (getClass() != obj.getClass()) {
95 EnumerationBuilderImpl other = (EnumerationBuilderImpl) obj;
97 if (other.name != null) {
100 } else if (!name.equals(other.name)) {
103 if (packageName == null) {
104 if (other.packageName != null) {
107 } else if (!packageName.equals(other.packageName)) {
116 * @see java.lang.Object#toString()
119 public String toString() {
120 StringBuilder builder = new StringBuilder();
121 builder.append("EnumerationBuilderImpl [packageName=");
122 builder.append(packageName);
123 builder.append(", name=");
124 builder.append(name);
125 builder.append(", values=");
126 builder.append(values);
128 return builder.toString();
131 private static final class EnumPairImpl implements Enumeration.Pair {
133 private final String name;
134 private final Integer value;
136 public EnumPairImpl(String name, Integer value) {
143 public String getName() {
148 public Integer getValue() {
155 * @see java.lang.Object#hashCode()
158 public int hashCode() {
159 final int prime = 31;
161 result = prime * result + ((name == null) ? 0 : name.hashCode());
162 result = prime * result + ((value == null) ? 0 : value.hashCode());
169 * @see java.lang.Object#equals(java.lang.Object)
172 public boolean equals(Object obj) {
179 if (getClass() != obj.getClass()) {
182 EnumPairImpl other = (EnumPairImpl) obj;
184 if (other.name != null) {
187 } else if (!name.equals(other.name)) {
191 if (other.value != null) {
194 } else if (!value.equals(other.value)) {
203 * @see java.lang.Object#toString()
206 public String toString() {
207 StringBuilder builder = new StringBuilder();
208 builder.append("EnumPair [name=");
209 builder.append(name);
210 builder.append(", value=");
211 builder.append(value);
213 return builder.toString();
217 private static final class EnumerationImpl implements Enumeration {
219 private final Type definingType;
220 private final String packageName;
221 private final String name;
222 private final List<Pair> values;
223 private List<AnnotationType> annotations = new ArrayList<AnnotationType>();
225 public EnumerationImpl(final Type definingType,
226 final List<AnnotationTypeBuilder> annotationBuilders,
227 final String packageName, final String name,
228 final List<Pair> values) {
230 this.definingType = definingType;
231 for (final AnnotationTypeBuilder builder : annotationBuilders) {
232 annotations.add(builder.toInstance());
234 this.annotations = Collections.unmodifiableList(annotations);
235 this.packageName = packageName;
237 this.values = Collections.unmodifiableList(values);
241 public Type getDefiningType() {
246 public String getPackageName() {
251 public String getName() {
256 public List<Pair> getValues() {
261 public List<AnnotationType> getAnnotations() {
266 public String toFormattedString() {
267 StringBuilder builder = new StringBuilder();
268 builder.append("public enum");
270 builder.append(name);
271 builder.append(" {");
272 builder.append("\n");
275 for (final Enumeration.Pair valPair : values) {
276 builder.append("\t");
278 builder.append(valPair.getName());
279 builder.append(" (");
280 builder.append(valPair.getValue());
282 if (i == (values.size() - 1)) {
283 builder.append(" );");
285 builder.append(" ),");
289 return builder.toString();
295 * @see java.lang.Object#hashCode()
298 public int hashCode() {
299 final int prime = 31;
301 result = prime * result + ((name == null) ? 0 : name.hashCode());
302 result = prime * result
303 + ((packageName == null) ? 0 : packageName.hashCode());
304 result = prime * result
305 + ((values == null) ? 0 : values.hashCode());
313 * @see java.lang.Object#equals(java.lang.Object)
316 public boolean equals(Object obj) {
323 if (getClass() != obj.getClass()) {
326 EnumerationImpl other = (EnumerationImpl) obj;
328 if (other.name != null) {
331 } else if (!name.equals(other.name)) {
334 if (packageName == null) {
335 if (other.packageName != null) {
338 } else if (!packageName.equals(other.packageName)) {
341 if (values == null) {
342 if (other.values != null) {
345 } else if (!values.equals(other.values)) {
354 * @see java.lang.Object#toString()
357 public String toString() {
358 StringBuilder builder = new StringBuilder();
359 builder.append("Enumeration [packageName=");
360 builder.append(packageName);
361 if (definingType != null) {
362 builder.append(", definingType=");
363 builder.append(definingType.getPackageName());
365 builder.append(definingType.getName());
367 builder.append(", definingType= null");
369 builder.append(", name=");
370 builder.append(name);
371 builder.append(", values=");
372 builder.append(values);
374 return builder.toString();