in server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxSet.scala [104:159]
def validate(mailboxIdFactory: MailboxId.Factory,
serializer: MailboxSerializer,
capabilities: Set[CapabilityIdentifier],
mailboxSession: MailboxSession): Either[PatchUpdateValidationException, ValidatedMailboxPatchObject] = {
val asUpdatedIterable = updates(serializer, capabilities, mailboxIdFactory, mailboxSession)
val maybeParseException: Option[PatchUpdateValidationException] = asUpdatedIterable
.flatMap(x => x match {
case Left(e) => Some(e)
case _ => None
}).headOption
val nameUpdate: Option[NameUpdate] = asUpdatedIterable
.flatMap(x => x match {
case scala.Right(NameUpdate(newName)) => Some(NameUpdate(newName))
case _ => None
}).headOption
val isSubscribedUpdate: Option[IsSubscribedUpdate] = asUpdatedIterable
.flatMap(x => x match {
case scala.Right(IsSubscribedUpdate(isSubscribed)) => Some(IsSubscribedUpdate(isSubscribed))
case _ => None
}).headOption
val rightsReset: Option[SharedWithResetUpdate] = asUpdatedIterable
.flatMap(x => x match {
case scala.Right(SharedWithResetUpdate(rights)) => Some(SharedWithResetUpdate(rights))
case _ => None
}).headOption
val parentIdUpdate: Option[ParentIdUpdate] = asUpdatedIterable
.flatMap(x => x match {
case scala.Right(ParentIdUpdate(newId)) => Some(ParentIdUpdate(newId))
case _ => None
}).headOption
val partialRightsUpdates: Seq[SharedWithPartialUpdate] = asUpdatedIterable.flatMap(x => x match {
case scala.Right(SharedWithPartialUpdate(entryKey, rights)) => Some(SharedWithPartialUpdate(entryKey, rights))
case _ => None
}).toSeq
val bothPartialAndResetRights: Option[PatchUpdateValidationException] = if (rightsReset.isDefined && partialRightsUpdates.nonEmpty) {
Some(InvalidPatchException("Resetting rights and partial updates cannot be done in the same method call"))
} else {
None
}
maybeParseException
.orElse(bothPartialAndResetRights)
.map(e => Left(e))
.getOrElse(scala.Right(ValidatedMailboxPatchObject(
nameUpdate = nameUpdate,
parentIdUpdate = parentIdUpdate,
isSubscribedUpdate = isSubscribedUpdate,
rightsReset = rightsReset,
rightsPartialUpdates = partialRightsUpdates)))
}