Fixed bug in GeneratedPropertyBuilderImpl.
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-generator-util / src / main / java / org / opendaylight / controller / binding / generator / util / generated / type / builder / AnnotationTypeBuilderImpl.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.controller.binding.generator.util.generated.type.builder;
9
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
13
14 import org.opendaylight.controller.binding.generator.util.AbstractBaseType;
15 import org.opendaylight.controller.sal.binding.model.api.AnnotationType;
16 import org.opendaylight.controller.sal.binding.model.api.type.builder.AnnotationTypeBuilder;
17
18 final class AnnotationTypeBuilderImpl extends AbstractBaseType implements AnnotationTypeBuilder {
19     
20     private final String packageName;
21     private final String name;
22     private final List<AnnotationTypeBuilder> annotationBuilders;
23     private final List<AnnotationType.Parameter> parameters;
24     
25     public AnnotationTypeBuilderImpl(final String packageName, final String name) {
26         super(packageName, name);
27         this.packageName = packageName;
28         this.name = name;
29         annotationBuilders = new ArrayList<>();
30         parameters = new ArrayList<>();
31     }
32
33     @Override
34     public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
35         if (packageName != null && name != null) {
36             final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);
37             if (annotationBuilders.add(builder)) {
38                 return builder;
39             }
40         }
41         return null;
42     }
43
44     @Override
45     public boolean addParameter(String paramName, String value) {
46         if ((paramName != null) && (value != null)) {
47             return parameters.add(new ParameterImpl(paramName, value));
48         }
49         return false;
50     }
51
52     @Override
53     public boolean addParameters(String paramName, List<String> values) {
54         if ((paramName != null) && (values != null)) {
55             return parameters.add(new ParameterImpl(paramName, values));
56         }
57         return false;
58     }
59
60     @Override
61     public AnnotationType toInstance() {
62         return new AnnotationTypeImpl(packageName, name, annotationBuilders, parameters);
63     }
64
65     @Override
66     public int hashCode() {
67         final int prime = 31;
68         int result = 1;
69         result = prime * result + ((name == null) ? 0 : name.hashCode());
70         result = prime * result
71                 + ((packageName == null) ? 0 : packageName.hashCode());
72         return result;
73     }
74
75     @Override
76     public boolean equals(Object obj) {
77         if (this == obj) {
78             return true;
79         }
80         if (obj == null) {
81             return false;
82         }
83         if (getClass() != obj.getClass()) {
84             return false;
85         }
86         AnnotationTypeBuilderImpl other = (AnnotationTypeBuilderImpl) obj;
87         if (name == null) {
88             if (other.name != null) {
89                 return false;
90             }
91         } else if (!name.equals(other.name)) {
92             return false;
93         }
94         if (packageName == null) {
95             if (other.packageName != null) {
96                 return false;
97             }
98         } else if (!packageName.equals(other.packageName)) {
99             return false;
100         }
101         return true;
102     }
103
104     @Override
105     public String toString() {
106         StringBuilder builder = new StringBuilder();
107         builder.append("AnnotationTypeBuilder [packageName=");
108         builder.append(packageName);
109         builder.append(", name=");
110         builder.append(name);
111         builder.append(", annotationBuilders=");
112         builder.append(annotationBuilders);
113         builder.append(", parameters=");
114         builder.append(parameters);
115         builder.append("]");
116         return builder.toString();
117     }
118     
119     private static final class AnnotationTypeImpl implements AnnotationType {
120         
121         private final String packageName;
122         private final String name;
123         private List<AnnotationType> annotations;
124         private final List<AnnotationType.Parameter> parameters;
125         private List<String> paramNames;
126         
127         public AnnotationTypeImpl(String packageName, String name,
128                 List<AnnotationTypeBuilder> annotationBuilders,
129                 List<AnnotationType.Parameter> parameters) {
130             super();
131             this.packageName = packageName;
132             this.name = name;
133             
134             this.annotations = new ArrayList<>();
135             for (final AnnotationTypeBuilder builder : annotationBuilders) {
136                 annotations.add(builder.toInstance());
137             }
138             
139             this.annotations = Collections.unmodifiableList(annotations); 
140             this.parameters = Collections.unmodifiableList(parameters);
141             
142             paramNames = new ArrayList<>();
143             for (final AnnotationType.Parameter parameter : parameters) {
144                 paramNames.add(parameter.getName());
145             }
146             this.paramNames = Collections.unmodifiableList(paramNames);
147         }
148         
149         @Override
150         public String getPackageName() {
151             return packageName;
152         }
153
154         @Override
155         public String getName() {
156             return name;
157         }
158
159         @Override
160         public String getFullyQualifiedName() {
161             return packageName + "." + name;
162         }
163
164         @Override
165         public List<AnnotationType> getAnnotations() {
166             return annotations;
167         }
168
169         @Override
170         public Parameter getParameter(final String paramName) {
171             if (paramName != null) {
172                 for (final AnnotationType.Parameter parameter : parameters) {
173                     if (parameter.getName().equals(paramName)) {
174                         return parameter;
175                     }
176                 }
177             }
178             return null;
179         }
180
181         @Override
182         public List<Parameter> getParameters() {
183             return parameters;
184         }
185
186         @Override
187         public List<String> getParameterNames() {
188             return paramNames;
189         }
190         
191         @Override
192         public boolean containsParameters() {
193             return !parameters.isEmpty();
194         }
195         
196         @Override
197         public int hashCode() {
198             final int prime = 31;
199             int result = 1;
200             result = prime * result + ((name == null) ? 0 : name.hashCode());
201             result = prime * result
202                     + ((packageName == null) ? 0 : packageName.hashCode());
203             return result;
204         }
205
206         @Override
207         public boolean equals(Object obj) {
208             if (this == obj) {
209                 return true;
210             }
211             if (obj == null) {
212                 return false;
213             }
214             if (getClass() != obj.getClass()) {
215                 return false;
216             }
217             AnnotationTypeImpl other = (AnnotationTypeImpl) obj;
218             if (name == null) {
219                 if (other.name != null) {
220                     return false;
221                 }
222             } else if (!name.equals(other.name)) {
223                 return false;
224             }
225             if (packageName == null) {
226                 if (other.packageName != null) {
227                     return false;
228                 }
229             } else if (!packageName.equals(other.packageName)) {
230                 return false;
231             }
232             return true;
233         }
234
235         @Override
236         public String toString() {
237             StringBuilder builder = new StringBuilder();
238             builder.append("AnnotationType [packageName=");
239             builder.append(packageName);
240             builder.append(", name=");
241             builder.append(name);
242             builder.append(", annotations=");
243             builder.append(annotations);
244             builder.append(", parameters=");
245             builder.append(parameters);
246             builder.append("]");
247             return builder.toString();
248         }
249     }
250     
251     private static final class ParameterImpl implements AnnotationType.Parameter {
252         
253         private final String name;
254         private final String value;
255         private final List<String> values;
256         
257         public ParameterImpl(String name, String value) {
258             super();
259             this.name = name;
260             this.value = value;
261             this.values = Collections.emptyList();
262         }
263         
264         public ParameterImpl(String name, List<String> values) {
265             super();
266             this.name = name;
267             this.values = values;
268             this.value = null;
269         }
270
271         @Override
272         public String getName() {
273             return name;
274         }
275
276         @Override
277         public String getValue() {
278             return value;
279         }
280
281         @Override
282         public List<String> getValues() {
283             return values;
284         }
285
286         @Override
287         public int hashCode() {
288             final int prime = 31;
289             int result = 1;
290             result = prime * result + ((name == null) ? 0 : name.hashCode());
291             return result;
292         }
293
294         @Override
295         public boolean equals(Object obj) {
296             if (this == obj) {
297                 return true;
298             }
299             if (obj == null) {
300                 return false;
301             }
302             if (getClass() != obj.getClass()) {
303                 return false;
304             }
305             ParameterImpl other = (ParameterImpl) obj;
306             if (name == null) {
307                 if (other.name != null) {
308                     return false;
309                 }
310             } else if (!name.equals(other.name)) {
311                 return false;
312             }
313             return true;
314         }
315
316         @Override
317         public String toString() {
318             StringBuilder builder = new StringBuilder();
319             builder.append("ParameterImpl [name=");
320             builder.append(name);
321             builder.append(", value=");
322             builder.append(value);
323             builder.append(", values=");
324             builder.append(values);
325             builder.append("]");
326             return builder.toString();
327         }
328     }
329 }