Added following mapping:
[controller.git] / opendaylight / sal / yang-prototype / code-generator / binding-generator-util / src / main / java / org / opendaylight / controller / 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.controller.binding.generator.util.generated.type.builder;
9
10 import org.opendaylight.controller.binding.generator.util.AbstractBaseType;
11 import org.opendaylight.controller.sal.binding.model.api.*;
12 import org.opendaylight.controller.sal.binding.model.api.type.builder.*;
13
14 import java.util.ArrayList;
15 import java.util.Collections;
16 import java.util.List;
17
18 abstract class AbstractGeneratedType extends AbstractBaseType implements GeneratedType {
19
20     private final Type parent;
21     private final String comment;
22     private final List<AnnotationType> annotations;
23     private final List<Type> implementsTypes;
24     private final List<Enumeration> enumerations;
25     private final List<Constant> constants;
26     private final List<MethodSignature> methodSignatures;
27     private final List<GeneratedType> enclosedTypes;
28     private final boolean isAbstract;
29
30     public AbstractGeneratedType(final Type parent, final String packageName, final String name, final String comment,
31             final List<AnnotationTypeBuilder> annotationBuilders, final boolean isAbstract,
32             final List<Type> implementsTypes, final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
33             final List<GeneratedTOBuilder> enclosedGenTOBuilders, final List<EnumBuilder> enumBuilders,
34             final List<Constant> constants, final List<MethodSignatureBuilder> methodBuilders) {
35         super(packageName, name);
36         this.parent = parent;
37         this.comment = comment;
38         this.annotations = toUnmodifiableAnnotations(annotationBuilders);
39         this.implementsTypes = Collections.unmodifiableList(implementsTypes);
40         this.constants = Collections.unmodifiableList(constants);
41         this.enumerations = toUnmodifiableEnumerations(enumBuilders);
42         this.methodSignatures = toUnmodifiableMethods(methodBuilders);
43         this.enclosedTypes = toUnmodifiableEnclosedTypes(enclosedGenTypeBuilders, enclosedGenTOBuilders);
44         this.isAbstract = isAbstract;
45     }
46
47     private List<GeneratedType> toUnmodifiableEnclosedTypes(final List<GeneratedTypeBuilder> enclosedGenTypeBuilders,
48             final List<GeneratedTOBuilder> enclosedGenTOBuilders) {
49         final List<GeneratedType> enclosedTypes = new ArrayList<>();
50         for (final GeneratedTypeBuilder builder : enclosedGenTypeBuilders) {
51             if (builder != null) {
52                 enclosedTypes.add(builder.toInstance());
53             }
54         }
55
56         for (final GeneratedTOBuilder builder : enclosedGenTOBuilders) {
57             if (builder != null) {
58                 enclosedTypes.add(builder.toInstance());
59             }
60         }
61         return enclosedTypes;
62     }
63
64     protected List<AnnotationType> toUnmodifiableAnnotations(final List<AnnotationTypeBuilder> annotationBuilders) {
65         final List<AnnotationType> annotations = new ArrayList<>();
66         for (final AnnotationTypeBuilder builder : annotationBuilders) {
67             annotations.add(builder.toInstance());
68         }
69         return Collections.unmodifiableList(annotations);
70     }
71
72     protected List<MethodSignature> toUnmodifiableMethods(List<MethodSignatureBuilder> methodBuilders) {
73         final List<MethodSignature> methods = new ArrayList<>();
74         for (final MethodSignatureBuilder methodBuilder : methodBuilders) {
75             methods.add(methodBuilder.toInstance(this));
76         }
77         return Collections.unmodifiableList(methods);
78     }
79
80     protected List<Enumeration> toUnmodifiableEnumerations(List<EnumBuilder> enumBuilders) {
81         final List<Enumeration> enums = new ArrayList<>();
82         for (final EnumBuilder enumBuilder : enumBuilders) {
83             enums.add(enumBuilder.toInstance(this));
84         }
85         return Collections.unmodifiableList(enums);
86     }
87
88     @Override
89     public Type getParentType() {
90         return parent;
91     }
92
93     @Override
94     public String getComment() {
95         return comment;
96     }
97
98     @Override
99     public List<AnnotationType> getAnnotations() {
100         return annotations;
101     }
102
103     @Override
104     public boolean isAbstract() {
105         return isAbstract;
106     }
107
108     @Override
109     public List<Type> getImplements() {
110         return implementsTypes;
111     }
112
113     @Override
114     public List<GeneratedType> getEnclosedTypes() {
115         return enclosedTypes;
116     }
117
118     @Override
119     public List<Enumeration> getEnumerations() {
120         return enumerations;
121     }
122
123     @Override
124     public List<Constant> getConstantDefinitions() {
125         return constants;
126     }
127
128     @Override
129     public List<MethodSignature> getMethodDefinitions() {
130         return methodSignatures;
131     }
132
133     @Override
134     public String toString() {
135         StringBuilder builder = new StringBuilder();
136         builder.append("GeneratedType [packageName=");
137         builder.append(getPackageName());
138         builder.append(", name=");
139         builder.append(getName());
140         if (parent != null) {
141             builder.append(", parent=");
142             builder.append(parent.getFullyQualifiedName());
143         } else {
144             builder.append(", parent=null");
145         }
146         builder.append(", comment=");
147         builder.append(comment);
148         builder.append(", annotations=");
149         builder.append(annotations);
150         builder.append(", enclosedTypes=");
151         builder.append(enclosedTypes);
152         builder.append(", enumerations=");
153         builder.append(enumerations);
154         builder.append(", constants=");
155         builder.append(constants);
156         builder.append(", methodSignatures=");
157         builder.append(methodSignatures);
158         builder.append("]");
159         return builder.toString();
160     }
161 }