1eb60fc5db3635999e951a4cba3ea6e46deb228d
[yangtools.git] / code-generator / binding-generator-util / src / main / java / org / opendaylight / yangtools / binding / generator / util / generated / type / builder / AbstractGeneratedTypeBuilder.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.AccessModifier;\r
12 import org.opendaylight.yangtools.sal.binding.model.api.Constant;\r
13 import org.opendaylight.yangtools.sal.binding.model.api.Type;\r
14 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.*;\r
15 \r
16 import java.util.ArrayList;\r
17 import java.util.List;\r
18 \r
19 abstract class AbstractGeneratedTypeBuilder extends AbstractBaseType implements GeneratedTypeBuilder {\r
20 \r
21     private String comment = "";\r
22 \r
23     private final List<AnnotationTypeBuilder> annotationBuilders = new ArrayList<>();\r
24     private final List<Type> implementsTypes = new ArrayList<>();\r
25     private final List<EnumBuilder> enumDefinitions = new ArrayList<>();\r
26     private final List<Constant> constants = new ArrayList<>();\r
27     private final List<MethodSignatureBuilder> methodDefinitions = new ArrayList<>();\r
28     private final List<GeneratedTypeBuilder> enclosedTypes = new ArrayList<>();\r
29     private final List<GeneratedTOBuilder> enclosingTransferObjects = new ArrayList<>();\r
30     private final List<GeneratedPropertyBuilder> properties = new ArrayList<>();\r
31     private boolean isAbstract;\r
32 \r
33     public AbstractGeneratedTypeBuilder(final String packageName, final String name) {\r
34         super(packageName, name);\r
35     }\r
36 \r
37     protected String getComment() {\r
38         return comment;\r
39     }\r
40 \r
41     protected List<AnnotationTypeBuilder> getAnnotations() {\r
42         return annotationBuilders;\r
43     }\r
44 \r
45     protected boolean isAbstract() {\r
46         return isAbstract;\r
47     }\r
48 \r
49     protected List<Type> getImplementsTypes() {\r
50         return implementsTypes;\r
51     }\r
52 \r
53     protected List<EnumBuilder> getEnumerations() {\r
54         return enumDefinitions;\r
55     }\r
56 \r
57     protected List<Constant> getConstants() {\r
58         return constants;\r
59     }\r
60 \r
61     protected List<MethodSignatureBuilder> getMethodDefinitions() {\r
62         return methodDefinitions;\r
63     }\r
64 \r
65     protected List<GeneratedTypeBuilder> getEnclosedTypes() {\r
66         return enclosedTypes;\r
67     }\r
68 \r
69     protected List<GeneratedTOBuilder> getEnclosedTransferObjects() {\r
70         return enclosingTransferObjects;\r
71     }\r
72 \r
73     @Override\r
74     public GeneratedTypeBuilder addEnclosingType(String name) {\r
75         if (name == null) {\r
76             throw new IllegalArgumentException("Name for Enclosing Generated Type cannot be null!");\r
77         }\r
78         GeneratedTypeBuilder builder = new GeneratedTOBuilderImpl(getFullyQualifiedName(), name);\r
79         enclosedTypes.add(builder);\r
80         return builder;\r
81     }\r
82 \r
83     @Override\r
84     public GeneratedTOBuilder addEnclosingTransferObject(String name) {\r
85         if (name == null) {\r
86             throw new IllegalArgumentException("Name for Enclosing Generated Transfer Object cannot be null!");\r
87         }\r
88         GeneratedTOBuilder builder = new GeneratedTOBuilderImpl(getFullyQualifiedName(), name);\r
89         enclosingTransferObjects.add(builder);\r
90         return builder;\r
91     }\r
92 \r
93     @Override\r
94     public void addEnclosingTransferObject(final GeneratedTOBuilder genTOBuilder) {\r
95         if (genTOBuilder == null) {\r
96             throw new IllegalArgumentException("Parameter genTOBuilder cannot be null!");\r
97         }\r
98         enclosingTransferObjects.add(genTOBuilder);\r
99     }\r
100 \r
101     @Override\r
102     public void addComment(String comment) {\r
103         this.comment = comment;\r
104     }\r
105 \r
106     @Override\r
107     public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {\r
108         if (packageName == null) {\r
109             throw new IllegalArgumentException("Package Name for Annotation Type cannot be null!");\r
110         }\r
111         if (name == null) {\r
112             throw new IllegalArgumentException("Name of Annotation Type cannot be null!");\r
113         }\r
114 \r
115         final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);\r
116         annotationBuilders.add(builder);\r
117         return builder;\r
118     }\r
119 \r
120     @Override\r
121     public void setAbstract(boolean isAbstract) {\r
122         this.isAbstract = isAbstract;\r
123     }\r
124 \r
125     @Override\r
126     public boolean addImplementsType(Type genType) {\r
127         if (genType == null) {\r
128             throw new IllegalArgumentException("Type cannot be null");\r
129         }\r
130         return implementsTypes.add(genType);\r
131     }\r
132 \r
133     @Override\r
134     public Constant addConstant(Type type, String name, Object value) {\r
135         if (type == null) {\r
136             throw new IllegalArgumentException("Returning Type for Constant cannot be null!");\r
137         }\r
138         if (name == null) {\r
139             throw new IllegalArgumentException("Name of constant cannot be null!");\r
140         }\r
141 \r
142         final Constant constant = new ConstantImpl(this, type, name, value);\r
143         constants.add(constant);\r
144         return constant;\r
145     }\r
146 \r
147     @Override\r
148     public EnumBuilder addEnumeration(String name) {\r
149         if (name == null) {\r
150             throw new IllegalArgumentException("Name of enumeration cannot be null!");\r
151         }\r
152         final EnumBuilder builder = new EnumerationBuilderImpl(getFullyQualifiedName(), name);\r
153         enumDefinitions.add(builder);\r
154         return builder;\r
155     }\r
156 \r
157     @Override\r
158     public MethodSignatureBuilder addMethod(String name) {\r
159         if (name == null) {\r
160             throw new IllegalArgumentException("Name of method cannot be null!");\r
161         }\r
162         final MethodSignatureBuilder builder = new MethodSignatureBuilderImpl(name);\r
163         builder.setAccessModifier(AccessModifier.PUBLIC);\r
164         builder.setAbstract(true);\r
165         methodDefinitions.add(builder);\r
166         return builder;\r
167     }\r
168 \r
169     @Override\r
170     public boolean containsMethod(String name) {\r
171         if (name == null) {\r
172             throw new IllegalArgumentException("Parameter name can't be null");\r
173         }\r
174         for (MethodSignatureBuilder methodDefinition : methodDefinitions) {\r
175             if (name.equals(methodDefinition.getName())) {\r
176                 return true;\r
177             }\r
178         }\r
179         return false;\r
180     }\r
181     \r
182     @Override\r
183     public GeneratedPropertyBuilder addProperty(String name) {\r
184         final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(name);\r
185         builder.setAccessModifier(AccessModifier.PUBLIC);\r
186         properties.add(builder);\r
187         return builder;\r
188     }\r
189 \r
190     @Override\r
191     public boolean containsProperty(String name) {\r
192         if (name == null) {\r
193             throw new IllegalArgumentException("Parameter name can't be null");\r
194         }\r
195         for (GeneratedPropertyBuilder property : properties) {\r
196             if (name.equals(property.getName())) {\r
197                 return true;\r
198             }\r
199         }\r
200         return false;\r
201     }\r
202 \r
203     @Override\r
204     public int hashCode() {\r
205         final int prime = 31;\r
206         int result = 1;\r
207         result = prime * result + ((getName() == null) ? 0 : getName().hashCode());\r
208         result = prime * result + ((getPackageName() == null) ? 0 : getPackageName().hashCode());\r
209         return result;\r
210     }\r
211 \r
212     @Override\r
213     public boolean equals(Object obj) {\r
214         if (this == obj) {\r
215             return true;\r
216         }\r
217         if (obj == null) {\r
218             return false;\r
219         }\r
220         if (getClass() != obj.getClass()) {\r
221             return false;\r
222         }\r
223         AbstractGeneratedTypeBuilder other = (AbstractGeneratedTypeBuilder) obj;\r
224         if (getName() == null) {\r
225             if (other.getName() != null) {\r
226                 return false;\r
227             }\r
228         } else if (!getName().equals(other.getName())) {\r
229             return false;\r
230         }\r
231         if (getPackageName() == null) {\r
232             if (other.getPackageName() != null) {\r
233                 return false;\r
234             }\r
235         } else if (!getPackageName().equals(other.getPackageName())) {\r
236             return false;\r
237         }\r
238         return true;\r
239     }\r
240 \r
241     public Type getParent() {\r
242         return null;\r
243     }\r
244 \r
245     protected List<GeneratedPropertyBuilder> getProperties() {\r
246         return properties;\r
247     }\r
248 }\r