JAMES-2214 Add an AttachmentManager exist method - More fluent API - Avoid retrieving full attachment content for existence checks
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/90f3fb78 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/90f3fb78 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/90f3fb78 Branch: refs/heads/master Commit: 90f3fb78a9319dd8cda03edd2452739c993551bf Parents: 264ffd7 Author: benwa <[email protected]> Authored: Mon Nov 13 16:14:46 2017 +0700 Committer: benwa <[email protected]> Committed: Wed Nov 15 18:05:45 2017 +0700 ---------------------------------------------------------------------- .../java/org/apache/james/mailbox/AttachmentManager.java | 2 ++ .../james/mailbox/store/StoreAttachmentManager.java | 5 +++++ .../org/apache/james/jmap/methods/AttachmentChecker.java | 11 ++--------- .../apache/james/jmap/methods/AttachmentCheckerTest.java | 7 +++---- 4 files changed, 12 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/90f3fb78/mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentManager.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentManager.java index fb2bc21..aabc4ed 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentManager.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentManager.java @@ -30,6 +30,8 @@ import org.apache.james.mailbox.model.MessageId; public interface AttachmentManager { + boolean exists(AttachmentId attachmentId, MailboxSession session) throws MailboxException; + Attachment getAttachment(AttachmentId attachmentId, MailboxSession mailboxSession) throws MailboxException, AttachmentNotFoundException; List<Attachment> getAttachments(List<AttachmentId> attachmentIds, MailboxSession mailboxSession) throws MailboxException; http://git-wip-us.apache.org/repos/asf/james-project/blob/90f3fb78/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreAttachmentManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreAttachmentManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreAttachmentManager.java index 6708d67..7552580 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreAttachmentManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreAttachmentManager.java @@ -53,6 +53,11 @@ public class StoreAttachmentManager implements AttachmentManager { } @Override + public boolean exists(AttachmentId attachmentId, MailboxSession session) throws MailboxException { + return userHasAccessToAttachment(attachmentId, session); + } + + @Override public Attachment getAttachment(AttachmentId attachmentId, MailboxSession mailboxSession) throws MailboxException, AttachmentNotFoundException { if (!userHasAccessToAttachment(attachmentId, mailboxSession)) { throw new AttachmentNotFoundException(attachmentId.getId()); http://git-wip-us.apache.org/repos/asf/james-project/blob/90f3fb78/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/AttachmentChecker.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/AttachmentChecker.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/AttachmentChecker.java index 77bbd62..24771b9 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/AttachmentChecker.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/AttachmentChecker.java @@ -28,7 +28,6 @@ import org.apache.james.jmap.model.Attachment; import org.apache.james.jmap.model.BlobId; import org.apache.james.mailbox.AttachmentManager; import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.exception.AttachmentNotFoundException; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.AttachmentId; @@ -53,14 +52,8 @@ public class AttachmentChecker { } private List<BlobId> listAttachmentsNotFound(List<Attachment> attachments, MailboxSession session) throws MailboxException { - ThrowingPredicate<Attachment> notExists = attachment -> { - try { - attachmentManager.getAttachment(getAttachmentId(attachment), session); - return false; - } catch (AttachmentNotFoundException e) { - return true; - } - }; + ThrowingPredicate<Attachment> notExists = + attachment -> !attachmentManager.exists(getAttachmentId(attachment), session); return attachments.stream() .filter(Throwing.predicate(notExists).sneakyThrow()) .map(Attachment::getBlobId) http://git-wip-us.apache.org/repos/asf/james-project/blob/90f3fb78/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/AttachmentCheckerTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/AttachmentCheckerTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/AttachmentCheckerTest.java index dca2a44..c9df8e9 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/AttachmentCheckerTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/AttachmentCheckerTest.java @@ -30,7 +30,6 @@ import org.apache.james.jmap.model.CreationMessage; import org.apache.james.jmap.model.CreationMessageId; import org.apache.james.mailbox.AttachmentManager; import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.exception.AttachmentNotFoundException; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.mock.MockMailboxSession; import org.apache.james.mailbox.model.AttachmentId; @@ -66,7 +65,7 @@ public class AttachmentCheckerTest { public void assertAttachmentsExistShouldThrowWhenUnknownBlobId() throws MailboxException { BlobId unknownBlobId = BlobId.of("unknownBlobId"); AttachmentId unknownAttachmentId = AttachmentId.from(unknownBlobId.getRawValue()); - when(attachmentManager.getAttachment(unknownAttachmentId, session)).thenThrow(new AttachmentNotFoundException(unknownBlobId.getRawValue())); + when(attachmentManager.exists(unknownAttachmentId, session)).thenReturn(false); assertThatThrownBy(() -> sut.assertAttachmentsExist( new ValueWithId.CreationMessageEntry( @@ -86,8 +85,8 @@ public class AttachmentCheckerTest { AttachmentId unknownAttachmentId1 = AttachmentId.from(unknownBlobId1.getRawValue()); AttachmentId unknownAttachmentId2 = AttachmentId.from(unknownBlobId2.getRawValue()); - when(attachmentManager.getAttachment(unknownAttachmentId1, session)).thenThrow(new AttachmentNotFoundException(unknownBlobId1.getRawValue())); - when(attachmentManager.getAttachment(unknownAttachmentId2, session)).thenThrow(new AttachmentNotFoundException(unknownBlobId2.getRawValue())); + when(attachmentManager.exists(unknownAttachmentId1, session)).thenReturn(false); + when(attachmentManager.exists(unknownAttachmentId2, session)).thenReturn(false); assertThatThrownBy(() -> sut.assertAttachmentsExist( new ValueWithId.CreationMessageEntry( --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
