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