Skip to content

Commit e4c7f23

Browse files
committed
Added Builder
1 parent 9c01c2e commit e4c7f23

File tree

1 file changed

+182
-0
lines changed

1 file changed

+182
-0
lines changed
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
package com.creational.builder;
2+
3+
import com.squareup.javapoet.*;
4+
import javax.lang.model.element.Modifier;
5+
6+
public class builder {
7+
8+
public static void main(String[] args) {
9+
10+
String input1 = "Builder";
11+
String input2 = "Director";
12+
String input3 = "Product";
13+
String input4 = "concreteBuilder";
14+
15+
String packageName = "com.CreationalDP.builder";
16+
17+
// Abstract Builder class declaration
18+
ClassName Builder = ClassName.get("",input1);
19+
20+
MethodSpec createProduct = MethodSpec.methodBuilder("createProduct")
21+
.addModifiers(Modifier.PUBLIC,Modifier.ABSTRACT)
22+
.returns(Builder)
23+
.build();
24+
25+
MethodSpec buildPart1 = MethodSpec.methodBuilder("buildPart1")
26+
.addModifiers(Modifier.PUBLIC,Modifier.ABSTRACT)
27+
.returns(Builder)
28+
.addParameter(String.class, "part")
29+
.build();
30+
31+
MethodSpec buildPart2 = MethodSpec.methodBuilder("buildPart2")
32+
.addModifiers(Modifier.PUBLIC,Modifier.ABSTRACT)
33+
.returns(Builder)
34+
.addParameter(String.class, "part")
35+
.build();
36+
37+
TypeSpec builder = TypeSpec.classBuilder(Builder)
38+
.addModifiers(Modifier.ABSTRACT)
39+
.addJavadoc("Builder, declares interface for creating parts of a Product object")
40+
// .addStaticBlock(CodeBlock.of("\n//Builder, declares interface for creating parts of a Product object"))
41+
.addMethod(createProduct)
42+
.addMethod(buildPart1)
43+
.addMethod(buildPart2)
44+
.build();
45+
46+
JavaFile javaFile1 = JavaFile.builder(packageName,builder)
47+
.addFileComment("Builder, declares interface for creating parts of a Product object")
48+
.skipJavaLangImports(true)
49+
.build();
50+
51+
// Director class declaration
52+
53+
ClassName Director = ClassName.get("",input2);
54+
55+
MethodSpec constructorDirector = MethodSpec.constructorBuilder()
56+
.addModifiers(Modifier.PUBLIC)
57+
.addParameter(Builder,"builder")
58+
.addStatement("this.builder = builder")
59+
.build();
60+
61+
MethodSpec construct = MethodSpec.methodBuilder("construct")
62+
.addModifiers(Modifier.PUBLIC)
63+
.returns(TypeName.VOID)
64+
.addStatement("builder.$N().$N($S).$N($S)",createProduct.name,buildPart1.name,"part1",buildPart2.name,"part2")
65+
.build();
66+
67+
TypeSpec director = TypeSpec.classBuilder(Director)
68+
.addModifiers(Modifier.PUBLIC)
69+
.addJavadoc("Director class, constructs an object using the Builder interface")
70+
.addField(Builder,"builder",Modifier.PRIVATE)
71+
.addMethod(constructorDirector)
72+
.addMethod(construct)
73+
.build();
74+
75+
JavaFile javaFile2 = JavaFile.builder(packageName,director)
76+
// .addFileComment("Builder, declares interface for creating parts of a Product object")
77+
.skipJavaLangImports(true)
78+
.build();
79+
80+
// Product class declaration
81+
82+
ClassName Product = ClassName.get("",input3);
83+
84+
MethodSpec set1 = MethodSpec.methodBuilder("setPart1")
85+
.addModifiers(Modifier.PUBLIC)
86+
.returns(TypeName.VOID)
87+
.addParameter(String.class,"part1")
88+
.addStatement("this.$N() = $N","part1","part1")
89+
.build();
90+
91+
MethodSpec set2 = MethodSpec.methodBuilder("setPart2")
92+
.addModifiers(Modifier.PUBLIC)
93+
.returns(TypeName.VOID)
94+
.addParameter(String.class,"part2")
95+
.addStatement("this.$N() = $N","part2","part2")
96+
.build();
97+
98+
MethodSpec get1 = MethodSpec.methodBuilder("getPart1")
99+
.addModifiers(Modifier.PUBLIC)
100+
.returns(String.class)
101+
.addStatement("return $N","part1")
102+
.build();
103+
104+
MethodSpec get2 = MethodSpec.methodBuilder("getPart2")
105+
.addModifiers(Modifier.PUBLIC)
106+
.returns(String.class)
107+
.addStatement("return $N","part2")
108+
.build();
109+
110+
TypeSpec product = TypeSpec.classBuilder(Product)
111+
.addModifiers(Modifier.PUBLIC)
112+
.addJavadoc("Product class, represents complex object")
113+
.addField(String.class, "part1", Modifier.PRIVATE)
114+
.addField(String.class, "part2", Modifier.PRIVATE)
115+
.addMethod(set1)
116+
.addMethod(set2)
117+
.addMethod(get1)
118+
.addMethod(get2)
119+
.build();
120+
121+
JavaFile javaFile3 = JavaFile.builder(packageName,product)
122+
// .addFileComment("Builder, declares interface for creating parts of a Product object")
123+
.skipJavaLangImports(true)
124+
.build();
125+
126+
// Concrete Builder class declaration
127+
128+
ClassName concreteBuilder = ClassName.get("",input4);
129+
130+
MethodSpec createproduct = MethodSpec.methodBuilder("createProduct")
131+
.addModifiers(Modifier.PUBLIC)
132+
.returns(Builder)
133+
.addStatement("this.product = new $T()",Product)
134+
.addStatement("return this")
135+
.build();
136+
137+
MethodSpec buildpart1 = MethodSpec.methodBuilder("buildPart1")
138+
.addModifiers(Modifier.PUBLIC)
139+
.returns(Builder)
140+
.addParameter(String.class,"part" )
141+
.addStatement("product.$N($N)",set1.name,"part")
142+
.addStatement("return this")
143+
.build();
144+
145+
MethodSpec buildpart2 = MethodSpec.methodBuilder("buildPart2")
146+
.addModifiers(Modifier.PUBLIC)
147+
.returns(Builder)
148+
.addParameter(String.class,"part" )
149+
.addStatement("product.$N($N)",set2.name,"part")
150+
.addStatement("return this")
151+
.build();
152+
153+
MethodSpec getresult = MethodSpec.methodBuilder("getResult")
154+
.addModifiers(Modifier.PUBLIC)
155+
.returns(Product)
156+
.addStatement("return product")
157+
.build();
158+
159+
TypeSpec concretebuilder = TypeSpec.classBuilder(concreteBuilder)
160+
.superclass(Builder)
161+
.addModifiers(Modifier.PUBLIC)
162+
.addJavadoc("""
163+
ConcreteBuilder class, constructs and assembles parts of the Product by
164+
implementing the Builder interface""")
165+
.addField(Product, "product", Modifier.PRIVATE)
166+
.addMethod(createproduct)
167+
.addMethod(buildpart1)
168+
.addMethod(buildpart2)
169+
.addMethod(getresult)
170+
.build();
171+
172+
JavaFile javaFile4 = JavaFile.builder(packageName,concretebuilder)
173+
// .addFileComment("Builder, declares interface for creating parts of a Product object")
174+
.skipJavaLangImports(true)
175+
.build();
176+
177+
System.out.println(javaFile1);
178+
System.out.println(javaFile2);
179+
System.out.println(javaFile3);
180+
System.out.println(javaFile4);
181+
}
182+
}

0 commit comments

Comments
 (0)