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 cec2fc0bcab75c409df8e013b68181bfe6bfefc1 Author: Tung Van TRAN <vtt...@linagora.com> AuthorDate: Thu Oct 27 11:39:23 2022 +0700 [CLEAN CODE] Jmap - Method getRequest from deserialize json --- .../org/apache/james/jmap/json/ResponseSerializer.scala | 2 ++ .../apache/james/jmap/method/EmailChangesMethod.scala | 9 +++------ .../org/apache/james/jmap/method/EmailGetMethod.scala | 6 ++---- .../org/apache/james/jmap/method/EmailImportMethod.scala | 10 ++++------ .../org/apache/james/jmap/method/EmailQueryMethod.scala | 15 ++++++--------- .../org/apache/james/jmap/method/EmailSetMethod.scala | 10 ++++------ .../org/apache/james/jmap/method/IdentityGetMethod.scala | 11 +++++------ .../org/apache/james/jmap/method/IdentitySetMethod.scala | 10 ++++------ .../org/apache/james/jmap/method/MDNParseMethod.scala | 14 ++++++-------- .../org/apache/james/jmap/method/MDNSendMethod.scala | 15 +++++++-------- .../apache/james/jmap/method/MailboxChangesMethod.scala | 9 +++------ .../org/apache/james/jmap/method/MailboxGetMethod.scala | 11 ++++------- .../apache/james/jmap/method/MailboxQueryMethod.scala | 10 ++++------ .../org/apache/james/jmap/method/MailboxSetMethod.scala | 11 +++++------ .../james/jmap/method/PushSubscriptionGetMethod.scala | 10 ++++------ .../james/jmap/method/PushSubscriptionSetMethod.scala | 10 ++++------ .../org/apache/james/jmap/method/QuotaGetMethod.scala | 12 +++++------- .../apache/james/jmap/method/ThreadChangesMethod.scala | 10 ++++------ .../org/apache/james/jmap/method/ThreadGetMethod.scala | 9 +++------ .../james/jmap/method/VacationResponseGetMethod.scala | 15 ++++++--------- .../james/jmap/method/VacationResponseSetMethod.scala | 16 +++++++--------- 21 files changed, 92 insertions(+), 133 deletions(-) diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala index a90eaa57c1..56905e9c8b 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala @@ -159,6 +159,8 @@ object ResponseSerializer { def serialize(errors: JsError): JsValue = Json.toJson(errors) + def asException(errors: scala.collection.Seq[(JsPath, scala.collection.Seq[JsonValidationError])]): IllegalArgumentException = new IllegalArgumentException(serialize(JsError(errors)).toString()) + def deserializeRequestObject(input: String): JsResult[RequestObject] = Json.parse(input).validate[RequestObject] def deserializeRequestObject(input: InputStream): JsResult[RequestObject] = Json.parse(input).validate[RequestObject] diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailChangesMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailChangesMethod.scala index 68bc07f566..44ee6eef3f 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailChangesMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailChangesMethod.scala @@ -20,7 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.api.change.{CanNotCalculateChangesException, EmailChangeRepository, EmailChanges, State => JavaState} import org.apache.james.jmap.api.model.{AccountId => JavaAccountId} import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JAMES_SHARES, JMAP_MAIL} @@ -31,9 +30,9 @@ import org.apache.james.jmap.mail.{EmailChangesRequest, EmailChangesResponse, Ha import org.apache.james.jmap.routes.SessionSupplier import org.apache.james.mailbox.MailboxSession import org.apache.james.metrics.api.MetricFactory -import play.api.libs.json.{JsError, JsSuccess} import reactor.core.scala.publisher.SMono +import javax.inject.Inject import scala.jdk.CollectionConverters._ import scala.jdk.OptionConverters._ @@ -74,8 +73,6 @@ class EmailChangesMethod @Inject()(val metricFactory: MetricFactory, } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, EmailChangesRequest] = - EmailGetSerializer.deserializeEmailChangesRequest(invocation.arguments.value) match { - case JsSuccess(emailGetRequest, _) => Right(emailGetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + EmailGetSerializer.deserializeEmailChangesRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) } diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala index 17e6776ff2..1899e0edf9 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala @@ -92,10 +92,8 @@ class EmailGetMethod @Inject() (readerFactory: EmailViewReaderFactory, } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, EmailGetRequest] = - EmailGetSerializer.deserializeEmailGetRequest(invocation.arguments.value) match { - case JsSuccess(emailGetRequest, _) => Right(emailGetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + EmailGetSerializer.deserializeEmailGetRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) private def computeResponseInvocation(capabilities: Set[CapabilityIdentifier], request: EmailGetRequest, invocation: Invocation, mailboxSession: MailboxSession): SMono[Invocation] = validateProperties(request) diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailImportMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailImportMethod.scala index b15f1aac89..41bfa69be1 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailImportMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailImportMethod.scala @@ -19,10 +19,7 @@ package org.apache.james.jmap.method -import java.util.Date - import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.api.change.EmailChangeRepository import org.apache.james.jmap.api.model.Size.sanitizeSize import org.apache.james.jmap.api.model.{AccountId => JavaAccountId} @@ -44,9 +41,10 @@ import org.apache.james.mime4j.message.DefaultMessageBuilder import org.apache.james.mime4j.stream.MimeConfig import org.apache.james.util.ReactorUtils import org.reactivestreams.Publisher -import play.api.libs.json.JsError import reactor.core.scala.publisher.{SFlux, SMono} +import java.util.Date +import javax.inject.Inject import scala.util.{Try, Using} object EmailImportMethod { @@ -91,8 +89,8 @@ class EmailImportMethod @Inject() (val metricFactory: MetricFactory, override val requiredCapabilities: Set[CapabilityIdentifier] = Set(JMAP_CORE, JMAP_MAIL) override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[Exception, EmailImportRequest] = - serializer.deserializeEmailImportRequest(invocation.arguments.value).asEither - .left.map(errors => new IllegalArgumentException(ResponseSerializer.serialize(JsError(errors)).toString)) + serializer.deserializeEmailImportRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) override def doProcess(capabilities: Set[CapabilityIdentifier], invocation: InvocationWithContext, mailboxSession: MailboxSession, request: EmailImportRequest): Publisher[InvocationWithContext] = for { diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala index 74f95966a6..454e1893df 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala @@ -18,12 +18,8 @@ ****************************************************************/ package org.apache.james.jmap.method -import java.time.ZonedDateTime - import cats.implicits._ import eu.timepit.refined.auto._ -import javax.inject.Inject -import javax.mail.Flags.Flag.DELETED import org.apache.james.jmap.JMAPConfiguration import org.apache.james.jmap.api.projections.EmailQueryView import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_CORE, JMAP_MAIL} @@ -41,9 +37,11 @@ import org.apache.james.mailbox.model.{MailboxId, MessageId, MultimailboxesSearc import org.apache.james.mailbox.{MailboxManager, MailboxSession} import org.apache.james.metrics.api.MetricFactory import org.apache.james.util.streams.{Limit => JavaLimit} -import play.api.libs.json.{JsError, JsSuccess} import reactor.core.scala.publisher.{SFlux, SMono} +import java.time.ZonedDateTime +import javax.inject.Inject +import javax.mail.Flags.Flag.DELETED import scala.jdk.CollectionConverters._ class EmailQueryMethod @Inject() (serializer: EmailQuerySerializer, @@ -79,10 +77,9 @@ class EmailQueryMethod @Inject() (serializer: EmailQuerySerializer, } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[Exception, EmailQueryRequest] = - serializer.deserializeEmailQueryRequest(invocation.arguments.value) match { - case JsSuccess(emailQueryRequest, _) => validateRequestParameters(emailQueryRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + serializer.deserializeEmailQueryRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) + .flatMap(validateRequestParameters) private def validateRequestParameters(request: EmailQueryRequest): Either[Exception, EmailQueryRequest] = (request.anchor, request.anchorOffset) match { diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala index c178acc056..b428729301 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala @@ -19,7 +19,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.api.change.EmailChangeRepository import org.apache.james.jmap.api.model.{AccountId => JavaAccountId} import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JAMES_SHARES, JMAP_CORE, JMAP_MAIL} @@ -31,9 +30,10 @@ import org.apache.james.jmap.routes.SessionSupplier import org.apache.james.mailbox.MailboxSession import org.apache.james.mailbox.model.MessageId import org.apache.james.metrics.api.MetricFactory -import play.api.libs.json.{JsError, JsSuccess} import reactor.core.scala.publisher.SMono +import javax.inject.Inject + case class MessageNotFoundException(messageId: MessageId) extends Exception class EmailSetMethod @Inject()(serializer: EmailSetSerializer, @@ -77,10 +77,8 @@ class EmailSetMethod @Inject()(serializer: EmailSetSerializer, } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, EmailSetRequest] = - serializer.deserialize(invocation.arguments.value) match { - case JsSuccess(emailSetRequest, _) => Right(emailSetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + serializer.deserialize(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) private def retrieveState(capabilities: Set[CapabilityIdentifier], mailboxSession: MailboxSession): SMono[UuidState] = if (capabilities.contains(JAMES_SHARES)) { diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityGetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityGetMethod.scala index 665150b3b1..e73e4fa914 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityGetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityGetMethod.scala @@ -20,7 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.api.identity.IdentityRepository import org.apache.james.jmap.api.model.{Identity, IdentityId} import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, EMAIL_SUBMISSION, JMAP_CORE} @@ -32,9 +31,11 @@ import org.apache.james.jmap.routes.SessionSupplier import org.apache.james.mailbox.MailboxSession import org.apache.james.metrics.api.MetricFactory import org.apache.james.util.ReactorUtils -import play.api.libs.json.{JsError, JsObject, JsSuccess} +import play.api.libs.json.JsObject import reactor.core.scala.publisher.{SFlux, SMono} +import javax.inject.Inject + class IdentityGetMethod @Inject() (identityRepository: IdentityRepository, val metricFactory: MetricFactory, val sessionSupplier: SessionSupplier) extends MethodRequiringAccountId[IdentityGetRequest] { @@ -58,10 +59,8 @@ class IdentityGetMethod @Inject() (identityRepository: IdentityRepository, } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, IdentityGetRequest] = - IdentitySerializer.deserialize(invocation.arguments.value) match { - case JsSuccess(request, _) => Right(request) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + IdentitySerializer.deserialize(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) private def getIdentities(request: IdentityGetRequest, mailboxSession: MailboxSession): SMono[IdentityGetResponse] = diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetMethod.scala index 8f9fd64779..2ac9f6ea80 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetMethod.scala @@ -20,7 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, EMAIL_SUBMISSION, JMAP_CORE} import org.apache.james.jmap.core.Invocation.{Arguments, MethodName} import org.apache.james.jmap.core.{ClientId, Id, Invocation, ServerId, UuidState} @@ -29,9 +28,10 @@ import org.apache.james.jmap.mail.{IdentitySetRequest, IdentitySetResponse} import org.apache.james.jmap.routes.SessionSupplier import org.apache.james.mailbox.MailboxSession import org.apache.james.metrics.api.MetricFactory -import play.api.libs.json.{JsError, JsSuccess} import reactor.core.scala.publisher.SMono +import javax.inject.Inject + class IdentitySetMethod @Inject()(createPerformer: IdentitySetCreatePerformer, updatePerformer: IdentitySetUpdatePerformer, deletePerformer: IdentitySetDeletePerformer, @@ -41,10 +41,8 @@ class IdentitySetMethod @Inject()(createPerformer: IdentitySetCreatePerformer, override val requiredCapabilities: Set[CapabilityIdentifier] = Set(JMAP_CORE, EMAIL_SUBMISSION) override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[Exception, IdentitySetRequest] = - IdentitySerializer.deserializeIdentitySetRequest(invocation.arguments.value) match { - case JsSuccess(identitySetRequest, _) => Right(identitySetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + IdentitySerializer.deserializeIdentitySetRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) override def doProcess(capabilities: Set[CapabilityIdentifier], invocation: InvocationWithContext, mailboxSession: MailboxSession, request: IdentitySetRequest): SMono[InvocationWithContext] = for { diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNParseMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNParseMethod.scala index bc194afddf..827450390d 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNParseMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNParseMethod.scala @@ -19,10 +19,7 @@ package org.apache.james.jmap.method -import java.io.InputStream - import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_CORE, JMAP_MAIL, JMAP_MDN} import org.apache.james.jmap.core.Invocation import org.apache.james.jmap.core.Invocation._ @@ -36,9 +33,11 @@ import org.apache.james.mdn.fields.OriginalMessageId import org.apache.james.metrics.api.MetricFactory import org.apache.james.mime4j.dom.Message import org.apache.james.mime4j.message.DefaultMessageBuilder -import play.api.libs.json.{JsError, JsObject, JsSuccess, Json} +import play.api.libs.json.JsObject import reactor.core.scala.publisher.{SFlux, SMono} +import java.io.InputStream +import javax.inject.Inject import scala.jdk.OptionConverters._ import scala.util.{Try, Using} @@ -58,10 +57,9 @@ class MDNParseMethod @Inject()(serializer: MDNSerializer, .map(InvocationWithContext(_, invocation.processingContext)) override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[Exception, MDNParseRequest] = - serializer.deserializeMDNParseRequest(invocation.arguments.value) match { - case JsSuccess(mdnParseRequest, _) => mdnParseRequest.validate - case errors: JsError => Left(new IllegalArgumentException(Json.stringify(ResponseSerializer.serialize(errors)))) - } + serializer.deserializeMDNParseRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) + .flatMap(_.validate) def computeResponseInvocation(request: MDNParseRequest, invocation: Invocation, diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNSendMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNSendMethod.scala index 71db5d21d2..87b330091c 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNSendMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNSendMethod.scala @@ -20,9 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.annotation.PreDestroy -import javax.inject.Inject -import javax.mail.internet.MimeMessage import org.apache.james.jmap.api.model.Identity import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_CORE, JMAP_MAIL, JMAP_MDN} import org.apache.james.jmap.core.Invocation @@ -48,9 +45,12 @@ import org.apache.james.queue.api.MailQueueFactory.SPOOL import org.apache.james.queue.api.{MailQueue, MailQueueFactory} import org.apache.james.server.core.MailImpl import org.apache.james.util.ReactorUtils -import play.api.libs.json.{JsError, JsObject, JsSuccess, Json} +import play.api.libs.json.{JsError, JsObject, JsSuccess} import reactor.core.scala.publisher.{SFlux, SMono} +import javax.annotation.PreDestroy +import javax.inject.Inject +import javax.mail.internet.MimeMessage import scala.jdk.CollectionConverters._ import scala.jdk.OptionConverters._ import scala.util.Try @@ -104,10 +104,9 @@ class MDNSendMethod @Inject()(serializer: MDNSerializer, }) override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[Exception, MDNSendRequest] = - serializer.deserializeMDNSendRequest(invocation.arguments.value) match { - case JsSuccess(mdnSendRequest, _) => mdnSendRequest.validate - case errors: JsError => Left(new IllegalArgumentException(Json.stringify(ResponseSerializer.serialize(errors)))) - } + serializer.deserializeMDNSendRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) + .flatMap(_.validate) private def create(identity: Identity, request: MDNSendRequest, diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala index 6df3a075ea..0a04bde30c 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala @@ -20,7 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.api.change.{CanNotCalculateChangesException, MailboxChangeRepository, MailboxChanges, State => JavaState} import org.apache.james.jmap.api.model.{AccountId => JavaAccountId} import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_MAIL} @@ -32,9 +31,9 @@ import org.apache.james.jmap.method.MailboxChangesMethod.updatedProperties import org.apache.james.jmap.routes.SessionSupplier import org.apache.james.mailbox.MailboxSession import org.apache.james.metrics.api.MetricFactory -import play.api.libs.json.{JsError, JsSuccess} import reactor.core.scala.publisher.SMono +import javax.inject.Inject import scala.jdk.CollectionConverters._ import scala.jdk.OptionConverters._ @@ -83,10 +82,8 @@ class MailboxChangesMethod @Inject()(mailboxSerializer: MailboxSerializer, }) override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, MailboxChangesRequest] = - mailboxSerializer.deserializeMailboxChangesRequest(invocation.arguments.value) match { - case JsSuccess(mailboxGetRequest, _) => Right(mailboxGetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + mailboxSerializer.deserializeMailboxChangesRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) private def updateProperties(mailboxChanges: MailboxChanges): Option[Properties] = if (mailboxChanges.isCountChangesOnly) { diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala index 8dcbcb8776..416b5d87a9 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala @@ -20,7 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.api.change.MailboxChangeRepository import org.apache.james.jmap.api.model.{AccountId => JavaAccountId} import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JAMES_SHARES, JMAP_CORE, JMAP_MAIL} @@ -36,9 +35,10 @@ import org.apache.james.mailbox.model.search.MailboxQuery import org.apache.james.mailbox.model.{MailboxId, MailboxMetaData} import org.apache.james.mailbox.{MailboxManager, MailboxSession, SubscriptionManager} import org.apache.james.metrics.api.MetricFactory -import play.api.libs.json.{JsError, JsObject, JsSuccess} +import play.api.libs.json.JsObject import reactor.core.scala.publisher.{SFlux, SMono} +import javax.inject.Inject import scala.util.Try object MailboxGetResults { @@ -101,11 +101,8 @@ class MailboxGetMethod @Inject() (serializer: MailboxSerializer, } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, MailboxGetRequest] = - serializer.deserializeMailboxGetRequest(invocation.arguments.value) match { - case JsSuccess(mailboxGetRequest, _) => Right(mailboxGetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } - + serializer.deserializeMailboxGetRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) private def getMailboxes(capabilities: Set[CapabilityIdentifier], mailboxGetRequest: MailboxGetRequest, diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala index 6a2a50e77c..b12feb469e 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala @@ -19,7 +19,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_CORE, JMAP_MAIL} import org.apache.james.jmap.core.Invocation.{Arguments, MethodName} import org.apache.james.jmap.core.{CanCalculateChanges, ErrorCode, Invocation, Limit, Position, QueryState} @@ -28,9 +27,10 @@ import org.apache.james.jmap.mail.{MailboxQueryRequest, MailboxQueryResponse} import org.apache.james.jmap.routes.SessionSupplier import org.apache.james.mailbox.{MailboxSession, SystemMailboxesProvider} import org.apache.james.metrics.api.MetricFactory -import play.api.libs.json.{JsError, JsSuccess} import reactor.core.scala.publisher.{SFlux, SMono} +import javax.inject.Inject + class MailboxQueryMethod @Inject()(systemMailboxesProvider: SystemMailboxesProvider, val metricFactory: MetricFactory, val sessionSupplier: SessionSupplier) extends MethodRequiringAccountId[MailboxQueryRequest] { @@ -51,10 +51,8 @@ class MailboxQueryMethod @Inject()(systemMailboxesProvider: SystemMailboxesProvi } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, MailboxQueryRequest] = - MailboxQuerySerializer.deserialize(invocation.arguments.value) match { - case JsSuccess(emailQueryRequest, _) => Right(emailQueryRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + MailboxQuerySerializer.deserialize(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) private def processRequest(mailboxSession: MailboxSession, invocation: Invocation, request: MailboxQueryRequest): SMono[Invocation] = SFlux.fromPublisher(systemMailboxesProvider.getMailboxByRole(request.filter.role, mailboxSession.getUser)) diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala index ec90a1f533..933dcf7383 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala @@ -20,7 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.api.change.MailboxChangeRepository import org.apache.james.jmap.api.model.{AccountId => JavaAccountId} import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JAMES_SHARES, JMAP_CORE, JMAP_MAIL} @@ -35,9 +34,11 @@ import org.apache.james.jmap.routes.SessionSupplier import org.apache.james.mailbox.MailboxSession import org.apache.james.mailbox.model.MailboxId import org.apache.james.metrics.api.MetricFactory -import play.api.libs.json.{JsError, JsObject, JsSuccess} +import play.api.libs.json.JsObject import reactor.core.scala.publisher.SMono +import javax.inject.Inject + case class MailboxHasMailException(mailboxId: MailboxId) extends Exception case class SystemMailboxChangeException(mailboxId: MailboxId) extends Exception case class LoopInMailboxGraphException(mailboxId: MailboxId) extends Exception @@ -64,10 +65,8 @@ class MailboxSetMethod @Inject()(serializer: MailboxSerializer, } yield InvocationWithContext(response, creationResults._2) override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, MailboxSetRequest] = - serializer.deserializeMailboxSetRequest(invocation.arguments.value) match { - case JsSuccess(mailboxSetRequest, _) => Right(mailboxSetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + serializer.deserializeMailboxSetRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) private def createResponse(capabilities: Set[CapabilityIdentifier], invocation: Invocation, diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionGetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionGetMethod.scala index 09381a9666..0f5b8e6465 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionGetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionGetMethod.scala @@ -20,7 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.api.model.PushSubscriptionId import org.apache.james.jmap.api.pushsubscription.PushSubscriptionRepository import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_CORE} @@ -31,9 +30,10 @@ import org.apache.james.jmap.routes.SessionSupplier import org.apache.james.lifecycle.api.Startable import org.apache.james.mailbox.MailboxSession import org.apache.james.metrics.api.MetricFactory -import play.api.libs.json.{JsError, JsObject, JsSuccess} +import play.api.libs.json.JsObject import reactor.core.scala.publisher.{SFlux, SMono} +import javax.inject.Inject import scala.jdk.CollectionConverters._ case class PushSubscriptionGetResults(results: Seq[PushSubscriptionDTO], notFound: Set[UnparsedPushSubscriptionId]) { @@ -53,10 +53,8 @@ class PushSubscriptionGetMethod @Inject()(pushSubscriptionSerializer: PushSubscr override val requiredCapabilities: Set[CapabilityIdentifier] = Set(JMAP_CORE) override def getRequest(invocation: Invocation): Either[Exception, PushSubscriptionGetRequest] = - pushSubscriptionSerializer.deserializePushSubscriptionGetRequest(invocation.arguments.value) match { - case JsSuccess(getRequest, _) => Right(getRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + pushSubscriptionSerializer.deserializePushSubscriptionGetRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) override def doProcess(invocation: InvocationWithContext, session: MailboxSession, request: PushSubscriptionGetRequest): SMono[InvocationWithContext] = request.validateProperties diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetMethod.scala index d267019a05..b62243e4f2 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetMethod.scala @@ -20,7 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_CORE} import org.apache.james.jmap.core.Invocation.{Arguments, MethodName} import org.apache.james.jmap.core.{Invocation, PushSubscriptionSetRequest, PushSubscriptionSetResponse} @@ -29,9 +28,10 @@ import org.apache.james.jmap.routes.SessionSupplier import org.apache.james.lifecycle.api.Startable import org.apache.james.mailbox.MailboxSession import org.apache.james.metrics.api.MetricFactory -import play.api.libs.json.{JsError, JsSuccess} import reactor.core.scala.publisher.SMono +import javax.inject.Inject + class PushSubscriptionSetMethod @Inject()(createPerformer: PushSubscriptionSetCreatePerformer, updatePerformer: PushSubscriptionUpdatePerformer, deletePerformer: PushSubscriptionSetDeletePerformer, @@ -42,10 +42,8 @@ class PushSubscriptionSetMethod @Inject()(createPerformer: PushSubscriptionSetCr override val requiredCapabilities: Set[CapabilityIdentifier] = Set(JMAP_CORE) override def getRequest(invocation: Invocation): Either[Exception, PushSubscriptionSetRequest] = - pushSubscriptionSerializer.deserializePushSubscriptionSetRequest(invocation.arguments.value) match { - case JsSuccess(emailSetRequest, _) => Right(emailSetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + pushSubscriptionSerializer.deserializePushSubscriptionSetRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) override def doProcess(invocation: InvocationWithContext, mailboxSession: MailboxSession, request: PushSubscriptionSetRequest): SMono[InvocationWithContext] = for { diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaGetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaGetMethod.scala index 3cd6c519f4..4c2d07dc7b 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaGetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaGetMethod.scala @@ -22,6 +22,7 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ import org.apache.james.core.Username import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JAMES_SHARES, JMAP_CORE, JMAP_QUOTA} +import org.apache.james.jmap.core.Id.Id import org.apache.james.jmap.core.Invocation.{Arguments, MethodCallId, MethodName} import org.apache.james.jmap.core.{ErrorCode, Invocation, MissingCapabilityException, Properties} import org.apache.james.jmap.json.{QuotaSerializer, ResponseSerializer} @@ -32,11 +33,10 @@ import org.apache.james.mailbox.MailboxSession import org.apache.james.mailbox.model.QuotaRoot import org.apache.james.mailbox.quota.{QuotaManager, UserQuotaRootResolver} import org.apache.james.metrics.api.MetricFactory +import org.apache.james.util.ReactorUtils import org.reactivestreams.Publisher -import play.api.libs.json.{JsError, JsObject, JsSuccess} +import play.api.libs.json.JsObject import reactor.core.scala.publisher.{SFlux, SMono} -import org.apache.james.jmap.core.Id.Id -import org.apache.james.util.ReactorUtils import javax.inject.Inject @@ -72,10 +72,8 @@ class QuotaGetMethod @Inject()(val metricFactory: MetricFactory, } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[Exception, QuotaGetRequest] = - QuotaSerializer.deserializeQuotaGetRequest(invocation.arguments.value) match { - case JsSuccess(quotaGetRequest, _) => Right(quotaGetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + QuotaSerializer.deserializeQuotaGetRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) private def getQuotaGetResponse(quotaGetRequest: QuotaGetRequest, username: Username, capabilities: Set[CapabilityIdentifier]): SFlux[QuotaResponseGetResult] = quotaGetRequest.ids match { diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadChangesMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadChangesMethod.scala index bbb54cb05b..5f55e65fdc 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadChangesMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadChangesMethod.scala @@ -20,7 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_MAIL} import org.apache.james.jmap.core.Invocation.{Arguments, MethodName} import org.apache.james.jmap.core.{ErrorCode, Invocation, UuidState} @@ -29,9 +28,10 @@ import org.apache.james.jmap.mail.{HasMoreChanges, ThreadChangesRequest, ThreadC import org.apache.james.jmap.routes.SessionSupplier import org.apache.james.mailbox.MailboxSession import org.apache.james.metrics.api.MetricFactory -import play.api.libs.json.{JsError, JsSuccess} import reactor.core.scala.publisher.SMono +import javax.inject.Inject + class ThreadChangesMethod @Inject()(val metricFactory: MetricFactory, val sessionSupplier: SessionSupplier) extends MethodRequiringAccountId[ThreadChangesRequest] { override val methodName: MethodName = MethodName("Thread/changes") @@ -60,8 +60,6 @@ class ThreadChangesMethod @Inject()(val metricFactory: MetricFactory, } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, ThreadChangesRequest] = - ThreadSerializer.deserializeChanges(invocation.arguments.value) match { - case JsSuccess(threadGetRequest, _) => Right(threadGetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + ThreadSerializer.deserializeChanges(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) } diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadGetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadGetMethod.scala index 13ea9d333a..85b8362384 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadGetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadGetMethod.scala @@ -20,7 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.Inject import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_CORE, JMAP_MAIL} import org.apache.james.jmap.core.Invocation.{Arguments, MethodName} import org.apache.james.jmap.core.{AccountId, Invocation, UuidState} @@ -31,9 +30,9 @@ import org.apache.james.mailbox.exception.ThreadNotFoundException import org.apache.james.mailbox.model.{ThreadId => JavaThreadId} import org.apache.james.mailbox.{MailboxManager, MailboxSession} import org.apache.james.metrics.api.MetricFactory -import play.api.libs.json.{JsError, JsSuccess} import reactor.core.scala.publisher.{SFlux, SMono} +import javax.inject.Inject import scala.util.Try object ThreadGetResult { @@ -78,10 +77,8 @@ class ThreadGetMethod @Inject()(val metricFactory: MetricFactory, .map(InvocationWithContext(_, invocation.processingContext)) override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, ThreadGetRequest] = - ThreadSerializer.deserialize(invocation.arguments.value) match { - case JsSuccess(threadGetRequest, _) => Right(threadGetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + ThreadSerializer.deserialize(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) private def getThreadResponse(threadGetRequest: ThreadGetRequest, mailboxSession: MailboxSession): SFlux[ThreadGetResult] = diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala index da59b105ff..0cee057042 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala @@ -20,8 +20,6 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ - -import javax.inject.Inject import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_CORE, JMAP_VACATION_RESPONSE} import org.apache.james.jmap.core.Invocation.{Arguments, MethodCallId, MethodName} import org.apache.james.jmap.core.UuidState.INSTANCE @@ -32,11 +30,12 @@ import org.apache.james.jmap.vacation.VacationResponse.UNPARSED_SINGLETON import org.apache.james.jmap.vacation.{UnparsedVacationResponseId, VacationResponse, VacationResponseGetRequest, VacationResponseGetResponse, VacationResponseNotFound} import org.apache.james.mailbox.MailboxSession import org.apache.james.metrics.api.MetricFactory -import org.apache.james.vacation.api.{AccountId => JavaAccountId} -import org.apache.james.vacation.api.VacationService -import play.api.libs.json.{JsError, JsObject, JsSuccess} +import org.apache.james.vacation.api.{VacationService, AccountId => JavaAccountId} +import play.api.libs.json.JsObject import reactor.core.scala.publisher.{SFlux, SMono} +import javax.inject.Inject + object VacationResponseGetResult { def empty: VacationResponseGetResult = VacationResponseGetResult(Set.empty, VacationResponseNotFound(Set.empty)) def merge(result1: VacationResponseGetResult, result2: VacationResponseGetResult): VacationResponseGetResult = result1.merge(result2) @@ -85,10 +84,8 @@ class VacationResponseGetMethod @Inject()(vacationService: VacationService, } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, VacationResponseGetRequest] = - VacationSerializer.deserializeVacationResponseGetRequest(invocation.arguments.value) match { - case JsSuccess(vacationResponseGetRequest, _) => Right(vacationResponseGetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + VacationSerializer.deserializeVacationResponseGetRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) private def handleRequestValidationErrors(exception: Exception, methodCallId: MethodCallId): SMono[Invocation] = exception match { case _: MissingCapabilityException => SMono.just(Invocation.error(ErrorCode.UnknownMethod, methodCallId)) diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala index 81fc9876bb..0eb3e03e1a 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala @@ -20,27 +20,27 @@ package org.apache.james.jmap.method import eu.timepit.refined.auto._ -import javax.inject.{Inject, Named} import org.apache.james.events.Event.EventId import org.apache.james.events.EventBus import org.apache.james.jmap.InjectionKeys import org.apache.james.jmap.api.model.AccountId import org.apache.james.jmap.change.{AccountIdRegistrationKey, StateChangeEvent, VacationResponseTypeName} import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_CORE, JMAP_VACATION_RESPONSE} -import org.apache.james.jmap.core.{Invocation, UuidState} import org.apache.james.jmap.core.Invocation.{Arguments, MethodName} import org.apache.james.jmap.core.SetError.SetErrorDescription +import org.apache.james.jmap.core.{Invocation, UuidState} import org.apache.james.jmap.json.{ResponseSerializer, VacationSerializer} import org.apache.james.jmap.method.VacationResponseSetMethod.VACATION_RESPONSE_PATCH_OBJECT_KEY import org.apache.james.jmap.routes.SessionSupplier import org.apache.james.jmap.vacation.{VacationResponseSetError, VacationResponseSetRequest, VacationResponseSetResponse, VacationResponseUpdateResponse} import org.apache.james.mailbox.MailboxSession import org.apache.james.metrics.api.MetricFactory -import org.apache.james.vacation.api.{VacationPatch, VacationService} -import org.apache.james.vacation.api.{AccountId => VacationAccountId} -import play.api.libs.json.{JsError, JsObject, JsSuccess} +import org.apache.james.vacation.api.{VacationPatch, VacationService, AccountId => VacationAccountId} +import play.api.libs.json.JsObject import reactor.core.scala.publisher.{SFlux, SMono} +import javax.inject.{Inject, Named} + object VacationResponseUpdateResults { def empty(): VacationResponseUpdateResults = VacationResponseUpdateResults(Map(), Map()) @@ -97,10 +97,8 @@ class VacationResponseSetMethod @Inject()(@Named(InjectionKeys.JMAP) eventBus: E } override def getRequest(mailboxSession: MailboxSession, invocation: Invocation): Either[IllegalArgumentException, VacationResponseSetRequest] = - VacationSerializer.deserializeVacationResponseSetRequest(invocation.arguments.value) match { - case JsSuccess(vacationResponseSetRequest, _) => Right(vacationResponseSetRequest) - case errors: JsError => Left(new IllegalArgumentException(ResponseSerializer.serialize(errors).toString)) - } + VacationSerializer.deserializeVacationResponseSetRequest(invocation.arguments.value) + .asEither.left.map(ResponseSerializer.asException) private def update(mailboxSession: MailboxSession, vacationResponseSetRequest: VacationResponseSetRequest): SMono[VacationResponseUpdateResults] = { SFlux.fromIterable(vacationResponseSetRequest.parsePatch() --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org