Skip to content

Commit a08196e

Browse files
committed
Refactor MapperGenerator convenience methods for better maintainability
Split the large addConvenienceMethods method into focused, single-responsibility methods: - buildFromDynamoDbItemMethod() - buildFromDynamoDbItemsMethod() - buildToDynamoDbItemMethod() - buildToDynamoDbItemsMethod() This improves code organization, readability, and testability by following the Single Responsibility Principle.
1 parent 813afa8 commit a08196e

File tree

1 file changed

+29
-13
lines changed

1 file changed

+29
-13
lines changed

src/main/java/com/github/wassertim/dynamodb/toolkit/generation/MapperGenerator.java

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,18 @@ private MethodSpec buildFromAttributeValueMethod(TypeInfo typeInfo) {
171171
}
172172

173173
private void addConvenienceMethods(TypeSpec.Builder classBuilder, TypeInfo typeInfo) {
174+
classBuilder.addMethod(buildFromDynamoDbItemMethod(typeInfo));
175+
classBuilder.addMethod(buildFromDynamoDbItemsMethod(typeInfo));
176+
classBuilder.addMethod(buildToDynamoDbItemMethod(typeInfo));
177+
classBuilder.addMethod(buildToDynamoDbItemsMethod(typeInfo));
178+
}
179+
180+
private MethodSpec buildFromDynamoDbItemMethod(TypeInfo typeInfo) {
174181
String className = typeInfo.getClassName();
175182
ClassName attributeValue = ClassName.get(AttributeValue.class);
176183
ClassName domainClass = ClassName.bestGuess(typeInfo.getFullyQualifiedClassName());
177184

178-
// fromDynamoDbItem method
179-
MethodSpec fromDynamoDbItem = MethodSpec.methodBuilder("fromDynamoDbItem")
185+
return MethodSpec.methodBuilder("fromDynamoDbItem")
180186
.addModifiers(Modifier.PUBLIC)
181187
.returns(ParameterizedTypeName.get(ClassName.get("java.util", "Optional"), domainClass))
182188
.addParameter(ParameterizedTypeName.get(
@@ -195,9 +201,14 @@ private void addConvenienceMethods(TypeSpec.Builder classBuilder, TypeInfo typeI
195201
domainClass, attributeValue)
196202
.addStatement("return $T.ofNullable(result)", ClassName.get("java.util", "Optional"))
197203
.build();
204+
}
198205

199-
// fromDynamoDbItems method
200-
MethodSpec fromDynamoDbItems = MethodSpec.methodBuilder("fromDynamoDbItems")
206+
private MethodSpec buildFromDynamoDbItemsMethod(TypeInfo typeInfo) {
207+
String className = typeInfo.getClassName();
208+
ClassName attributeValue = ClassName.get(AttributeValue.class);
209+
ClassName domainClass = ClassName.bestGuess(typeInfo.getFullyQualifiedClassName());
210+
211+
return MethodSpec.methodBuilder("fromDynamoDbItems")
201212
.addModifiers(Modifier.PUBLIC)
202213
.returns(ParameterizedTypeName.get(ClassName.get(List.class), domainClass))
203214
.addParameter(ParameterizedTypeName.get(
@@ -221,9 +232,14 @@ private void addConvenienceMethods(TypeSpec.Builder classBuilder, TypeInfo typeI
221232
".collect($T.toList())$<$<$<$<",
222233
attributeValue, ClassName.get(Objects.class), ClassName.get(Collectors.class))
223234
.build();
235+
}
236+
237+
private MethodSpec buildToDynamoDbItemMethod(TypeInfo typeInfo) {
238+
String className = typeInfo.getClassName();
239+
ClassName attributeValue = ClassName.get(AttributeValue.class);
240+
ClassName domainClass = ClassName.bestGuess(typeInfo.getFullyQualifiedClassName());
224241

225-
// toDynamoDbItem method
226-
MethodSpec toDynamoDbItem = MethodSpec.methodBuilder("toDynamoDbItem")
242+
return MethodSpec.methodBuilder("toDynamoDbItem")
227243
.addModifiers(Modifier.PUBLIC)
228244
.returns(ParameterizedTypeName.get(
229245
ClassName.get(Map.class),
@@ -241,9 +257,14 @@ private void addConvenienceMethods(TypeSpec.Builder classBuilder, TypeInfo typeI
241257
.addStatement("$T av = toDynamoDbAttributeValue(object)", attributeValue)
242258
.addStatement("return av != null ? av.m() : null")
243259
.build();
260+
}
244261

245-
// toDynamoDbItems method
246-
MethodSpec toDynamoDbItems = MethodSpec.methodBuilder("toDynamoDbItems")
262+
private MethodSpec buildToDynamoDbItemsMethod(TypeInfo typeInfo) {
263+
String className = typeInfo.getClassName();
264+
ClassName attributeValue = ClassName.get(AttributeValue.class);
265+
ClassName domainClass = ClassName.bestGuess(typeInfo.getFullyQualifiedClassName());
266+
267+
return MethodSpec.methodBuilder("toDynamoDbItems")
247268
.addModifiers(Modifier.PUBLIC)
248269
.returns(ParameterizedTypeName.get(
249270
ClassName.get(List.class),
@@ -268,11 +289,6 @@ private void addConvenienceMethods(TypeSpec.Builder classBuilder, TypeInfo typeI
268289
".collect($T.toList())$<$<$<$<$<",
269290
ClassName.get(Objects.class), ClassName.get(Collectors.class))
270291
.build();
271-
272-
classBuilder.addMethod(fromDynamoDbItem);
273-
classBuilder.addMethod(fromDynamoDbItems);
274-
classBuilder.addMethod(toDynamoDbItem);
275-
classBuilder.addMethod(toDynamoDbItems);
276292
}
277293

278294
@Override

0 commit comments

Comments
 (0)