You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/11/20 07:32:07 UTC
[james-project] 24/41: JAMES-2813 DTO <-> domain object must be a
bijection for jackson to work
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 ec1edc03651d53772f4966a437699155578b49b0
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Wed Oct 23 14:31:39 2019 +0200
JAMES-2813 DTO <-> domain object must be a bijection for jackson to work
Reference: https://github.com/FasterXML/jackson-databind/issues/2515
---
.../indexer/ReprocessingContextInformationDTO.java | 46 ++++++++++---
...tersRedeliveryTaskAdditionalInformationDTO.java | 78 ++++++++++++++++------
2 files changed, 94 insertions(+), 30 deletions(-)
diff --git a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java
index 3ee9c7f..9172e98 100644
--- a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java
+++ b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java
@@ -58,15 +58,27 @@ public class ReprocessingContextInformationDTO implements AdditionalInformationD
}
public static class ReprocessingContextInformationForErrorRecoveryIndexationTask extends ReprocessingContextInformation {
- public static final AdditionalInformationDTOModule<ReprocessingContextInformationForErrorRecoveryIndexationTask, ReprocessingContextInformationDTO> serializationModule(MailboxId.Factory mailboxIdFactory) {
+
+ public static class DTO extends ReprocessingContextInformationDTO {
+
+ DTO(@JsonProperty("type") String type,
+ @JsonProperty("successfullyReprocessedMailCount") int successfullyReprocessedMailCount,
+ @JsonProperty("failedReprocessedMailCount") int failedReprocessedMailCount,
+ @JsonProperty("failures") List<ReindexingFailureDTO> failures,
+ @JsonProperty("timestamp") Instant timestamp) {
+ super(type, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
+ }
+ }
+
+ public static final AdditionalInformationDTOModule<ReprocessingContextInformationForErrorRecoveryIndexationTask, DTO> serializationModule(MailboxId.Factory mailboxIdFactory) {
return DTOModule.forDomainObject(ReprocessingContextInformationForErrorRecoveryIndexationTask.class)
- .convertToDTO(ReprocessingContextInformationDTO.class)
+ .convertToDTO(DTO.class)
.toDomainObjectConverter(dto -> new ReprocessingContextInformationForErrorRecoveryIndexationTask(
dto.successfullyReprocessedMailCount,
dto.failedReprocessedMailCount,
deserializeFailures(mailboxIdFactory, dto.failures),
dto.getTimestamp()))
- .toDTOConverter((details, type) -> new ReprocessingContextInformationDTO(
+ .toDTOConverter((details, type) -> new DTO(
type,
details.getSuccessfullyReprocessedMailCount(),
details.getFailedReprocessedMailCount(),
@@ -82,11 +94,23 @@ public class ReprocessingContextInformationDTO implements AdditionalInformationD
}
public static class ReprocessingContextInformationForFullReindexingTask extends ReprocessingContextInformation {
- public static final AdditionalInformationDTOModule<ReprocessingContextInformationForFullReindexingTask, ReprocessingContextInformationDTO> serializationModule(MailboxId.Factory mailboxIdFactory) {
+
+ public static class DTO extends ReprocessingContextInformationDTO {
+
+ DTO(@JsonProperty("type") String type,
+ @JsonProperty("successfullyReprocessedMailCount") int successfullyReprocessedMailCount,
+ @JsonProperty("failedReprocessedMailCount") int failedReprocessedMailCount,
+ @JsonProperty("failures") List<ReindexingFailureDTO> failures,
+ @JsonProperty("timestamp") Instant timestamp) {
+ super(type, successfullyReprocessedMailCount, failedReprocessedMailCount, failures, timestamp);
+ }
+ }
+
+ public static final AdditionalInformationDTOModule<ReprocessingContextInformationForFullReindexingTask, DTO> serializationModule(MailboxId.Factory mailboxIdFactory) {
return DTOModule.forDomainObject(ReprocessingContextInformationForFullReindexingTask.class)
- .convertToDTO(ReprocessingContextInformationDTO.class)
+ .convertToDTO(DTO.class)
.toDomainObjectConverter(dto -> new ReprocessingContextInformationForFullReindexingTask(dto.successfullyReprocessedMailCount, dto.failedReprocessedMailCount, deserializeFailures(mailboxIdFactory, dto.failures), dto.getTimestamp()))
- .toDTOConverter((details, type) -> new ReprocessingContextInformationDTO(
+ .toDTOConverter((details, type) -> new DTO(
type,
details.getSuccessfullyReprocessedMailCount(),
details.getFailedReprocessedMailCount(),
@@ -144,11 +168,11 @@ public class ReprocessingContextInformationDTO implements AdditionalInformationD
.collect(Guavate.toImmutableList());
}
- private final String type;
- private final int successfullyReprocessedMailCount;
- private final int failedReprocessedMailCount;
- private final List<ReindexingFailureDTO> failures;
- private final Instant timestamp;
+ protected final String type;
+ protected final int successfullyReprocessedMailCount;
+ protected final int failedReprocessedMailCount;
+ protected final List<ReindexingFailureDTO> failures;
+ protected final Instant timestamp;
ReprocessingContextInformationDTO(@JsonProperty("type") String type,
diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliveryTaskAdditionalInformationDTO.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliveryTaskAdditionalInformationDTO.java
index 46dce06..552aa8b 100644
--- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliveryTaskAdditionalInformationDTO.java
+++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliveryTaskAdditionalInformationDTO.java
@@ -14,12 +14,29 @@ import com.github.fge.lambdas.Throwing;
public class EventDeadLettersRedeliveryTaskAdditionalInformationDTO implements AdditionalInformationDTO {
public static class EventDeadLettersRedeliveryTaskAdditionalInformationForAll extends EventDeadLettersRedeliveryTaskAdditionalInformation {
- public static final AdditionalInformationDTOModule<EventDeadLettersRedeliveryTaskAdditionalInformationForAll, EventDeadLettersRedeliveryTaskAdditionalInformationDTO> MODULE =
+
+ public static class DTO extends EventDeadLettersRedeliveryTaskAdditionalInformationDTO {
+ public DTO(@JsonProperty("type") String type,
+ @JsonProperty("successfulRedeliveriesCount") long successfulRedeliveriesCount,
+ @JsonProperty("failedRedeliveriesCount") long failedRedeliveriesCount,
+ @JsonProperty("group") Optional<String> group,
+ @JsonProperty("insertionId") Optional<String> insertionId,
+ @JsonProperty("timestamp") Instant timestamp) {
+ super(type, successfulRedeliveriesCount, failedRedeliveriesCount, group,insertionId, timestamp);
+ }
+ }
+
+ public static final AdditionalInformationDTOModule<EventDeadLettersRedeliveryTaskAdditionalInformationForAll, DTO> MODULE =
DTOModule
.forDomainObject(EventDeadLettersRedeliveryTaskAdditionalInformationForAll.class)
- .convertToDTO(EventDeadLettersRedeliveryTaskAdditionalInformationDTO.class)
+ .convertToDTO(DTO.class)
.toDomainObjectConverter(EventDeadLettersRedeliveryTaskAdditionalInformationDTO::fromAll)
- .toDTOConverter(EventDeadLettersRedeliveryTaskAdditionalInformationDTO::toDTO)
+ .toDTOConverter((domainObject, typeName) -> new DTO(typeName,
+ domainObject.getSuccessfulRedeliveriesCount(),
+ domainObject.getFailedRedeliveriesCount(),
+ domainObject.getGroup(),
+ domainObject.getInsertionId(),
+ domainObject.timestamp()))
.typeName(EventDeadLettersRedeliverAllTask.TYPE.asString())
.withFactory(AdditionalInformationDTOModule::new);
@@ -30,12 +47,29 @@ public class EventDeadLettersRedeliveryTaskAdditionalInformationDTO implements A
}
public static class EventDeadLettersRedeliveryTaskAdditionalInformationForGroup extends EventDeadLettersRedeliveryTaskAdditionalInformation {
- public static final AdditionalInformationDTOModule<EventDeadLettersRedeliveryTaskAdditionalInformationForGroup, EventDeadLettersRedeliveryTaskAdditionalInformationDTO> MODULE =
+
+ public static class DTO extends EventDeadLettersRedeliveryTaskAdditionalInformationDTO {
+ public DTO(@JsonProperty("type") String type,
+ @JsonProperty("successfulRedeliveriesCount") long successfulRedeliveriesCount,
+ @JsonProperty("failedRedeliveriesCount") long failedRedeliveriesCount,
+ @JsonProperty("group") Optional<String> group,
+ @JsonProperty("insertionId") Optional<String> insertionId,
+ @JsonProperty("timestamp") Instant timestamp) {
+ super(type, successfulRedeliveriesCount, failedRedeliveriesCount, group,insertionId, timestamp);
+ }
+ }
+
+ public static final AdditionalInformationDTOModule<EventDeadLettersRedeliveryTaskAdditionalInformationForGroup, DTO> MODULE =
DTOModule
.forDomainObject(EventDeadLettersRedeliveryTaskAdditionalInformationForGroup.class)
- .convertToDTO(EventDeadLettersRedeliveryTaskAdditionalInformationDTO.class)
+ .convertToDTO(DTO.class)
.toDomainObjectConverter(EventDeadLettersRedeliveryTaskAdditionalInformationDTO::fromGroup)
- .toDTOConverter(EventDeadLettersRedeliveryTaskAdditionalInformationDTO::toDTO)
+ .toDTOConverter((domainObject, typeName) -> new DTO(typeName,
+ domainObject.getSuccessfulRedeliveriesCount(),
+ domainObject.getFailedRedeliveriesCount(),
+ domainObject.getGroup(),
+ domainObject.getInsertionId(),
+ domainObject.timestamp()))
.typeName(EventDeadLettersRedeliverGroupTask.TYPE.asString())
.withFactory(AdditionalInformationDTOModule::new);
@@ -46,12 +80,28 @@ public class EventDeadLettersRedeliveryTaskAdditionalInformationDTO implements A
}
public static class EventDeadLettersRedeliveryTaskAdditionalInformationForOne extends EventDeadLettersRedeliveryTaskAdditionalInformation {
- public static final AdditionalInformationDTOModule<EventDeadLettersRedeliveryTaskAdditionalInformationForOne, EventDeadLettersRedeliveryTaskAdditionalInformationDTO> MODULE =
+ public static class DTO extends EventDeadLettersRedeliveryTaskAdditionalInformationDTO {
+ public DTO(@JsonProperty("type") String type,
+ @JsonProperty("successfulRedeliveriesCount") long successfulRedeliveriesCount,
+ @JsonProperty("failedRedeliveriesCount") long failedRedeliveriesCount,
+ @JsonProperty("group") Optional<String> group,
+ @JsonProperty("insertionId") Optional<String> insertionId,
+ @JsonProperty("timestamp") Instant timestamp) {
+ super(type, successfulRedeliveriesCount, failedRedeliveriesCount, group,insertionId, timestamp);
+ }
+ }
+
+ public static final AdditionalInformationDTOModule<EventDeadLettersRedeliveryTaskAdditionalInformationForOne, DTO> MODULE =
DTOModule
.forDomainObject(EventDeadLettersRedeliveryTaskAdditionalInformationForOne.class)
- .convertToDTO(EventDeadLettersRedeliveryTaskAdditionalInformationDTO.class)
+ .convertToDTO(DTO.class)
.toDomainObjectConverter(EventDeadLettersRedeliveryTaskAdditionalInformationDTO::fromOne)
- .toDTOConverter(EventDeadLettersRedeliveryTaskAdditionalInformationDTO::toDTO)
+ .toDTOConverter((domainObject, typeName) -> new DTO(typeName,
+ domainObject.getSuccessfulRedeliveriesCount(),
+ domainObject.getFailedRedeliveriesCount(),
+ domainObject.getGroup(),
+ domainObject.getInsertionId(),
+ domainObject.timestamp()))
.typeName(EventDeadLettersRedeliverOneTask.TYPE.asString())
.withFactory(AdditionalInformationDTOModule::new);
@@ -66,16 +116,6 @@ public class EventDeadLettersRedeliveryTaskAdditionalInformationDTO implements A
}
}
- private static EventDeadLettersRedeliveryTaskAdditionalInformationDTO toDTO(EventDeadLettersRedeliveryTaskAdditionalInformation domainObject, String typeName) {
- return new EventDeadLettersRedeliveryTaskAdditionalInformationDTO(
- typeName,
- domainObject.getSuccessfulRedeliveriesCount(),
- domainObject.getFailedRedeliveriesCount(),
- domainObject.getGroup(),
- domainObject.getInsertionId(),
- domainObject.timestamp());
- }
-
private static EventDeadLettersRedeliveryTaskAdditionalInformationForAll fromAll(EventDeadLettersRedeliveryTaskAdditionalInformationDTO dto) {
return new EventDeadLettersRedeliveryTaskAdditionalInformationForAll(
dto.successfulRedeliveriesCount,
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org