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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to