Skip to content

Commit 991c2eb

Browse files
Amends (again) the Generic solution to PATCH HTPP requests.
1 parent 9400206 commit 991c2eb

File tree

1 file changed

+28
-4
lines changed
  • src/main/java/dev/drugowick/algaworks/algafoodapi/api/controller/utils

1 file changed

+28
-4
lines changed

src/main/java/dev/drugowick/algaworks/algafoodapi/api/controller/utils/ObjectMerger.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.springframework.util.ReflectionUtils;
55

66
import java.lang.reflect.Field;
7+
import java.util.HashMap;
78
import java.util.Map;
89

910
/**
@@ -15,22 +16,44 @@
1516
*/
1617
public class ObjectMerger<T> {
1718

18-
private ObjectMapper objectMapper;
19+
/**
20+
* Determines if a Map cache will be used for ObjectMergers.
21+
*/
22+
private static boolean cacheEnabled = true;
23+
private static Map<Object, ObjectMerger> objectMergerCache = new HashMap<>();
24+
25+
private static ObjectMapper objectMapper;
1926
private Class<T> type;
2027

28+
2129
private ObjectMerger(Class<T> type) {
22-
this.objectMapper = new ObjectMapper();
30+
objectMapper = new ObjectMapper();
2331
this.type = type;
2432
}
2533

2634
/**
27-
* Returns a new instance of ObjectMerger<T> of the given type as parameter.
35+
* Returns a new instance of ObjectMerger<T> of the given type as parameter OR
36+
* an existing instance created before.
2837
*
2938
* @param type a class to be merged with a Map of <String, Object>.
3039
* @return
3140
*/
3241
public static ObjectMerger of(Class type) {
33-
return new ObjectMerger(type);
42+
43+
if (!cacheEnabled) {
44+
// Cache is not enabled. A new instance is always created.
45+
return new ObjectMerger(type);
46+
}
47+
48+
if (!objectMergerCache.containsKey(type)) {
49+
ObjectMerger objectMerger = new ObjectMerger(type);
50+
objectMergerCache.put(type, objectMerger);
51+
// Cache enabled. Instance created (first request).
52+
return objectMerger;
53+
}
54+
55+
// Cache enabled. Returning existing instance.
56+
return objectMergerCache.get(type);
3457
}
3558

3659
/**
@@ -52,4 +75,5 @@ public void mergeRequestBodyToGenericObject(Map<String, Object> objectMap, T obj
5275
ReflectionUtils.setField(field, objectToUpdate, newValue);
5376
});
5477
}
78+
5579
}

0 commit comments

Comments
 (0)