Skip to content

Commit

Permalink
Additional improvements to default mapper
Browse files Browse the repository at this point in the history
  • Loading branch information
Idane committed Jun 6, 2021
1 parent a9958f8 commit d0defc8
Showing 1 changed file with 29 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ public class FieldMapper {

private Map<Pair<Class<?>, Class<?>>, FieldTransformer> defaultTransformers = new HashMap();

private Map<Pair<Class<?>, Class<?>>, FieldTransformer> defaultTransformersCache = new HashMap();

private static Map<Pair<Class<?>, Class<?>>, EntityStructureDTO> entityStructures = new HashMap<>();

private static Map<Class<?>, Map<String, Field>> entityFieldMaps = new HashMap<>();
Expand Down Expand Up @@ -197,9 +199,16 @@ private FieldTransformer getTransformer(MappedField annotation, ObjectFieldPair
log.trace("Checking transformer field");
if(annotation.transformer() == DefaultTransformer.class) {
log.trace("Transformer is DefaultTransformer, attempting to find a default transformer");
Pair key = new Pair(fromPair.getField().getType(), toPair.getField().getType());
Pair<Class<?>, Class<?>> key = new Pair(fromPair.getField().getType(), toPair.getField().getType());

FieldTransformer defaultTransformer;
if(!defaultTransformersCache.containsKey(key)) {
defaultTransformer = getDefaultTransformer(key);
defaultTransformersCache.put(key, defaultTransformer);
} else {
defaultTransformer = defaultTransformersCache.get(key);
}

FieldTransformer defaultTransformer = defaultTransformers.get(key);
if(defaultTransformer != null) {
log.trace("Found a default transformer of type [ " + defaultTransformer.getClass().getName() + " ]");
return defaultTransformer;
Expand All @@ -218,6 +227,24 @@ private FieldTransformer getTransformer(MappedField annotation, ObjectFieldPair
return transformer;
}

private FieldTransformer getDefaultTransformer(Pair<Class<?>, Class<?>> key) {
FieldTransformer defaultTransformer = defaultTransformers.get(key);
if(defaultTransformer == null) {
defaultTransformer = defaultTransformers.entrySet()
.stream()
.filter((entry) -> {
Pair<Class<?>, Class<?>> pair = entry.getKey();
Class first = pair.getFirst();
Class second = pair.getSecond();
return first.isAssignableFrom(key.getFirst()) && second.isAssignableFrom(key.getSecond());
})
.map(entry -> entry.getValue())
.findFirst()
.orElse(null);
}
return defaultTransformer;
}

private EntityStructureDTO getEntityStructure(Class<?> fromClass, Class<?> toClass) {
EntityStructureDTO entityStructureDTO = entityStructures.get(new Pair<Class<?>, Class<?>>(fromClass, toClass));
if(entityStructureDTO != null) {
Expand Down

0 comments on commit d0defc8

Please sign in to comment.