This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit ef1ec9ccc02ea3143c90990776cb1f71bff012a5 Author: Matthieu Baechler <[email protected]> AuthorDate: Fri Oct 18 14:12:27 2019 +0200 JAMES-2813 split module finding into an inner class before further refactoring --- .../apache/james/json/JsonGenericSerializer.java | 54 ++++++++++++++-------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java b/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java index d3b70fd..e84630f 100644 --- a/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java +++ b/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java @@ -40,6 +40,32 @@ import com.google.common.collect.ImmutableSet; public class JsonGenericSerializer<T, U extends DTO> { + private static class DTOConverter<T, U extends DTO> { + + private final Map<String, DTOModule<T, U>> typeToModule; + private final Map<Class<? extends T>, DTOModule<T, U>> domainClassToModule; + + public DTOConverter(Set<DTOModule<T, U>> modules) { + typeToModule = modules.stream() + .collect(Guavate.toImmutableMap( + DTOModule::getDomainObjectType, + Function.identity())); + + domainClassToModule = modules.stream() + .collect(Guavate.toImmutableMap( + DTOModule::getDomainObjectClass, + Function.identity())); + } + + public Optional<DTOModule<T, U>> findModule(T domainObject) { + return Optional.ofNullable(domainClassToModule.get(domainObject.getClass())); + } + + public Optional<DTOModule<T, U>> findModule(String type) { + return Optional.ofNullable(typeToModule.get(type)); + } + } + public static class InvalidTypeException extends RuntimeException { public InvalidTypeException(String message) { super(message); @@ -56,9 +82,8 @@ public class JsonGenericSerializer<T, U extends DTO> { } } - private final Map<Class<? extends T>, DTOModule<T, U>> domainClassToModule; - private final Map<String, DTOModule<T, U>> typeToModule; private final ObjectMapper objectMapper; + private final DTOConverter<T, U> dtoConverter; @SafeVarargs public static <T, U extends DTO> JsonGenericSerializer<T, U> of(DTOModule<T, U>... modules) { @@ -73,24 +98,17 @@ public class JsonGenericSerializer<T, U extends DTO> { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_ABSENT); objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); objectMapper.enable(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY); - typeToModule = modules.stream() - .collect(Guavate.toImmutableMap( - DTOModule::getDomainObjectType, - Function.identity())); - - domainClassToModule = modules.stream() - .collect(Guavate.toImmutableMap( - DTOModule::getDomainObjectClass, - Function.identity())); + dtoConverter = new DTOConverter<>(modules); } public String serialize(T domainObject) throws JsonProcessingException { - U dto = Optional.ofNullable(domainClassToModule.get(domainObject.getClass())) - .orElseThrow(() -> new UnknownTypeException("unknown type " + domainObject.getClass())) - .toDTO(domainObject); + U dto = dtoConverter.findModule(domainObject) + .map(module -> module.toDTO(domainObject)) + .orElseThrow(() -> new UnknownTypeException("unknown type " + domainObject.getClass())); return objectMapper.writeValueAsString(dto); } + public T deserialize(String value) throws IOException { try { JsonNode jsonNode = objectMapper.readTree(value); @@ -101,7 +119,9 @@ public class JsonGenericSerializer<T, U extends DTO> { throw new InvalidTypeException("No \"type\" property found in the json document"); } - DTOModule<T, U> dtoModule = retrieveModuleForType(typeNode.asText()); + String type = typeNode.asText(); + DTOModule<T, U> dtoModule = dtoConverter.findModule(type) + .orElseThrow(() -> new UnknownTypeException("unknown type " + type)); U dto = objectMapper.readValue(objectMapper.treeAsTokens(jsonNode), dtoModule.getDTOClass()); return dtoModule.getToDomainObjectConverter().convert(dto); } catch (MismatchedInputException e) { @@ -109,8 +129,4 @@ public class JsonGenericSerializer<T, U extends DTO> { } } - private DTOModule<T, U> retrieveModuleForType(String type) { - return Optional.ofNullable(typeToModule.get(type)) - .orElseThrow(() -> new UnknownTypeException("unknown type " + type)); - } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
