3f7ece81ca2b72be839026609d9a6b633d0d1e14
[yangtools.git] / code-generator / binding-generator-util / src / main / java / org / opendaylight / yangtools / binding / generator / util / generated / type / builder / GeneratedTOBuilderImpl.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.sal.binding.model.api.*;\r
11 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.*;\r
12 \r
13 import java.util.ArrayList;\r
14 import java.util.List;\r
15 \r
16 public final class GeneratedTOBuilderImpl extends AbstractGeneratedTypeBuilder implements GeneratedTOBuilder {\r
17 \r
18     private GeneratedTransferObject extendsType;\r
19     private final List<GeneratedPropertyBuilder> properties = new ArrayList<>();\r
20     private final List<GeneratedPropertyBuilder> equalsProperties = new ArrayList<>();\r
21     private final List<GeneratedPropertyBuilder> hashProperties = new ArrayList<>();\r
22     private final List<GeneratedPropertyBuilder> toStringProperties = new ArrayList<>();\r
23     private boolean isUnionType = false;\r
24 \r
25     public GeneratedTOBuilderImpl(String packageName, String name) {\r
26         super(packageName, name);\r
27         setAbstract(false);\r
28     }\r
29 \r
30     @Override\r
31     public void setExtendsType(final GeneratedTransferObject genTransObj) {\r
32         if (genTransObj == null) {\r
33             throw new IllegalArgumentException("Generated Transfer Object cannot be null!");\r
34         }\r
35         extendsType = genTransObj;\r
36     }\r
37 \r
38 \r
39 \r
40     /**\r
41      * Add new Method Signature definition for Generated Type Builder and\r
42      * returns Method Signature Builder for specifying all Method parameters. <br>\r
43      * Name of Method cannot be <code>null</code>, if it is <code>null</code>\r
44      * the method SHOULD throw {@link IllegalArgumentException} <br>\r
45      * By <i>Default</i> the MethodSignatureBuilder SHOULD be pre-set as\r
46      * {@link MethodSignatureBuilder#setAbstract(false)},\r
47      * {@link MethodSignatureBuilder#setFinal(false)} and\r
48      * {@link MethodSignatureBuilder#setAccessModifier(PUBLIC)}\r
49      * \r
50      * @param name\r
51      *            Name of Method\r
52      * @return <code>new</code> instance of Method Signature Builder.\r
53      */\r
54     @Override\r
55     public MethodSignatureBuilder addMethod(String name) {\r
56         final MethodSignatureBuilder builder = super.addMethod(name);\r
57         builder.setAbstract(false);\r
58         return builder;\r
59     }\r
60 \r
61     @Override\r
62     public boolean addEqualsIdentity(GeneratedPropertyBuilder property) {\r
63         return equalsProperties.add(property);\r
64     }\r
65 \r
66     @Override\r
67     public boolean addHashIdentity(GeneratedPropertyBuilder property) {\r
68         return hashProperties.add(property);\r
69     }\r
70 \r
71     @Override\r
72     public boolean addToStringProperty(GeneratedPropertyBuilder property) {\r
73         return toStringProperties.add(property);\r
74     }\r
75 \r
76     @Override\r
77     public GeneratedTransferObject toInstance() {\r
78         return new GeneratedTransferObjectImpl(this);\r
79     }\r
80 \r
81     @Override\r
82     public String toString() {\r
83         StringBuilder builder = new StringBuilder();\r
84         builder.append("GeneratedTransferObject [packageName=");\r
85         builder.append(getPackageName());\r
86         builder.append(", name=");\r
87         builder.append(getName());\r
88         builder.append(", comment=");\r
89         builder.append(getComment());\r
90         builder.append(", constants=");\r
91         builder.append(getConstants());\r
92         builder.append(", enumerations=");\r
93         builder.append(getEnumerations());\r
94         builder.append(", properties=");\r
95         builder.append(properties);\r
96         builder.append(", equalsProperties=");\r
97         builder.append(equalsProperties);\r
98         builder.append(", hashCodeProperties=");\r
99         builder.append(hashProperties);\r
100         builder.append(", stringProperties=");\r
101         builder.append(toStringProperties);\r
102         builder.append(", annotations=");\r
103         builder.append(getAnnotations());\r
104         builder.append(", methods=");\r
105         builder.append(getMethodDefinitions());\r
106         builder.append("]");\r
107         return builder.toString();\r
108     }\r
109 \r
110     @Override\r
111     public void setIsUnion(boolean isUnion) {\r
112         this.isUnionType = isUnion;\r
113     }\r
114 \r
115     private static final class GeneratedTransferObjectImpl extends AbstractGeneratedType implements\r
116             GeneratedTransferObject {\r
117 \r
118         private final List<GeneratedProperty> equalsProperties;\r
119         private final List<GeneratedProperty> hashCodeProperties;\r
120         private final List<GeneratedProperty> stringProperties;\r
121         private final GeneratedTransferObject extendsType;\r
122         private final boolean isUnionType;\r
123 \r
124         public GeneratedTransferObjectImpl(GeneratedTOBuilderImpl builder) {\r
125             super(builder);\r
126             this.extendsType = builder.extendsType;\r
127             this.equalsProperties = toUnmodifiableProperties(builder.equalsProperties);\r
128             this.hashCodeProperties = toUnmodifiableProperties(builder.hashProperties);\r
129             this.stringProperties = toUnmodifiableProperties(builder.toStringProperties);\r
130             this.isUnionType = builder.isUnionType;\r
131         }\r
132 \r
133         @Override\r
134         public boolean isUnionType() {\r
135             return isUnionType;\r
136         }\r
137         @Override\r
138         public GeneratedTransferObject getSuperType() {\r
139             return extendsType;\r
140         }\r
141 \r
142         @Override\r
143         public List<GeneratedProperty> getEqualsIdentifiers() {\r
144             return equalsProperties;\r
145         }\r
146 \r
147         @Override\r
148         public List<GeneratedProperty> getHashCodeIdentifiers() {\r
149             return hashCodeProperties;\r
150         }\r
151 \r
152         @Override\r
153         public List<GeneratedProperty> getToStringIdentifiers() {\r
154             return stringProperties;\r
155         }\r
156 \r
157         @Override\r
158         public String toString() {\r
159             StringBuilder builder = new StringBuilder();\r
160             builder.append("GeneratedTransferObject [packageName=");\r
161             builder.append(getPackageName());\r
162             builder.append(", name=");\r
163             builder.append(getName());\r
164             builder.append(", comment=");\r
165             builder.append(", annotations=");\r
166             builder.append(getAnnotations());\r
167             builder.append(getComment());\r
168             builder.append(", extends=");\r
169             builder.append(getSuperType());\r
170             builder.append(", implements=");\r
171             builder.append(getImplements());\r
172             builder.append(", enclosedTypes=");\r
173             builder.append(getEnclosedTypes());\r
174             builder.append(", constants=");\r
175             builder.append(getConstantDefinitions());\r
176             builder.append(", enumerations=");\r
177             builder.append(getEnumerations());\r
178             builder.append(", properties=");\r
179             builder.append(getProperties());\r
180             builder.append(", equalsProperties=");\r
181             builder.append(equalsProperties);\r
182             builder.append(", hashCodeProperties=");\r
183             builder.append(hashCodeProperties);\r
184             builder.append(", stringProperties=");\r
185             builder.append(stringProperties);\r
186             builder.append(", methods=");\r
187             builder.append(getMethodDefinitions());\r
188             builder.append("]");\r
189             return builder.toString();\r
190         }\r
191     }\r
192 }\r