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 / AbstractGeneratedType.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 java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
13
14 import org.opendaylight.yangtools.binding.generator.util.AbstractBaseType;
15 import org.opendaylight.yangtools.sal.binding.model.api.AnnotationType;
16 import org.opendaylight.yangtools.sal.binding.model.api.Constant;
17 import org.opendaylight.yangtools.sal.binding.model.api.Enumeration;
18 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty;
19 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;
20 import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature;
21 import org.opendaylight.yangtools.sal.binding.model.api.Type;
22 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.AnnotationTypeBuilder;
23 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.EnumBuilder;
24 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedPropertyBuilder;
25 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTOBuilder;
26 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTypeBuilder;
27 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.MethodSignatureBuilder;
28
29 /**
30  * @deprecated Use {@link org.opendaylight.mdsal.binding.generator.util.generated.type.builder.AbstractGeneratedType} instead.
31  */
32 @Deprecated
33 abstract class AbstractGeneratedType extends AbstractBaseType implements GeneratedType {
34
35     private final Type parent;
36     private final String comment;
37     private final List<AnnotationType> annotations;
38     private final List<Type> implementsTypes;
39     private final List<Enumeration> enumerations;
40     private final List<Constant> constants;
41     private final List<MethodSignature> methodSignatures;
42     private final List<GeneratedType> enclosedTypes;
43     private final List<GeneratedProperty> properties;
44     private final boolean isAbstract;
45
46     public AbstractGeneratedType(final AbstractGeneratedTypeBuilder<?> builder) {
47         super(builder.getPackageName(), builder.getName());
48         this.parent = builder.getParent();
49         this.comment = builder.getComment();
50         this.annotations = toUnmodifiableAnnotations(builder.getAnnotations());
51         this.implementsTypes = makeUnmodifiable(builder.getImplementsTypes());
52         this.constants = makeUnmodifiable(builder.getConstants());
53         this.enumerations = toUnmodifiableEnumerations(builder.getEnumerations());
54         this.methodSignatures = toUnmodifiableMethods(builder.getMethodDefinitions());
55         this.enclosedTypes = toUnmodifiableEnclosedTypes(builder.getEnclosedTypes(),
56                 builder.getEnclosedTransferObjects());
57         this.properties = toUnmodifiableProperties(builder.getProperties());
58         this.isAbstract = builder.isAbstract();
59     }
60
61     public AbstractGeneratedType(final Type parent, final String packageName, final String name, final String comment,
62             final List<AnnotationTypeBuilder> annotationBuilders, final boolean isAbstract,
63             final List<Type> implementsTypes, final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
64             final List<GeneratedTOBuilder> enclosedGenTOBuilders, final List<EnumBuilder> enumBuilders,
65             final List<Constant> constants, final List<MethodSignatureBuilder> methodBuilders,
66             final List<GeneratedPropertyBuilder> propertyBuilders) {
67         super(packageName, name);
68         this.parent = parent;
69         this.comment = comment;
70         this.annotations = toUnmodifiableAnnotations(annotationBuilders);
71         this.implementsTypes = makeUnmodifiable(implementsTypes);
72         this.constants = makeUnmodifiable(constants);
73         this.enumerations = toUnmodifiableEnumerations(enumBuilders);
74         this.methodSignatures = toUnmodifiableMethods(methodBuilders);
75         this.enclosedTypes = toUnmodifiableEnclosedTypes(enclosedGenTypeBuilders, enclosedGenTOBuilders);
76         this.properties = toUnmodifiableProperties(propertyBuilders);
77         this.isAbstract = isAbstract;
78     }
79
80     protected static final <T> List<T> makeUnmodifiable(final List<T> list) {
81         switch (list.size()) {
82         case 0:
83             return Collections.emptyList();
84         case 1:
85             return Collections.singletonList(list.get(0));
86         default:
87             return Collections.unmodifiableList(list);
88         }
89     }
90
91     private static List<GeneratedType> toUnmodifiableEnclosedTypes(final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
92             final List<GeneratedTOBuilder> enclosedGenTOBuilders) {
93         final ArrayList<GeneratedType> enclosedTypesList = new ArrayList<>(enclosedGenTypeBuilders.size() + enclosedGenTOBuilders.size());
94         for (final GeneratedTypeBuilder builder : enclosedGenTypeBuilders) {
95             if (builder != null) {
96                 enclosedTypesList.add(builder.toInstance());
97             }
98         }
99
100         for (final GeneratedTOBuilder builder : enclosedGenTOBuilders) {
101             if (builder != null) {
102                 enclosedTypesList.add(builder.toInstance());
103             }
104         }
105
106         return makeUnmodifiable(enclosedTypesList);
107     }
108
109     protected static final List<AnnotationType> toUnmodifiableAnnotations(final List<AnnotationTypeBuilder> annotationBuilders) {
110         final List<AnnotationType> annotationList = new ArrayList<>(annotationBuilders.size());
111         for (final AnnotationTypeBuilder builder : annotationBuilders) {
112             annotationList.add(builder.toInstance());
113         }
114         return makeUnmodifiable(annotationList);
115     }
116
117     protected final List<MethodSignature> toUnmodifiableMethods(final List<MethodSignatureBuilder> methodBuilders) {
118         final List<MethodSignature> methods = new ArrayList<>(methodBuilders.size());
119         for (final MethodSignatureBuilder methodBuilder : methodBuilders) {
120             methods.add(methodBuilder.toInstance(this));
121         }
122         return makeUnmodifiable(methods);
123     }
124
125     protected final List<Enumeration> toUnmodifiableEnumerations(final List<EnumBuilder> enumBuilders) {
126         final List<Enumeration> enums = new ArrayList<>(enumBuilders.size());
127         for (final EnumBuilder enumBuilder : enumBuilders) {
128             enums.add(enumBuilder.toInstance(this));
129         }
130         return makeUnmodifiable(enums);
131     }
132
133     protected final List<GeneratedProperty> toUnmodifiableProperties(final List<GeneratedPropertyBuilder> methodBuilders) {
134         final List<GeneratedProperty> methods = new ArrayList<>(methodBuilders.size());
135         for (final GeneratedPropertyBuilder methodBuilder : methodBuilders) {
136             methods.add(methodBuilder.toInstance(this));
137         }
138         return makeUnmodifiable(methods);
139     }
140
141     @Override
142     public final Type getParentType() {
143         return parent;
144     }
145
146     @Override
147     public final String getComment() {
148         return comment;
149     }
150
151     @Override
152     public final List<AnnotationType> getAnnotations() {
153         return annotations;
154     }
155
156     @Override
157     public final boolean isAbstract() {
158         return isAbstract;
159     }
160
161     @Override
162     public final List<Type> getImplements() {
163         return implementsTypes;
164     }
165
166     @Override
167     public final List<GeneratedType> getEnclosedTypes() {
168         return enclosedTypes;
169     }
170
171     @Override
172     public final List<Enumeration> getEnumerations() {
173         return enumerations;
174     }
175
176     @Override
177     public final List<Constant> getConstantDefinitions() {
178         return constants;
179     }
180
181     @Override
182     public final List<MethodSignature> getMethodDefinitions() {
183         return methodSignatures;
184     }
185
186     @Override
187     public final List<GeneratedProperty> getProperties() {
188         return properties;
189     }
190
191     @Override
192     public String toString() {
193         StringBuilder builder = new StringBuilder();
194         builder.append("GeneratedType [packageName=");
195         builder.append(getPackageName());
196         builder.append(", name=");
197         builder.append(getName());
198         if (parent != null) {
199             builder.append(", parent=");
200             builder.append(parent.getFullyQualifiedName());
201         } else {
202             builder.append(", parent=null");
203         }
204         builder.append(", comment=");
205         builder.append(comment);
206         builder.append(", annotations=");
207         builder.append(annotations);
208         builder.append(", enclosedTypes=");
209         builder.append(enclosedTypes);
210         builder.append(", enumerations=");
211         builder.append(enumerations);
212         builder.append(", constants=");
213         builder.append(constants);
214         builder.append(", methodSignatures=");
215         builder.append(methodSignatures);
216         builder.append("]");
217         return builder.toString();
218     }
219 }