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.mdsal.binding.model.util.generated.type.builder;
10 import static java.util.Objects.requireNonNull;
12 import com.google.common.collect.ImmutableList;
13 import java.util.ArrayList;
14 import java.util.Collections;
15 import java.util.List;
16 import java.util.Objects;
17 import org.opendaylight.mdsal.binding.model.api.AnnotationType;
18 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
19 import org.opendaylight.mdsal.binding.model.api.type.builder.AnnotationTypeBuilder;
20 import org.opendaylight.mdsal.binding.model.util.AbstractBaseType;
21 import org.opendaylight.yangtools.util.LazyCollections;
23 final class AnnotationTypeBuilderImpl extends AbstractBaseType implements AnnotationTypeBuilder {
25 private List<AnnotationTypeBuilder> annotationBuilders = Collections.emptyList();
26 private List<AnnotationType.Parameter> parameters = Collections.emptyList();
28 AnnotationTypeBuilderImpl(final JavaTypeName identifier) {
33 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
34 if (packageName != null && name != null) {
35 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(JavaTypeName.create(packageName, name));
36 if (!this.annotationBuilders.contains(builder)) {
37 this.annotationBuilders = LazyCollections.lazyAdd(this.annotationBuilders, builder);
44 private boolean addParameter(final ParameterImpl param) {
45 if (parameters.contains(param)) {
48 parameters = LazyCollections.lazyAdd(parameters, param);
53 public boolean addParameter(final String paramName, final String value) {
54 if (paramName != null && value != null) {
55 final ParameterImpl param = new ParameterImpl(paramName, value);
56 return addParameter(param);
62 public boolean addParameters(final String paramName, final List<String> values) {
63 if (paramName != null && values != null) {
64 final ParameterImpl param = new ParameterImpl(paramName, values);
65 return addParameter(param);
71 public AnnotationType build() {
72 return new AnnotationTypeImpl(getIdentifier(), this.annotationBuilders, this.parameters);
76 public boolean equals(final Object obj) {
80 if (obj == null || getClass() != obj.getClass()) {
83 return getIdentifier().equals(((AnnotationTypeBuilderImpl) obj).getIdentifier());
87 public String toString() {
88 final StringBuilder builder = new StringBuilder();
89 builder.append("AnnotationTypeBuilder [packageName=");
90 builder.append(getPackageName());
91 builder.append(", name=");
92 builder.append(getName());
93 builder.append(", annotationBuilders=");
94 builder.append(this.annotationBuilders);
95 builder.append(", parameters=");
96 builder.append(this.parameters);
98 return builder.toString();
101 private static final class AnnotationTypeImpl implements AnnotationType {
102 private final JavaTypeName identifier;
103 private final List<AnnotationType> annotations;
104 private final List<AnnotationType.Parameter> parameters;
105 private final List<String> paramNames;
107 AnnotationTypeImpl(final JavaTypeName identifier, final List<AnnotationTypeBuilder> annotationBuilders,
108 final List<AnnotationType.Parameter> parameters) {
109 this.identifier = requireNonNull(identifier);
111 final List<AnnotationType> a = new ArrayList<>();
112 for (final AnnotationTypeBuilder builder : annotationBuilders) {
113 a.add(builder.build());
115 this.annotations = ImmutableList.copyOf(a);
117 final List<String> p = new ArrayList<>();
118 for (final AnnotationType.Parameter parameter : parameters) {
119 p.add(parameter.getName());
121 this.paramNames = ImmutableList.copyOf(p);
123 this.parameters = parameters.isEmpty() ? Collections.<AnnotationType.Parameter>emptyList()
124 : Collections.unmodifiableList(parameters);
128 public JavaTypeName getIdentifier() {
133 public List<AnnotationType> getAnnotations() {
134 return this.annotations;
138 public Parameter getParameter(final String paramName) {
139 if (paramName != null) {
140 for (final AnnotationType.Parameter parameter : this.parameters) {
141 if (parameter.getName().equals(paramName)) {
150 public List<Parameter> getParameters() {
151 return this.parameters;
155 public List<String> getParameterNames() {
156 return this.paramNames;
160 public boolean containsParameters() {
161 return !this.parameters.isEmpty();
165 public int hashCode() {
166 return identifier.hashCode();
170 public boolean equals(final Object obj) {
174 if (obj == null || getClass() != obj.getClass()) {
177 final AnnotationTypeImpl other = (AnnotationTypeImpl) obj;
178 return identifier.equals(other.identifier);
182 public String toString() {
183 final StringBuilder builder = new StringBuilder();
184 builder.append("AnnotationType [packageName=");
185 builder.append(getPackageName());
186 builder.append(", name=");
187 builder.append(getName());
188 builder.append(", annotations=");
189 builder.append(this.annotations);
190 builder.append(", parameters=");
191 builder.append(this.parameters);
193 return builder.toString();
197 private static final class ParameterImpl implements AnnotationType.Parameter {
199 private final String name;
200 private final String value;
201 private final List<String> values;
203 public ParameterImpl(final String name, final String value) {
206 this.values = Collections.emptyList();
209 public ParameterImpl(final String name, final List<String> values) {
211 this.values = values;
216 public String getName() {
221 public String getValue() {
226 public List<String> getValues() {
231 public int hashCode() {
232 final int prime = 31;
234 result = prime * result + Objects.hashCode(this.name);
239 public boolean equals(final Object obj) {
246 if (getClass() != obj.getClass()) {
249 final ParameterImpl other = (ParameterImpl) obj;
250 return Objects.equals(this.name, other.name);
254 public String toString() {
255 final StringBuilder builder = new StringBuilder();
256 builder.append("ParameterImpl [name=");
257 builder.append(this.name);
258 builder.append(", value=");
259 builder.append(this.value);
260 builder.append(", values=");
261 builder.append(this.values);
263 return builder.toString();