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:13 UTC

[james-project] 30/41: JAMES-2813 Add throws in TaskEventDTO

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 d9bdff3c2634917cdf964331ec5cde713cd3138c
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Wed Nov 13 15:40:55 2019 +0100

    JAMES-2813 Add throws in TaskEventDTO
---
 .../eventsourcing/distributed/TaskEventDTO.scala   | 40 ++++++++++++++++------
 1 file changed, 30 insertions(+), 10 deletions(-)

diff --git a/server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/distributed/TaskEventDTO.scala b/server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/distributed/TaskEventDTO.scala
index ce4184c..a886427 100644
--- a/server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/distributed/TaskEventDTO.scala
+++ b/server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/distributed/TaskEventDTO.scala
@@ -28,6 +28,7 @@ import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTO
 import org.apache.james.json.DTOConverter
 import org.apache.james.server.task.json.JsonTaskSerializer
 import org.apache.james.server.task.json.dto.AdditionalInformationDTO
+import org.apache.james.task.TaskExecutionDetails.AdditionalInformation
 import org.apache.james.task.eventsourcing._
 import org.apache.james.task.eventsourcing.distributed.distributed.AdditionalInformationConverter
 import org.apache.james.task.{Hostname, Task, TaskExecutionDetails, TaskId}
@@ -38,6 +39,12 @@ package object distributed {
   type AdditionalInformationConverter = DTOConverter[TaskExecutionDetails.AdditionalInformation, AdditionalInformationDTO]
 }
 
+class NestedAdditionalInformationDTODeserializerNotFound(val dto: AdditionalInformationDTO) extends RuntimeException("Unable to find a deserializer for " + dto) {
+}
+
+class NestedAdditionalInformationDTOSerializerNotFound(val domainObject: AdditionalInformation) extends RuntimeException("Unable to find a serializer for " + domainObject) {
+}
+
 sealed abstract class TaskEventDTO(val getType: String, val getAggregate: String, val getEvent: Int) extends EventDTO {
   protected def domainAggregateId: TaskAggregateId = TaskAggregateId(TaskId.fromString(getAggregate))
   protected def domainEventId: EventId = EventId.fromSerialized(getEvent)
@@ -91,7 +98,8 @@ case class CompletedDTO(@JsonProperty("type") typeName: String,
                         @JsonProperty("additionalInformation") getAdditionalInformation: Optional[AdditionalInformationDTO])
   extends TaskEventDTO(typeName, aggregateId, eventId) {
   def toDomainObject(additionalInformationConverter: AdditionalInformationConverter): Completed = {
-    val additionalInformation: Optional[TaskExecutionDetails.AdditionalInformation] = getAdditionalInformation.map(additionalInformationConverter.toDomainObject(_).orElseThrow())
+    val additionalInformation: Optional[TaskExecutionDetails.AdditionalInformation] = getAdditionalInformation
+      .map(dto => additionalInformationConverter.toDomainObject(dto).orElseThrow(() => new NestedAdditionalInformationDTODeserializerNotFound(dto)))
     Completed(domainAggregateId, domainEventId, domainResult, additionalInformation.asScala)
   }
   private def domainResult: Task.Result = getResult match {
@@ -102,7 +110,10 @@ case class CompletedDTO(@JsonProperty("type") typeName: String,
 
 object CompletedDTO {
   def fromDomainObject(dtoConverter: AdditionalInformationConverter)(event: Completed, typeName: String): CompletedDTO = {
-    val additionalInformationDTO: Optional[AdditionalInformationDTO] = event.additionalInformation.asJava.map(dtoConverter.toDTO(_).orElseThrow())
+    val additionalInformationDTO: Optional[AdditionalInformationDTO] = event
+      .additionalInformation
+      .asJava
+      .map(domainObject => dtoConverter.toDTO(domainObject).orElseThrow(() => new NestedAdditionalInformationDTOSerializerNotFound(domainObject)))
     CompletedDTO(typeName, event.aggregateId.taskId.asString(), event.eventId.serialize(), resultToString(event.result), additionalInformationDTO)
   }
 
@@ -120,14 +131,17 @@ case class FailedDTO(@JsonProperty("type") typeName: String,
                      @JsonProperty("exception") getException: Optional[String])
   extends TaskEventDTO(typeName, aggregateId, eventId) {
   def toDomainObject(additionalInformationConverter: AdditionalInformationConverter): Failed = {
-    val additionalInformation: Optional[TaskExecutionDetails.AdditionalInformation] = getAdditionalInformation.map(additionalInformationConverter.toDomainObject(_).orElseThrow())
+    val additionalInformation: Optional[TaskExecutionDetails.AdditionalInformation] = getAdditionalInformation
+      .map(dto => additionalInformationConverter.toDomainObject(dto).orElseThrow(() => new NestedAdditionalInformationDTODeserializerNotFound(dto)))
     Failed(domainAggregateId, domainEventId, additionalInformation.asScala, getErrorMessage.asScala, getException.asScala)
   }
 }
 
 object FailedDTO {
   def fromDomainObject(dtoConverter: AdditionalInformationConverter)(event: Failed, typeName: String): FailedDTO = {
-    val additionalInformationDTO: Optional[AdditionalInformationDTO] = event.additionalInformation.asJava.map(dtoConverter.toDTO(_).orElseThrow())
+    val additionalInformationDTO: Optional[AdditionalInformationDTO] = event
+      .additionalInformation
+      .asJava.map(domainObject => dtoConverter.toDTO(domainObject).orElseThrow(() => new NestedAdditionalInformationDTOSerializerNotFound(domainObject)))
     FailedDTO(typeName, event.aggregateId.taskId.asString(), event.eventId.serialize(), additionalInformationDTO, event.errorMessage.asJava, event.exception.asJava)
   }
 }
@@ -138,14 +152,18 @@ case class CancelledDTO(@JsonProperty("type") typeName: String,
                         @JsonProperty("additionalInformation") getAdditionalInformation: Optional[AdditionalInformationDTO])
   extends TaskEventDTO(typeName, aggregateId, eventId) {
   def toDomainObject(additionalInformationConverter: AdditionalInformationConverter): Cancelled = {
-    val additionalInformation: Optional[TaskExecutionDetails.AdditionalInformation] = getAdditionalInformation.map(additionalInformationConverter.toDomainObject(_).orElseThrow())
+    val additionalInformation: Optional[TaskExecutionDetails.AdditionalInformation] = getAdditionalInformation
+      .map(dto => additionalInformationConverter.toDomainObject(dto).orElseThrow(() => new NestedAdditionalInformationDTODeserializerNotFound(dto)))
     Cancelled(domainAggregateId, domainEventId, additionalInformation.asScala)
   }
 }
 
 object CancelledDTO {
   def fromDomainObject(additionalInformationConverter: AdditionalInformationConverter)(event: Cancelled, typeName: String): CancelledDTO = {
-    val additionalInformationDTO: Optional[AdditionalInformationDTO] = event.additionalInformation.asJava.map(additionalInformationConverter.toDTO(_).orElseThrow())
+    val additionalInformationDTO: Optional[AdditionalInformationDTO] = event
+      .additionalInformation
+      .asJava
+      .map(domainObject => additionalInformationConverter.toDTO(domainObject).orElseThrow(() => new NestedAdditionalInformationDTOSerializerNotFound(domainObject)))
     CancelledDTO(typeName, event.aggregateId.taskId.asString(), event.eventId.serialize(), additionalInformationDTO)
   }
 }
@@ -156,16 +174,18 @@ case class AdditionalInformationUpdatedDTO(@JsonProperty("type") typeName: Strin
                      @JsonProperty("additionalInformation") getAdditionalInformation: AdditionalInformationDTO)
   extends TaskEventDTO(typeName, aggregateId, eventId) {
   def toDomainObject(additionalInformationConverter: AdditionalInformationConverter): AdditionalInformationUpdated = {
-    val additionalInformation = additionalInformationConverter.toDomainObject(getAdditionalInformation)
-        .orElseThrow()
+    val additionalInformation = additionalInformationConverter
+        .toDomainObject(getAdditionalInformation)
+        .orElseThrow(() => new NestedAdditionalInformationDTODeserializerNotFound(getAdditionalInformation))
     AdditionalInformationUpdated(domainAggregateId, domainEventId, additionalInformation)
   }
 }
 
 object AdditionalInformationUpdatedDTO {
   def fromDomainObject(additionalInformationConverter: AdditionalInformationConverter)(event: AdditionalInformationUpdated, typeName: String): AdditionalInformationUpdatedDTO = {
-    val additionalInformationDTO = additionalInformationConverter.toDTO(event.additionalInformation)
-        .orElseThrow()
+    val additionalInformationDTO = additionalInformationConverter
+        .toDTO(event.additionalInformation)
+        .orElseThrow(() => new NestedAdditionalInformationDTOSerializerNotFound(event.additionalInformation))
     AdditionalInformationUpdatedDTO(typeName, event.aggregateId.taskId.asString(), event.eventId.serialize(), additionalInformationDTO)
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org