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.ri.generated.type.builder;
10 import com.google.common.base.MoreObjects.ToStringHelper;
11 import com.google.common.collect.ImmutableList;
12 import java.util.ArrayList;
13 import java.util.Collections;
14 import java.util.List;
15 import java.util.Objects;
16 import org.opendaylight.mdsal.binding.model.api.AbstractType;
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.yangtools.util.LazyCollections;
22 final class AnnotationTypeBuilderImpl extends AbstractType implements AnnotationTypeBuilder {
24 private List<AnnotationTypeBuilder> annotationBuilders = Collections.emptyList();
25 private List<AnnotationType.Parameter> parameters = Collections.emptyList();
27 AnnotationTypeBuilderImpl(final JavaTypeName identifier) {
32 public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {
33 if (packageName != null && name != null) {
34 final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(JavaTypeName.create(packageName, name));
35 if (!this.annotationBuilders.contains(builder)) {
36 this.annotationBuilders = LazyCollections.lazyAdd(this.annotationBuilders, builder);
43 private boolean addParameter(final ParameterImpl param) {
44 if (parameters.contains(param)) {
47 parameters = LazyCollections.lazyAdd(parameters, param);
52 public boolean addParameter(final String paramName, final String value) {
53 if (paramName != null && value != null) {
54 final ParameterImpl param = new ParameterImpl(paramName, value);
55 return addParameter(param);
61 public boolean addParameters(final String paramName, final List<String> values) {
62 if (paramName != null && values != null) {
63 final ParameterImpl param = new ParameterImpl(paramName, values);
64 return addParameter(param);
70 public AnnotationType build() {
71 return new AnnotationTypeImpl(getIdentifier(), this.annotationBuilders, this.parameters);
75 protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
76 return super.addToStringAttributes(toStringHelper)
78 .add("annotationBuilders", annotationBuilders)
79 .add("parameters", parameters);
82 private static final class AnnotationTypeImpl extends AbstractType implements AnnotationType {
83 private final List<AnnotationType> annotations;
84 private final List<AnnotationType.Parameter> parameters;
85 private final List<String> paramNames;
87 AnnotationTypeImpl(final JavaTypeName identifier, final List<AnnotationTypeBuilder> annotationBuilders,
88 final List<AnnotationType.Parameter> parameters) {
91 final List<AnnotationType> a = new ArrayList<>();
92 for (final AnnotationTypeBuilder builder : annotationBuilders) {
93 a.add(builder.build());
95 this.annotations = ImmutableList.copyOf(a);
97 final List<String> p = new ArrayList<>();
98 for (final AnnotationType.Parameter parameter : parameters) {
99 p.add(parameter.getName());
101 this.paramNames = ImmutableList.copyOf(p);
103 this.parameters = parameters.isEmpty() ? Collections.emptyList() : Collections.unmodifiableList(parameters);
107 public List<AnnotationType> getAnnotations() {
108 return this.annotations;
112 public Parameter getParameter(final String paramName) {
113 if (paramName != null) {
114 for (final AnnotationType.Parameter parameter : this.parameters) {
115 if (parameter.getName().equals(paramName)) {
124 public List<Parameter> getParameters() {
125 return this.parameters;
129 public List<String> getParameterNames() {
130 return this.paramNames;
134 public boolean containsParameters() {
135 return !this.parameters.isEmpty();
139 protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) {
140 return super.addToStringAttributes(toStringHelper)
142 .add("annotations", annotations)
143 .add("parameters", parameters);
147 private static final class ParameterImpl implements AnnotationType.Parameter {
149 private final String name;
150 private final String value;
151 private final List<String> values;
153 ParameterImpl(final String name, final String value) {
156 this.values = Collections.emptyList();
159 ParameterImpl(final String name, final List<String> values) {
161 this.values = values;
166 public String getName() {
171 public String getValue() {
176 public List<String> getValues() {
181 public int hashCode() {
182 final int prime = 31;
184 result = prime * result + Objects.hashCode(this.name);
189 public boolean equals(final Object obj) {
196 if (getClass() != obj.getClass()) {
199 final ParameterImpl other = (ParameterImpl) obj;
200 return Objects.equals(this.name, other.name);
204 public String toString() {
205 final StringBuilder builder = new StringBuilder();
206 builder.append("ParameterImpl [name=");
207 builder.append(this.name);
208 builder.append(", value=");
209 builder.append(this.value);
210 builder.append(", values=");
211 builder.append(this.values);
213 return builder.toString();