Added NotificationListener interfaces
[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<T extends GeneratedTypeBuilderBase<T>> extends AbstractBaseType implements GeneratedTypeBuilderBase<T> {\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> enclosedTransferObjects = 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 enclosedTransferObjects;\r
71     }\r
72 \r
73     abstract protected T thisInstance();\r
74     \r
75     @Override\r
76     public GeneratedTOBuilder addEnclosingTransferObject(String name) {\r
77         if (name == null) {\r
78             throw new IllegalArgumentException("Name for Enclosing Generated Transfer Object cannot be null!");\r
79         }\r
80         GeneratedTOBuilder builder = new GeneratedTOBuilderImpl(getFullyQualifiedName(), name);\r
81         enclosedTransferObjects.add(builder);\r
82         return builder;\r
83     }\r
84 \r
85     @Override\r
86     public T addEnclosingTransferObject(final GeneratedTOBuilder genTOBuilder) {\r
87         if (genTOBuilder == null) {\r
88             throw new IllegalArgumentException("Parameter genTOBuilder cannot be null!");\r
89         }\r
90         enclosedTransferObjects.add(genTOBuilder);\r
91         return thisInstance();\r
92     }\r
93 \r
94     @Override\r
95     public T addComment(String comment) {\r
96         this.comment = comment;\r
97         return thisInstance();\r
98     }\r
99 \r
100     @Override\r
101     public AnnotationTypeBuilder addAnnotation(final String packageName, final String name) {\r
102         if (packageName == null) {\r
103             throw new IllegalArgumentException("Package Name for Annotation Type cannot be null!");\r
104         }\r
105         if (name == null) {\r
106             throw new IllegalArgumentException("Name of Annotation Type cannot be null!");\r
107         }\r
108 \r
109         final AnnotationTypeBuilder builder = new AnnotationTypeBuilderImpl(packageName, name);\r
110         annotationBuilders.add(builder);\r
111         return builder;\r
112     }\r
113 \r
114     @Override\r
115     public T setAbstract(boolean isAbstract) {\r
116         this.isAbstract = isAbstract;\r
117         return thisInstance();\r
118     }\r
119 \r
120     @Override\r
121     public T addImplementsType(Type genType) {\r
122         if (genType == null) {\r
123             throw new IllegalArgumentException("Type cannot be null");\r
124         }\r
125         implementsTypes.add(genType);\r
126         return thisInstance();\r
127     }\r
128 \r
129     @Override\r
130     public Constant addConstant(Type type, String name, Object value) {\r
131         if (type == null) {\r
132             throw new IllegalArgumentException("Returning Type for Constant cannot be null!");\r
133         }\r
134         if (name == null) {\r
135             throw new IllegalArgumentException("Name of constant cannot be null!");\r
136         }\r
137 \r
138         final Constant constant = new ConstantImpl(this, type, name, value);\r
139         constants.add(constant);\r
140         return constant;\r
141     }\r
142 \r
143     @Override\r
144     public EnumBuilder addEnumeration(String name) {\r
145         if (name == null) {\r
146             throw new IllegalArgumentException("Name of enumeration cannot be null!");\r
147         }\r
148         final EnumBuilder builder = new EnumerationBuilderImpl(getFullyQualifiedName(), name);\r
149         enumDefinitions.add(builder);\r
150         return builder;\r
151     }\r
152 \r
153     @Override\r
154     public MethodSignatureBuilder addMethod(String name) {\r
155         if (name == null) {\r
156             throw new IllegalArgumentException("Name of method cannot be null!");\r
157         }\r
158         final MethodSignatureBuilder builder = new MethodSignatureBuilderImpl(name);\r
159         builder.setAccessModifier(AccessModifier.PUBLIC);\r
160         builder.setAbstract(true);\r
161         methodDefinitions.add(builder);\r
162         return builder;\r
163     }\r
164 \r
165     @Override\r
166     public boolean containsMethod(String name) {\r
167         if (name == null) {\r
168             throw new IllegalArgumentException("Parameter name can't be null");\r
169         }\r
170         for (MethodSignatureBuilder methodDefinition : methodDefinitions) {\r
171             if (name.equals(methodDefinition.getName())) {\r
172                 return true;\r
173             }\r
174         }\r
175         return false;\r
176     }\r
177     \r
178     @Override\r
179     public GeneratedPropertyBuilder addProperty(String name) {\r
180         final GeneratedPropertyBuilder builder = new GeneratedPropertyBuilderImpl(name);\r
181         builder.setAccessModifier(AccessModifier.PUBLIC);\r
182         properties.add(builder);\r
183         return builder;\r
184     }\r
185 \r
186     @Override\r
187     public boolean containsProperty(String name) {\r
188         if (name == null) {\r
189             throw new IllegalArgumentException("Parameter name can't be null");\r
190         }\r
191         for (GeneratedPropertyBuilder property : properties) {\r
192             if (name.equals(property.getName())) {\r
193                 return true;\r
194             }\r
195         }\r
196         return false;\r
197     }\r
198 \r
199     @Override\r
200     public int hashCode() {\r
201         final int prime = 31;\r
202         int result = 1;\r
203         result = prime * result + ((getName() == null) ? 0 : getName().hashCode());\r
204         result = prime * result + ((getPackageName() == null) ? 0 : getPackageName().hashCode());\r
205         return result;\r
206     }\r
207 \r
208     @Override\r
209     public boolean equals(Object obj) {\r
210         if (this == obj) {\r
211             return true;\r
212         }\r
213         if (obj == null) {\r
214             return false;\r
215         }\r
216         if (getClass() != obj.getClass()) {\r
217             return false;\r
218         }\r
219         AbstractGeneratedTypeBuilder<T> other = (AbstractGeneratedTypeBuilder<T>) obj;\r
220         if (getName() == null) {\r
221             if (other.getName() != null) {\r
222                 return false;\r
223             }\r
224         } else if (!getName().equals(other.getName())) {\r
225             return false;\r
226         }\r
227         if (getPackageName() == null) {\r
228             if (other.getPackageName() != null) {\r
229                 return false;\r
230             }\r
231         } else if (!getPackageName().equals(other.getPackageName())) {\r
232             return false;\r
233         }\r
234         return true;\r
235     }\r
236 \r
237     public Type getParent() {\r
238         return null;\r
239     }\r
240 \r
241     protected List<GeneratedPropertyBuilder> getProperties() {\r
242         return properties;\r
243     }\r
244 }\r