Updated binding model
[yangtools.git] / code-generator / binding-generator-util / src / main / java / org / opendaylight / yangtools / binding / generator / util / generated / type / builder / AbstractGeneratedType.java
1 /*\r
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 package org.opendaylight.yangtools.binding.generator.util.generated.type.builder;\r
9 \r
10 import org.opendaylight.yangtools.binding.generator.util.AbstractBaseType;\r
11 import org.opendaylight.yangtools.sal.binding.model.api.*;\r
12 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.*;\r
13 \r
14 import java.util.ArrayList;\r
15 import java.util.Collections;\r
16 import java.util.List;\r
17 \r
18 abstract class AbstractGeneratedType extends AbstractBaseType implements GeneratedType {\r
19 \r
20     private final Type parent;\r
21     private final String comment;\r
22     private final List<AnnotationType> annotations;\r
23     private final List<Type> implementsTypes;\r
24     private final List<Enumeration> enumerations;\r
25     private final List<Constant> constants;\r
26     private final List<MethodSignature> methodSignatures;\r
27     private final List<GeneratedType> enclosedTypes;\r
28     private final List<GeneratedProperty> properties;\r
29     private final boolean isAbstract;\r
30 \r
31     \r
32     public AbstractGeneratedType(AbstractGeneratedTypeBuilder builder) {\r
33         super(builder.getPackageName(),builder.getName());\r
34         this.parent = builder.getParent();\r
35         this.comment = builder.getComment();\r
36         this.annotations = toUnmodifiableAnnotations(builder.getAnnotations());\r
37         this.implementsTypes = Collections.unmodifiableList(builder.getImplementsTypes());\r
38         this.constants = Collections.unmodifiableList(builder.getConstants());\r
39         this.enumerations = toUnmodifiableEnumerations(builder.getEnumerations());\r
40         this.methodSignatures = toUnmodifiableMethods(builder.getMethodDefinitions());\r
41         this.enclosedTypes = toUnmodifiableEnclosedTypes(builder.getEnclosedTypes(), builder.getEnclosedTransferObjects());\r
42         this.properties = toUnmodifiableProperties(builder.getProperties());\r
43         this.isAbstract = builder.isAbstract();\r
44     }\r
45     \r
46     public AbstractGeneratedType(final Type parent, final String packageName, final String name, final String comment,\r
47             final List<AnnotationTypeBuilder> annotationBuilders, final boolean isAbstract,\r
48             final List<Type> implementsTypes, final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,\r
49             final List<GeneratedTOBuilder> enclosedGenTOBuilders, final List<EnumBuilder> enumBuilders,\r
50             final List<Constant> constants, final List<MethodSignatureBuilder> methodBuilders,final List<GeneratedPropertyBuilder> propertyBuilders) {\r
51         super(packageName, name);\r
52         this.parent = parent;\r
53         this.comment = comment;\r
54         this.annotations = toUnmodifiableAnnotations(annotationBuilders);\r
55         this.implementsTypes = Collections.unmodifiableList(implementsTypes);\r
56         this.constants = Collections.unmodifiableList(constants);\r
57         this.enumerations = toUnmodifiableEnumerations(enumBuilders);\r
58         this.methodSignatures = toUnmodifiableMethods(methodBuilders);\r
59         this.enclosedTypes = toUnmodifiableEnclosedTypes(enclosedGenTypeBuilders, enclosedGenTOBuilders);\r
60         this.properties = toUnmodifiableProperties(propertyBuilders);\r
61         this.isAbstract = isAbstract;\r
62         \r
63     }\r
64 \r
65     private List<GeneratedType> toUnmodifiableEnclosedTypes(final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,\r
66             final List<GeneratedTOBuilder> enclosedGenTOBuilders) {\r
67         final List<GeneratedType> enclosedTypes = new ArrayList<>();\r
68         for (final GeneratedTypeBuilder builder : enclosedGenTypeBuilders) {\r
69             if (builder != null) {\r
70                 enclosedTypes.add(builder.toInstance());\r
71             }\r
72         }\r
73 \r
74         for (final GeneratedTOBuilder builder : enclosedGenTOBuilders) {\r
75             if (builder != null) {\r
76                 enclosedTypes.add(builder.toInstance());\r
77             }\r
78         }\r
79         return enclosedTypes;\r
80     }\r
81 \r
82     protected final List<AnnotationType> toUnmodifiableAnnotations(final List<AnnotationTypeBuilder> annotationBuilders) {\r
83         final List<AnnotationType> annotations = new ArrayList<>();\r
84         for (final AnnotationTypeBuilder builder : annotationBuilders) {\r
85             annotations.add(builder.toInstance());\r
86         }\r
87         return Collections.unmodifiableList(annotations);\r
88     }\r
89 \r
90     protected final List<MethodSignature> toUnmodifiableMethods(List<MethodSignatureBuilder> methodBuilders) {\r
91         final List<MethodSignature> methods = new ArrayList<>();\r
92         for (final MethodSignatureBuilder methodBuilder : methodBuilders) {\r
93             methods.add(methodBuilder.toInstance(this));\r
94         }\r
95         return Collections.unmodifiableList(methods);\r
96     }\r
97 \r
98     protected final List<Enumeration> toUnmodifiableEnumerations(List<EnumBuilder> enumBuilders) {\r
99         final List<Enumeration> enums = new ArrayList<>();\r
100         for (final EnumBuilder enumBuilder : enumBuilders) {\r
101             enums.add(enumBuilder.toInstance(this));\r
102         }\r
103         return Collections.unmodifiableList(enums);\r
104     }\r
105 \r
106     protected final List<GeneratedProperty> toUnmodifiableProperties(List<GeneratedPropertyBuilder> methodBuilders) {\r
107         final List<GeneratedProperty> methods = new ArrayList<>();\r
108         for (final GeneratedPropertyBuilder methodBuilder : methodBuilders) {\r
109             methods.add(methodBuilder.toInstance(this));\r
110         }\r
111         return Collections.unmodifiableList(methods);\r
112     }\r
113     \r
114     \r
115     @Override\r
116     public final Type getParentType() {\r
117         return parent;\r
118     }\r
119 \r
120     @Override\r
121     public final String getComment() {\r
122         return comment;\r
123     }\r
124 \r
125     @Override\r
126     public final List<AnnotationType> getAnnotations() {\r
127         return annotations;\r
128     }\r
129 \r
130     @Override\r
131     public final boolean isAbstract() {\r
132         return isAbstract;\r
133     }\r
134 \r
135     @Override\r
136     public final List<Type> getImplements() {\r
137         return implementsTypes;\r
138     }\r
139 \r
140     @Override\r
141     public final List<GeneratedType> getEnclosedTypes() {\r
142         return enclosedTypes;\r
143     }\r
144 \r
145     @Override\r
146     public final List<Enumeration> getEnumerations() {\r
147         return enumerations;\r
148     }\r
149 \r
150     @Override\r
151     public final List<Constant> getConstantDefinitions() {\r
152         return constants;\r
153     }\r
154 \r
155     @Override\r
156     public final List<MethodSignature> getMethodDefinitions() {\r
157         return methodSignatures;\r
158     }\r
159     \r
160     public final List<GeneratedProperty> getProperties() {\r
161         return properties;\r
162     }\r
163     \r
164     \r
165 \r
166     @Override\r
167     public String toString() {\r
168         StringBuilder builder = new StringBuilder();\r
169         builder.append("GeneratedType [packageName=");\r
170         builder.append(getPackageName());\r
171         builder.append(", name=");\r
172         builder.append(getName());\r
173         if (parent != null) {\r
174             builder.append(", parent=");\r
175             builder.append(parent.getFullyQualifiedName());\r
176         } else {\r
177             builder.append(", parent=null");\r
178         }\r
179         builder.append(", comment=");\r
180         builder.append(comment);\r
181         builder.append(", annotations=");\r
182         builder.append(annotations);\r
183         builder.append(", enclosedTypes=");\r
184         builder.append(enclosedTypes);\r
185         builder.append(", enumerations=");\r
186         builder.append(enumerations);\r
187         builder.append(", constants=");\r
188         builder.append(constants);\r
189         builder.append(", methodSignatures=");\r
190         builder.append(methodSignatures);\r
191         builder.append("]");\r
192         return builder.toString();\r
193     }\r
194 }\r