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