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.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;
18 final class AnnotationTypeBuilderImpl extends AbstractBaseType implements AnnotationTypeBuilder {
20 private final String packageName;
21 private final String name;
22 private final List<AnnotationTypeBuilder> annotationBuilders;
23 private final List<AnnotationType.Parameter> parameters;
25 public AnnotationTypeBuilderImpl(final String packageName, final String name) {
26 super(packageName, name);
27 this.packageName = packageName;
29 annotationBuilders = new ArrayList<>();
30 parameters = new ArrayList<>();
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)) {
45 public boolean addParameter(String paramName, String value) {
46 if ((paramName != null) && (value != null)) {
47 return parameters.add(new ParameterImpl(paramName, value));
53 public boolean addParameters(String paramName, List<String> values) {
54 if ((paramName != null) && (values != null)) {
55 return parameters.add(new ParameterImpl(paramName, values));
61 public AnnotationType toInstance() {
62 return new AnnotationTypeImpl(packageName, name, annotationBuilders, parameters);
66 public int hashCode() {
69 result = prime * result + ((name == null) ? 0 : name.hashCode());
70 result = prime * result
71 + ((packageName == null) ? 0 : packageName.hashCode());
76 public boolean equals(Object obj) {
83 if (getClass() != obj.getClass()) {
86 AnnotationTypeBuilderImpl other = (AnnotationTypeBuilderImpl) obj;
88 if (other.name != null) {
91 } else if (!name.equals(other.name)) {
94 if (packageName == null) {
95 if (other.packageName != null) {
98 } else if (!packageName.equals(other.packageName)) {
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);
116 return builder.toString();
119 private static final class AnnotationTypeImpl implements AnnotationType {
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;
127 public AnnotationTypeImpl(String packageName, String name,
128 List<AnnotationTypeBuilder> annotationBuilders,
129 List<AnnotationType.Parameter> parameters) {
131 this.packageName = packageName;
134 this.annotations = new ArrayList<>();
135 for (final AnnotationTypeBuilder builder : annotationBuilders) {
136 annotations.add(builder.toInstance());
139 this.annotations = Collections.unmodifiableList(annotations);
140 this.parameters = Collections.unmodifiableList(parameters);
142 paramNames = new ArrayList<>();
143 for (final AnnotationType.Parameter parameter : parameters) {
144 paramNames.add(parameter.getName());
146 this.paramNames = Collections.unmodifiableList(paramNames);
150 public String getPackageName() {
155 public String getName() {
160 public String getFullyQualifiedName() {
161 return packageName + "." + name;
165 public List<AnnotationType> getAnnotations() {
170 public Parameter getParameter(final String paramName) {
171 if (paramName != null) {
172 for (final AnnotationType.Parameter parameter : parameters) {
173 if (parameter.getName().equals(paramName)) {
182 public List<Parameter> getParameters() {
187 public List<String> getParameterNames() {
192 public boolean containsParameters() {
193 return !parameters.isEmpty();
197 public int hashCode() {
198 final int prime = 31;
200 result = prime * result + ((name == null) ? 0 : name.hashCode());
201 result = prime * result
202 + ((packageName == null) ? 0 : packageName.hashCode());
207 public boolean equals(Object obj) {
214 if (getClass() != obj.getClass()) {
217 AnnotationTypeImpl other = (AnnotationTypeImpl) obj;
219 if (other.name != null) {
222 } else if (!name.equals(other.name)) {
225 if (packageName == null) {
226 if (other.packageName != null) {
229 } else if (!packageName.equals(other.packageName)) {
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);
247 return builder.toString();
251 private static final class ParameterImpl implements AnnotationType.Parameter {
253 private final String name;
254 private final String value;
255 private final List<String> values;
257 public ParameterImpl(String name, String value) {
261 this.values = Collections.emptyList();
264 public ParameterImpl(String name, List<String> values) {
267 this.values = values;
272 public String getName() {
277 public String getValue() {
282 public List<String> getValues() {
287 public int hashCode() {
288 final int prime = 31;
290 result = prime * result + ((name == null) ? 0 : name.hashCode());
295 public boolean equals(Object obj) {
302 if (getClass() != obj.getClass()) {
305 ParameterImpl other = (ParameterImpl) obj;
307 if (other.name != null) {
310 } else if (!name.equals(other.name)) {
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);
326 return builder.toString();