This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch postgresql in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 1dd1b147eef439a19f000c345be41c884d1e4882 Author: hung phan <hp...@linagora.com> AuthorDate: Tue Mar 19 15:53:50 2024 +0700 JAMES-2586 Create AttachmentIdFactory --- .../apache/james/mailbox/AttachmentIdFactory.java | 28 ++++++++++ .../mailbox/StringBackedAttachmentIdFactory.java | 34 +++++++++++++ .../apache/james/mailbox/model/AttachmentId.java | 59 ++-------------------- ...chmentId.java => StringBackedAttachmentId.java} | 18 ++++--- .../mailbox/model/AttachmentMetadataTest.java | 6 +-- .../model/MessageAttachmentMetadataTest.java | 12 ++--- ...Test.java => StringBackedAttachmentIdTest.java} | 14 ++--- .../CassandraMailboxSessionMapperFactory.java | 3 +- .../cassandra/mail/CassandraAttachmentDAOV2.java | 3 +- .../cassandra/mail/CassandraAttachmentMapper.java | 7 ++- .../cassandra/mail/CassandraMessageDAOV3.java | 4 +- .../mail/MessageAttachmentRepresentation.java | 12 ++--- .../cassandra/CassandraMailboxManagerTest.java | 3 +- .../cassandra/mail/AttachmentLoaderTest.java | 12 ++--- .../mail/CassandraAttachmentDAOV2Test.java | 8 ++- .../MessageAttachmentRepresentationByIdTest.java | 10 ++-- .../mailbox/cassandra/mail/utils/GuiceUtils.java | 5 +- .../mailbox/jpa/mail/JPAAttachmentMapper.java | 5 +- .../mailbox/jpa/mail/model/JPAAttachment.java | 4 +- .../model/openjpa/AbstractJPAMailboxMessage.java | 6 +-- .../inmemory/mail/InMemoryAttachmentMapper.java | 3 +- .../OpenSearchListeningMessageSearchIndexTest.java | 4 +- .../opensearch/json/IndexableMessageTest.java | 5 +- .../james/vault/DeletedMessageConverterTest.java | 4 +- .../mailbox/store/StoreAttachmentManagerTest.java | 4 +- .../store/mail/model/AttachmentMapperTest.java | 15 +++--- .../mail/model/impl/SimpleMailboxMessageTest.java | 4 +- .../modules/mailbox/CassandraMailboxModule.java | 3 ++ .../james/modules/mailbox/JPAMailboxModule.java | 3 ++ .../james/modules/mailbox/MemoryMailboxModule.java | 3 ++ .../methods/integration/SetMessagesMethodTest.java | 6 +-- .../james/jmap/draft/methods/BlobManagerImpl.java | 10 ++-- .../org/apache/james/jmap/draft/model/BlobId.java | 4 -- .../jmap/draft/methods/BlobManagerImplTest.java | 7 +-- .../draft/methods/MIMEMessageConverterTest.java | 34 ++++++------- .../message/view/MessageFastViewFactoryTest.java | 3 +- .../message/view/MessageFullViewFactoryTest.java | 8 +-- .../message/view/MessageHeaderViewFactoryTest.java | 4 +- .../view/MessageMetadataViewFactoryTest.java | 4 +- ...mputeMessageFastViewProjectionListenerTest.java | 4 +- .../apache/james/jmap/routes/DownloadRoutes.scala | 8 +-- 41 files changed, 214 insertions(+), 179 deletions(-) diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentIdFactory.java b/mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentIdFactory.java new file mode 100644 index 0000000000..97749e4663 --- /dev/null +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentIdFactory.java @@ -0,0 +1,28 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.mailbox; + +import org.apache.james.mailbox.model.AttachmentId; + +public interface AttachmentIdFactory { + AttachmentId random(); + + AttachmentId from(String id); +} diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/StringBackedAttachmentIdFactory.java b/mailbox/api/src/main/java/org/apache/james/mailbox/StringBackedAttachmentIdFactory.java new file mode 100644 index 0000000000..e7cff8ad48 --- /dev/null +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/StringBackedAttachmentIdFactory.java @@ -0,0 +1,34 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.mailbox; + +import org.apache.james.mailbox.model.StringBackedAttachmentId; + +public class StringBackedAttachmentIdFactory implements AttachmentIdFactory { + @Override + public StringBackedAttachmentId random() { + return StringBackedAttachmentId.random(); + } + + @Override + public StringBackedAttachmentId from(String id) { + return StringBackedAttachmentId.from(id); + } +} diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java index e7950a3120..4cf32d93d4 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java @@ -16,64 +16,13 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ + package org.apache.james.mailbox.model; -import java.nio.charset.StandardCharsets; import java.util.UUID; -import org.apache.commons.text.RandomStringGenerator; - -import com.google.common.base.MoreObjects; -import com.google.common.base.Objects; -import com.google.common.base.Preconditions; - -public class AttachmentId { - - public static final RandomStringGenerator RANDOM_STRING_GENERATOR = new RandomStringGenerator.Builder().withinRange('a', 'z').build(); - - public static AttachmentId random() { - return new AttachmentId(RANDOM_STRING_GENERATOR.generate(20)); - } - - public static AttachmentId from(String id) { - Preconditions.checkNotNull(id); - Preconditions.checkArgument(!id.isEmpty()); - return new AttachmentId(id); - } - - private final String id; - - private AttachmentId(String id) { - this.id = id; - } - - public String getId() { - return id; - } - - public UUID asUUID() { - return UUID.nameUUIDFromBytes(id.getBytes(StandardCharsets.UTF_8)); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof AttachmentId) { - AttachmentId other = (AttachmentId) obj; - return Objects.equal(id, other.id); - } - return false; - } - - @Override - public int hashCode() { - return Objects.hashCode(id); - } +public interface AttachmentId { + String getId(); - @Override - public String toString() { - return MoreObjects - .toStringHelper(this) - .add("id", id) - .toString(); - } + UUID asUUID(); } diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/StringBackedAttachmentId.java similarity index 81% copy from mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java copy to mailbox/api/src/main/java/org/apache/james/mailbox/model/StringBackedAttachmentId.java index e7950a3120..1b204253ff 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/StringBackedAttachmentId.java @@ -27,38 +27,40 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.base.Preconditions; -public class AttachmentId { +public class StringBackedAttachmentId implements AttachmentId { public static final RandomStringGenerator RANDOM_STRING_GENERATOR = new RandomStringGenerator.Builder().withinRange('a', 'z').build(); - public static AttachmentId random() { - return new AttachmentId(RANDOM_STRING_GENERATOR.generate(20)); + public static StringBackedAttachmentId random() { + return new StringBackedAttachmentId(RANDOM_STRING_GENERATOR.generate(20)); } - public static AttachmentId from(String id) { + public static StringBackedAttachmentId from(String id) { Preconditions.checkNotNull(id); Preconditions.checkArgument(!id.isEmpty()); - return new AttachmentId(id); + return new StringBackedAttachmentId(id); } private final String id; - private AttachmentId(String id) { + protected StringBackedAttachmentId(String id) { this.id = id; } + @Override public String getId() { return id; } + @Override public UUID asUUID() { return UUID.nameUUIDFromBytes(id.getBytes(StandardCharsets.UTF_8)); } @Override public boolean equals(Object obj) { - if (obj instanceof AttachmentId) { - AttachmentId other = (AttachmentId) obj; + if (obj instanceof StringBackedAttachmentId) { + StringBackedAttachmentId other = (StringBackedAttachmentId) obj; return Objects.equal(id, other.id); } return false; diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentMetadataTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentMetadataTest.java index f75bc1bdb2..67911aced6 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentMetadataTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentMetadataTest.java @@ -56,7 +56,7 @@ class AttachmentMetadataTest { @Test void buildShouldThrowWhenSizeIsNotProvided() { assertThatThrownBy(() -> AttachmentMetadata.builder() - .attachmentId(AttachmentId.random()) + .attachmentId(StringBackedAttachmentId.random()) .type("TYPE") .build()) .isInstanceOf(IllegalStateException.class); @@ -65,7 +65,7 @@ class AttachmentMetadataTest { @Test void buildShouldThrowWhenTypeIsNotProvided() { assertThatThrownBy(() -> AttachmentMetadata.builder() - .attachmentId(AttachmentId.random()) + .attachmentId(StringBackedAttachmentId.random()) .size(36) .build()) .isInstanceOf(IllegalStateException.class); @@ -74,7 +74,7 @@ class AttachmentMetadataTest { @Test void sizeShouldThrowOnNegativeValue() { assertThatThrownBy(() -> AttachmentMetadata.builder() - .attachmentId(AttachmentId.random()) + .attachmentId(StringBackedAttachmentId.random()) .size(-3)) .isInstanceOf(IllegalArgumentException.class); } diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageAttachmentMetadataTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageAttachmentMetadataTest.java index a6790b5756..a01490b1ab 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageAttachmentMetadataTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageAttachmentMetadataTest.java @@ -45,7 +45,7 @@ class MessageAttachmentMetadataTest { @Test void buildShouldWorkWhenMandatoryAttributesAreGiven() { AttachmentMetadata attachment = AttachmentMetadata.builder() - .attachmentId(AttachmentId.from("1")) + .attachmentId(StringBackedAttachmentId.from("1")) .size(36) .type("type") .messageId(TestMessageId.of(23)) @@ -62,7 +62,7 @@ class MessageAttachmentMetadataTest { @Test void buildShouldAcceptIsInlineAndNoCid() { AttachmentMetadata attachment = AttachmentMetadata.builder() - .attachmentId(AttachmentId.from("1")) + .attachmentId(StringBackedAttachmentId.from("1")) .size(36) .type("type") .messageId(TestMessageId.of(23)) @@ -79,7 +79,7 @@ class MessageAttachmentMetadataTest { @Test void buildShouldSetAttributesWhenAllAreGiven() { AttachmentMetadata attachment = AttachmentMetadata.builder() - .attachmentId(AttachmentId.from("1")) + .attachmentId(StringBackedAttachmentId.from("1")) .size(36) .type("type") .messageId(TestMessageId.of(23)) @@ -99,7 +99,7 @@ class MessageAttachmentMetadataTest { @Test void isInlinedWithCidShouldReturnTrueWhenIsInlineAndHasCid() throws Exception { AttachmentMetadata attachment = AttachmentMetadata.builder() - .attachmentId(AttachmentId.from("1")) + .attachmentId(StringBackedAttachmentId.from("1")) .size(36) .type("type") .messageId(TestMessageId.of(23)) @@ -118,7 +118,7 @@ class MessageAttachmentMetadataTest { @Test void isInlinedWithCidShouldReturnFalseWhenIsNotInline() throws Exception { AttachmentMetadata attachment = AttachmentMetadata.builder() - .attachmentId(AttachmentId.from("1")) + .attachmentId(StringBackedAttachmentId.from("1")) .size(36) .type("type") .messageId(TestMessageId.of(23)) @@ -137,7 +137,7 @@ class MessageAttachmentMetadataTest { @Test void isInlinedWithCidShouldReturnFalseWhenIsInlineButNoCid() throws Exception { AttachmentMetadata attachment = AttachmentMetadata.builder() - .attachmentId(AttachmentId.from("1")) + .attachmentId(StringBackedAttachmentId.from("1")) .size(36) .type("type") .messageId(TestMessageId.of(23)) diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/StringBackedAttachmentIdTest.java similarity index 77% rename from mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java rename to mailbox/api/src/test/java/org/apache/james/mailbox/model/StringBackedAttachmentIdTest.java index 2388447b2c..7b007613c5 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/StringBackedAttachmentIdTest.java @@ -26,35 +26,35 @@ import java.util.UUID; import org.junit.jupiter.api.Test; -class AttachmentIdTest { +class StringBackedAttachmentIdTest { @Test void randomShouldGenerateDifferentIds() { - AttachmentId attachmentId = AttachmentId.random(); - AttachmentId attachmentId2 = AttachmentId.random(); + StringBackedAttachmentId attachmentId = StringBackedAttachmentId.random(); + StringBackedAttachmentId attachmentId2 = StringBackedAttachmentId.random(); assertThat(attachmentId.getId()).isNotEqualTo(attachmentId2.getId()); } @Test void fromShouldThrowWhenIdIsNull() { String value = null; - assertThatThrownBy(() -> AttachmentId.from(value)).isInstanceOf(NullPointerException.class); + assertThatThrownBy(() -> StringBackedAttachmentId.from(value)).isInstanceOf(NullPointerException.class); } @Test void fromShouldThrowWhenIdIsEmpty() { - assertThatThrownBy(() -> AttachmentId.from("")).isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> StringBackedAttachmentId.from("")).isInstanceOf(IllegalArgumentException.class); } @Test void fromStringShouldWork() { String expectedId = "f07e5a815613c5abeddc4b682247a4c42d8a95df"; - AttachmentId attachmentId = AttachmentId.from(expectedId); + StringBackedAttachmentId attachmentId = StringBackedAttachmentId.from(expectedId); assertThat(attachmentId.getId()).isEqualTo(expectedId); } @Test void asUUIDShouldReturnAValidUUID() { - AttachmentId attachmentId = AttachmentId.from("magic"); + StringBackedAttachmentId attachmentId = StringBackedAttachmentId.from("magic"); assertThat(attachmentId.asUUID()) .isEqualTo(UUID.fromString("2f3a4fcc-ca64-36e3-9bcf-33e92dd93135")); diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java index 585b640825..f2c3b7b85b 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java @@ -26,6 +26,7 @@ import javax.inject.Inject; import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration; import org.apache.james.blob.api.BlobStore; import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.StringBackedAttachmentIdFactory; import org.apache.james.mailbox.cassandra.mail.ACLMapper; import org.apache.james.mailbox.cassandra.mail.CassandraAnnotationMapper; import org.apache.james.mailbox.cassandra.mail.CassandraApplicableFlagDAO; @@ -131,7 +132,7 @@ public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFa deletedMessageDAO); this.cassandraMailboxMapper = new CassandraMailboxMapper(mailboxDAO, mailboxPathV3DAO, userMailboxRightsDAO, aclMapper, cassandraConfiguration); this.cassandraSubscriptionMapper = new CassandraSubscriptionMapper(session); - this.cassandraAttachmentMapper = new CassandraAttachmentMapper(attachmentDAOV2, blobStore); + this.cassandraAttachmentMapper = new CassandraAttachmentMapper(attachmentDAOV2, blobStore, new StringBackedAttachmentIdFactory()); this.cassandraMessageMapper = new CassandraMessageMapper( uidProvider, modSeqProvider, diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java index c5e926e4a5..7adaa752db 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java @@ -44,6 +44,7 @@ import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.ContentType; import org.apache.james.mailbox.model.MessageId; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.cql.PreparedStatement; @@ -132,7 +133,7 @@ public class CassandraAttachmentDAOV2 { return new DAOAttachment( messageId, - AttachmentId.from(row.getString(ID)), + StringBackedAttachmentId.from(row.getString(ID)), blobIfFactory.from(row.getString(BLOB_ID)), ContentType.of(row.getString(TYPE)), row.getLong(SIZE)); diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java index c78947bf02..4e7c99d5f1 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java @@ -31,6 +31,7 @@ import java.util.List; import javax.inject.Inject; import org.apache.james.blob.api.BlobStore; +import org.apache.james.mailbox.AttachmentIdFactory; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2.DAOAttachment; import org.apache.james.mailbox.exception.AttachmentNotFoundException; import org.apache.james.mailbox.model.AttachmentId; @@ -55,11 +56,13 @@ public class CassandraAttachmentMapper implements AttachmentMapper { private final CassandraAttachmentDAOV2 attachmentDAOV2; private final BlobStore blobStore; + private final AttachmentIdFactory attachmentIdFactory; @Inject - public CassandraAttachmentMapper(CassandraAttachmentDAOV2 attachmentDAOV2, BlobStore blobStore) { + public CassandraAttachmentMapper(CassandraAttachmentDAOV2 attachmentDAOV2, BlobStore blobStore, AttachmentIdFactory attachmentIdFactory) { this.attachmentDAOV2 = attachmentDAOV2; this.blobStore = blobStore; + this.attachmentIdFactory = attachmentIdFactory; } @Override @@ -127,7 +130,7 @@ public class CassandraAttachmentMapper implements AttachmentMapper { private Mono<MessageAttachmentMetadata> storeAttachmentAsync(ParsedAttachment parsedAttachment, MessageId ownerMessageId) { try { - AttachmentId attachmentId = AttachmentId.random(); + AttachmentId attachmentId = attachmentIdFactory.random(); ByteSource content = parsedAttachment.getContent(); long size = content.size(); return Mono.from(blobStore.save(blobStore.getDefaultBucketName(), content, LOW_COST)) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java index fe45b058e8..91f38b9fc7 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java @@ -70,13 +70,13 @@ import org.apache.james.blob.api.BlobId; import org.apache.james.blob.api.BlobStore; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.Attachments; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.ByteContent; import org.apache.james.mailbox.model.Cid; import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData; import org.apache.james.mailbox.model.Content; import org.apache.james.mailbox.model.HeaderAndBodyByteContent; import org.apache.james.mailbox.model.MessageAttachmentMetadata; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.store.mail.MessageMapper.FetchType; import org.apache.james.mailbox.store.mail.model.MailboxMessage; import org.apache.james.mailbox.store.mail.model.impl.Properties; @@ -380,7 +380,7 @@ public class CassandraMessageDAOV3 { private MessageAttachmentRepresentation messageAttachmentByIdFrom(UdtValue udtValue) { return MessageAttachmentRepresentation.builder() - .attachmentId(AttachmentId.from(udtValue.get(Attachments.ID, TypeCodecs.TEXT))) + .attachmentId(StringBackedAttachmentId.from(udtValue.get(Attachments.ID, TypeCodecs.TEXT))) .name(udtValue.get(Attachments.NAME, TypeCodecs.TEXT)) .cid(cidParser.parse(udtValue.get(Attachments.CID, TypeCodecs.TEXT))) .isInline(udtValue.getBoolean(Attachments.IS_INLINE)) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentation.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentation.java index 838ac5609b..b06703d40d 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentation.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentation.java @@ -21,8 +21,8 @@ package org.apache.james.mailbox.cassandra.mail; import java.util.Optional; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.Cid; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.MoreObjects; @@ -37,7 +37,7 @@ public class MessageAttachmentRepresentation { public static class Builder { - private AttachmentId attachmentId; + private StringBackedAttachmentId attachmentId; private Optional<String> name; private Optional<Cid> cid; private Optional<Boolean> isInline; @@ -48,7 +48,7 @@ public class MessageAttachmentRepresentation { isInline = Optional.empty(); } - public Builder attachmentId(AttachmentId attachmentId) { + public Builder attachmentId(StringBackedAttachmentId attachmentId) { Preconditions.checkArgument(attachmentId != null); this.attachmentId = attachmentId; return this; @@ -83,20 +83,20 @@ public class MessageAttachmentRepresentation { } } - private final AttachmentId attachmentId; + private final StringBackedAttachmentId attachmentId; private final Optional<String> name; private final Optional<Cid> cid; private final boolean isInline; @VisibleForTesting - MessageAttachmentRepresentation(AttachmentId attachmentId, Optional<String> name, Optional<Cid> cid, boolean isInline) { + MessageAttachmentRepresentation(StringBackedAttachmentId attachmentId, Optional<String> name, Optional<Cid> cid, boolean isInline) { this.attachmentId = attachmentId; this.name = name; this.cid = cid; this.isInline = isInline; } - public AttachmentId getAttachmentId() { + public StringBackedAttachmentId getAttachmentId() { return attachmentId; } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java index a9279c4489..81d18b7ad9 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java @@ -33,8 +33,6 @@ import java.util.Optional; import java.util.Set; import java.util.stream.IntStream; -import jakarta.mail.Flags; - import org.apache.commons.lang3.tuple.Pair; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.CassandraClusterExtension; @@ -103,6 +101,7 @@ import org.junit.jupiter.api.extension.RegisterExtension; import com.github.fge.lambdas.Throwing; import com.google.common.collect.ImmutableList; +import jakarta.mail.Flags; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoaderTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoaderTest.java index b122a0df85..7d15c11ac8 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoaderTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoaderTest.java @@ -26,10 +26,10 @@ import java.util.Collection; import java.util.Optional; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.Cid; import org.apache.james.mailbox.model.MessageAttachmentMetadata; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -51,7 +51,7 @@ class AttachmentLoaderTest { @Test void getAttachmentsShouldWorkWithDuplicatedAttachments() { - AttachmentId attachmentId = AttachmentId.from("1"); + StringBackedAttachmentId attachmentId = StringBackedAttachmentId.from("1"); AttachmentMetadata attachment = AttachmentMetadata.builder() .attachmentId(attachmentId) @@ -78,7 +78,7 @@ class AttachmentLoaderTest { @Test void getAttachmentsShouldWorkWithDuplicatedIds() { - AttachmentId attachmentId = AttachmentId.from("1"); + StringBackedAttachmentId attachmentId = StringBackedAttachmentId.from("1"); AttachmentMetadata attachment = AttachmentMetadata.builder() .attachmentId(attachmentId) @@ -107,8 +107,8 @@ class AttachmentLoaderTest { @Test void getAttachmentsShouldReturnMultipleAttachmentWhenSeveralAttachmentsRepresentation() { - AttachmentId attachmentId1 = AttachmentId.from("1"); - AttachmentId attachmentId2 = AttachmentId.from("2"); + StringBackedAttachmentId attachmentId1 = StringBackedAttachmentId.from("1"); + StringBackedAttachmentId attachmentId2 = StringBackedAttachmentId.from("2"); AttachmentMetadata attachment1 = AttachmentMetadata.builder() .attachmentId(attachmentId1) @@ -145,7 +145,7 @@ class AttachmentLoaderTest { @Test void getAttachmentsShouldReturnEmptyByDefault() { - AttachmentId attachmentId = AttachmentId.from("1"); + StringBackedAttachmentId attachmentId = StringBackedAttachmentId.from("1"); AttachmentMetadata attachment = AttachmentMetadata.builder() .attachmentId(attachmentId) diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java index 4833582bb0..f5e9d6cb8f 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java @@ -31,19 +31,17 @@ import org.apache.james.blob.api.HashBlobId; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2.DAOAttachment; import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import com.datastax.oss.driver.api.core.uuid.Uuids; -import reactor.core.publisher.Mono; - class CassandraAttachmentDAOV2Test { - private static final AttachmentId ATTACHMENT_ID = AttachmentId.from("id1"); - private static final AttachmentId ATTACHMENT_ID_2 = AttachmentId.from("id2"); + private static final StringBackedAttachmentId ATTACHMENT_ID = StringBackedAttachmentId.from("id1"); + private static final StringBackedAttachmentId ATTACHMENT_ID_2 = StringBackedAttachmentId.from("id2"); private static final HashBlobId.Factory BLOB_ID_FACTORY = new HashBlobId.Factory(); @RegisterExtension diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentationByIdTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentationByIdTest.java index 254fc84ad4..d2c7a35c0f 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentationByIdTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentationByIdTest.java @@ -24,9 +24,9 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.util.Optional; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.Cid; import org.apache.james.mailbox.model.MessageAttachmentMetadata; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.junit.jupiter.api.Test; @@ -46,7 +46,7 @@ class MessageAttachmentRepresentationByIdTest { @Test void buildShouldWorkWhenMandatoryAttributesAreGiven() { - AttachmentId attachmentId = AttachmentId.from("1"); + StringBackedAttachmentId attachmentId = StringBackedAttachmentId.from("1"); MessageAttachmentRepresentation expectedMessageAttachmentRepresentation = new MessageAttachmentRepresentation(attachmentId, Optional.empty(), Optional.empty(), false); MessageAttachmentRepresentation messageAttachmentRepresentation = MessageAttachmentRepresentation.builder() @@ -58,7 +58,7 @@ class MessageAttachmentRepresentationByIdTest { @Test void buildShouldSetIsInlineDefaultValueWhenNotGiven() { - AttachmentId attachmentId = AttachmentId.from("1"); + StringBackedAttachmentId attachmentId = StringBackedAttachmentId.from("1"); MessageAttachmentRepresentation messageAttachmentRepresentation = MessageAttachmentRepresentation.builder() .attachmentId(attachmentId) @@ -69,7 +69,7 @@ class MessageAttachmentRepresentationByIdTest { @Test void buildShouldAcceptInlineAndWithoutCid() { - AttachmentId attachmentId = AttachmentId.from("1"); + StringBackedAttachmentId attachmentId = StringBackedAttachmentId.from("1"); MessageAttachmentRepresentation expectedMessageAttachmentRepresentation = new MessageAttachmentRepresentation(attachmentId, Optional.empty(), Optional.empty(), true); MessageAttachmentRepresentation messageAttachmentRepresentation = MessageAttachmentRepresentation.builder() @@ -82,7 +82,7 @@ class MessageAttachmentRepresentationByIdTest { @Test void buildShouldSetAttributesWhenAllAreGiven() { - AttachmentId attachmentId = AttachmentId.from("1"); + StringBackedAttachmentId attachmentId = StringBackedAttachmentId.from("1"); MessageAttachmentRepresentation expectedMessageAttachmentRepresentation = new MessageAttachmentRepresentation(attachmentId, Optional.of("name"), Optional.of(Cid.from("cid")), true); MessageAttachmentRepresentation messageAttachmentRepresentation = MessageAttachmentRepresentation.builder() diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java index 4d4a09b192..b26d0ebdf0 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java @@ -37,6 +37,8 @@ import org.apache.james.eventsourcing.eventstore.dto.EventDTO; import org.apache.james.eventsourcing.eventstore.dto.EventDTOModule; import org.apache.james.json.DTO; import org.apache.james.json.DTOModule; +import org.apache.james.mailbox.AttachmentIdFactory; +import org.apache.james.mailbox.StringBackedAttachmentIdFactory; import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.cassandra.mail.ACLMapper; import org.apache.james.mailbox.cassandra.mail.CassandraACLMapper; @@ -96,6 +98,7 @@ public class GuiceUtils { binder -> binder.bind(EventStore.class).to(CassandraEventStore.class), binder -> binder.bind(CassandraTypesProvider.class).toInstance(typesProvider), binder -> binder.bind(CassandraConfiguration.class).toInstance(configuration), - binder -> binder.bind(Clock.class).toInstance(Clock.systemUTC())); + binder -> binder.bind(Clock.class).toInstance(Clock.systemUTC()), + binder -> binder.bind(AttachmentIdFactory.class).to(StringBackedAttachmentIdFactory.class)); } } diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAttachmentMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAttachmentMapper.java index a2bff6a77e..41d4f84e4b 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAttachmentMapper.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAttachmentMapper.java @@ -37,6 +37,7 @@ import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.MessageAttachmentMetadata; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.ParsedAttachment; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.store.mail.AttachmentMapper; import com.github.fge.lambdas.Throwing; @@ -108,9 +109,9 @@ public class JPAAttachmentMapper extends JPATransactionalMapper implements Attac try { try (InputStream stream = parsedAttachment.getContent().openStream()) { byte[] bytes = IOUtils.toByteArray(stream); - JPAAttachment persistedAttachment = new JPAAttachment(parsedAttachment.asMessageAttachment(AttachmentId.random(), ownerMessageId), bytes); + JPAAttachment persistedAttachment = new JPAAttachment(parsedAttachment.asMessageAttachment(StringBackedAttachmentId.random(), ownerMessageId), bytes); getEntityManager().persist(persistedAttachment); - AttachmentId attachmentId = AttachmentId.from(persistedAttachment.getAttachmentId()); + AttachmentId attachmentId = StringBackedAttachmentId.from(persistedAttachment.getAttachmentId()); return parsedAttachment.asMessageAttachment(attachmentId, bytes.length, ownerMessageId); } } catch (IOException e) { diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAAttachment.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAAttachment.java index 60e3e9ad4b..272f386bac 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAAttachment.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAAttachment.java @@ -35,10 +35,10 @@ import javax.persistence.Lob; import javax.persistence.NamedQuery; import javax.persistence.Table; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.Cid; import org.apache.james.mailbox.model.MessageAttachmentMetadata; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.store.mail.model.DefaultMessageId; @Entity(name = "Attachment") @@ -102,7 +102,7 @@ public class JPAAttachment { public AttachmentMetadata toAttachmentMetadata() { return AttachmentMetadata.builder() - .attachmentId(AttachmentId.from(attachmentId)) + .attachmentId(StringBackedAttachmentId.from(attachmentId)) .messageId(new DefaultMessageId()) .type(type) .size(size) diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java index fac5ffc4b3..933ad1c998 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java @@ -50,12 +50,12 @@ import org.apache.james.mailbox.jpa.JPAId; import org.apache.james.mailbox.jpa.mail.model.JPAMailbox; import org.apache.james.mailbox.jpa.mail.model.JPAProperty; import org.apache.james.mailbox.jpa.mail.model.JPAUserFlag; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData; import org.apache.james.mailbox.model.MessageAttachmentMetadata; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.ParsedAttachment; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.model.ThreadId; import org.apache.james.mailbox.store.mail.model.DefaultMessageId; import org.apache.james.mailbox.store.mail.model.DelegatingMailboxMessage; @@ -574,7 +574,7 @@ public abstract class AbstractJPAMailboxMessage implements MailboxMessage { } } - private AttachmentId generateFixedAttachmentId(int position) { - return AttachmentId.from(getMailboxId().serialize() + "-" + getUid().asLong() + "-" + position); + private StringBackedAttachmentId generateFixedAttachmentId(int position) { + return StringBackedAttachmentId.from(getMailboxId().serialize() + "-" + getUid().asLong() + "-" + position); } } diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAttachmentMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAttachmentMapper.java index a8e77f000c..433b5324dd 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAttachmentMapper.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAttachmentMapper.java @@ -34,6 +34,7 @@ import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.MessageAttachmentMetadata; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.ParsedAttachment; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.store.mail.AttachmentMapper; import com.github.fge.lambdas.Throwing; @@ -88,7 +89,7 @@ public class InMemoryAttachmentMapper implements AttachmentMapper { } private MessageAttachmentMetadata storeAttachmentForMessage(MessageId ownerMessageId, ParsedAttachment parsedAttachment) throws MailboxException { - AttachmentId attachmentId = AttachmentId.random(); + AttachmentId attachmentId = StringBackedAttachmentId.random(); try { try (InputStream stream = parsedAttachment.getContent().openStream()) { byte[] bytes = IOUtils.toByteArray(stream); diff --git a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndexTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndexTest.java index 0bdd95383b..497fc158d6 100644 --- a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndexTest.java +++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndexTest.java @@ -55,7 +55,6 @@ import org.apache.james.mailbox.extractor.TextExtractor; import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; import org.apache.james.mailbox.inmemory.InMemoryMessageId; import org.apache.james.mailbox.manager.ManagerTestProvisionner; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.ByteContent; import org.apache.james.mailbox.model.ContentType; @@ -65,6 +64,7 @@ import org.apache.james.mailbox.model.MessageAttachmentMetadata; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.MessageMetaData; import org.apache.james.mailbox.model.SearchQuery; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.model.TestId; import org.apache.james.mailbox.model.TestMessageId; import org.apache.james.mailbox.model.ThreadId; @@ -153,7 +153,7 @@ class OpenSearchListeningMessageSearchIndexTest { static final MessageAttachmentMetadata MESSAGE_ATTACHMENT = MessageAttachmentMetadata.builder() .attachment(AttachmentMetadata.builder() .messageId(MESSAGE_ID_3) - .attachmentId(AttachmentId.from("1")) + .attachmentId(StringBackedAttachmentId.from("1")) .type("type") .size(523) .build()) diff --git a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/IndexableMessageTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/IndexableMessageTest.java index 08e6258aff..a04f181073 100644 --- a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/IndexableMessageTest.java +++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/IndexableMessageTest.java @@ -37,10 +37,10 @@ import org.apache.james.mailbox.ModSeq; import org.apache.james.mailbox.extractor.ParsedContent; import org.apache.james.mailbox.extractor.TextExtractor; import org.apache.james.mailbox.inmemory.InMemoryMessageId; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.MessageAttachmentMetadata; import org.apache.james.mailbox.model.MessageId; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.model.TestId; import org.apache.james.mailbox.model.ThreadId; import org.apache.james.mailbox.opensearch.IndexAttachments; @@ -57,7 +57,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import reactor.core.publisher.Mono; @@ -100,7 +99,7 @@ class IndexableMessageTest { .thenReturn(ImmutableList.of(MessageAttachmentMetadata.builder() .attachment(AttachmentMetadata.builder() .messageId(messageId) - .attachmentId(AttachmentId.from("1")) + .attachmentId(StringBackedAttachmentId.from("1")) .type("text/plain") .size(36) .build()) diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageConverterTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageConverterTest.java index 3274de962f..41af292c2e 100644 --- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageConverterTest.java +++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageConverterTest.java @@ -41,10 +41,10 @@ import java.util.List; import org.apache.james.core.MaybeSender; import org.apache.james.core.Username; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MessageAttachmentMetadata; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.store.MessageBuilder; import org.apache.james.mailbox.store.mail.model.MailboxMessage; import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage; @@ -73,7 +73,7 @@ class DeletedMessageConverterTest { private static final Collection<MessageAttachmentMetadata> NO_ATTACHMENT = ImmutableList.of(); private static final Collection<MessageAttachmentMetadata> ATTACHMENTS = ImmutableList.of(MessageAttachmentMetadata.builder() .attachment(AttachmentMetadata.builder() - .attachmentId(AttachmentId.from("1")) + .attachmentId(StringBackedAttachmentId.from("1")) .messageId(DeletedMessageFixture.MESSAGE_ID) .type("type") .size(48) diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreAttachmentManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreAttachmentManagerTest.java index 8677f9cf34..45f14f5742 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreAttachmentManagerTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreAttachmentManagerTest.java @@ -27,9 +27,9 @@ import static org.mockito.Mockito.when; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.exception.AttachmentNotFoundException; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.MessageId; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.model.TestMessageId; import org.apache.james.mailbox.store.mail.AttachmentMapper; import org.apache.james.mailbox.store.mail.AttachmentMapperFactory; @@ -42,7 +42,7 @@ import com.google.common.collect.ImmutableSet; class StoreAttachmentManagerTest { static final TestMessageId MESSAGE_ID = TestMessageId.of(1L); static final ImmutableList<MessageId> MESSAGE_IDS = ImmutableList.of(MESSAGE_ID); - static final AttachmentId ATTACHMENT_ID = AttachmentId.from("1"); + static final StringBackedAttachmentId ATTACHMENT_ID = StringBackedAttachmentId.from("1"); static final AttachmentMetadata ATTACHMENT = AttachmentMetadata.builder() .attachmentId(ATTACHMENT_ID) .messageId(MESSAGE_ID) diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AttachmentMapperTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AttachmentMapperTest.java index a866a2e516..4adafca733 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AttachmentMapperTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AttachmentMapperTest.java @@ -19,31 +19,30 @@ package org.apache.james.mailbox.store.mail.model; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; import java.util.List; import org.apache.james.core.Username; import org.apache.james.mailbox.exception.AttachmentNotFoundException; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.ContentType; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.ParsedAttachment; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.store.mail.AttachmentMapper; - -import com.google.common.collect.ImmutableList; -import com.google.common.io.ByteSource; - import org.assertj.core.api.SoftAssertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import com.google.common.collect.ImmutableList; +import com.google.common.io.ByteSource; public abstract class AttachmentMapperTest { - private static final AttachmentId UNKNOWN_ATTACHMENT_ID = AttachmentId.from("unknown"); + private static final StringBackedAttachmentId UNKNOWN_ATTACHMENT_ID = StringBackedAttachmentId.from("unknown"); private static final Username OWNER = Username.of("owner"); private static final Username ADDITIONAL_OWNER = Username.of("additionalOwner"); diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessageTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessageTest.java index d6518c14f0..eb57fbb69b 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessageTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessageTest.java @@ -37,11 +37,11 @@ import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.james.mailbox.FlagsBuilder; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.ModSeq; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.ByteContent; import org.apache.james.mailbox.model.MessageAttachmentMetadata; import org.apache.james.mailbox.model.MessageId; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.model.TestId; import org.apache.james.mailbox.model.TestMessageId; import org.apache.james.mailbox.model.ThreadId; @@ -190,7 +190,7 @@ class SimpleMailboxMessageTest { MessageUid uid = MessageUid.of(45); MessageAttachmentMetadata messageAttachment = MessageAttachmentMetadata.builder() .attachment(AttachmentMetadata.builder() - .attachmentId(AttachmentId.from("1")) + .attachmentId(StringBackedAttachmentId.from("1")) .messageId(MESSAGE_ID) .type("type") .size(485) diff --git a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java index ef018149f7..6a04edc670 100644 --- a/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java +++ b/server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java @@ -52,6 +52,7 @@ import org.apache.james.jmap.cassandra.change.CassandraStateFactory; import org.apache.james.jmap.cassandra.change.EmailChangeRepositoryDAO; import org.apache.james.jmap.cassandra.change.MailboxChangeRepositoryDAO; import org.apache.james.mailbox.AttachmentContentLoader; +import org.apache.james.mailbox.AttachmentIdFactory; import org.apache.james.mailbox.AttachmentManager; import org.apache.james.mailbox.Authenticator; import org.apache.james.mailbox.MailboxManager; @@ -59,6 +60,7 @@ import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.RightManager; import org.apache.james.mailbox.SessionProvider; +import org.apache.james.mailbox.StringBackedAttachmentIdFactory; import org.apache.james.mailbox.SubscriptionManager; import org.apache.james.mailbox.cassandra.CassandraMailboxManager; import org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory; @@ -184,6 +186,7 @@ public class CassandraMailboxModule extends AbstractModule { bind(MessageMapperFactory.class).to(CassandraMailboxSessionMapperFactory.class); bind(MailboxMapperFactory.class).to(CassandraMailboxSessionMapperFactory.class); + bind(AttachmentIdFactory.class).to(StringBackedAttachmentIdFactory.class); bind(AttachmentMapperFactory.class).to(CassandraMailboxSessionMapperFactory.class); bind(MailboxSessionMapperFactory.class).to(CassandraMailboxSessionMapperFactory.class); bind(SubscriptionMapperFactory.class).to(CassandraMailboxSessionMapperFactory.class); diff --git a/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java b/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java index 230c13e4a3..594d15e4cf 100644 --- a/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java +++ b/server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java @@ -30,11 +30,13 @@ import org.apache.james.adapter.mailbox.UserRepositoryAuthenticator; import org.apache.james.adapter.mailbox.UserRepositoryAuthorizator; import org.apache.james.events.EventListener; import org.apache.james.mailbox.AttachmentContentLoader; +import org.apache.james.mailbox.AttachmentIdFactory; import org.apache.james.mailbox.Authenticator; import org.apache.james.mailbox.Authorizator; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.SessionProvider; +import org.apache.james.mailbox.StringBackedAttachmentIdFactory; import org.apache.james.mailbox.SubscriptionManager; import org.apache.james.mailbox.acl.MailboxACLResolver; import org.apache.james.mailbox.acl.UnionMailboxACLResolver; @@ -116,6 +118,7 @@ public class JPAMailboxModule extends AbstractModule { bind(Authorizator.class).to(UserRepositoryAuthorizator.class); bind(MailboxId.Factory.class).to(JPAId.Factory.class); bind(MailboxACLResolver.class).to(UnionMailboxACLResolver.class); + bind(AttachmentIdFactory.class).to(StringBackedAttachmentIdFactory.class); bind(AttachmentContentLoader.class).to(JPAAttachmentContentLoader.class); bind(ReIndexer.class).to(ReIndexerImpl.class); diff --git a/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java b/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java index 922f1a8454..6278e704fe 100644 --- a/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java +++ b/server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java @@ -37,6 +37,7 @@ import org.apache.james.jmap.api.change.State; import org.apache.james.jmap.memory.change.MemoryEmailChangeRepository; import org.apache.james.jmap.memory.change.MemoryMailboxChangeRepository; import org.apache.james.mailbox.AttachmentContentLoader; +import org.apache.james.mailbox.AttachmentIdFactory; import org.apache.james.mailbox.AttachmentManager; import org.apache.james.mailbox.Authenticator; import org.apache.james.mailbox.Authorizator; @@ -45,6 +46,7 @@ import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.RightManager; import org.apache.james.mailbox.SessionProvider; +import org.apache.james.mailbox.StringBackedAttachmentIdFactory; import org.apache.james.mailbox.SubscriptionManager; import org.apache.james.mailbox.extractor.TextExtractor; import org.apache.james.mailbox.inmemory.InMemoryId; @@ -100,6 +102,7 @@ public class MemoryMailboxModule extends AbstractModule { bind(MessageMapperFactory.class).to(InMemoryMailboxSessionMapperFactory.class); bind(MailboxMapperFactory.class).to(InMemoryMailboxSessionMapperFactory.class); + bind(AttachmentIdFactory.class).to(StringBackedAttachmentIdFactory.class); bind(AttachmentMapperFactory.class).to(InMemoryMailboxSessionMapperFactory.class); bind(MailboxSessionMapperFactory.class).to(InMemoryMailboxSessionMapperFactory.class); bind(ModSeqProvider.class).to(InMemoryModSeqProvider.class); diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java index fd2cf26d7f..1411b61f38 100644 --- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java +++ b/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java @@ -93,7 +93,6 @@ import org.apache.james.mailbox.FlagsBuilder; import org.apache.james.mailbox.Role; import org.apache.james.mailbox.events.MailboxEvents.Added; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.MailboxACL; @@ -103,6 +102,7 @@ import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.MessageResult; import org.apache.james.mailbox.model.QuotaRoot; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.probe.ACLProbe; import org.apache.james.mailbox.probe.MailboxProbe; import org.apache.james.mailbox.probe.QuotaProbe; @@ -4419,7 +4419,7 @@ public abstract class SetMessagesMethodTest { return AttachmentMetadata.builder() .messageId(new DefaultMessageId()) - .attachmentId(AttachmentId.from(json.getString("blobId"))) + .attachmentId(StringBackedAttachmentId.from(json.getString("blobId"))) .size(json.getLong("size")) .type(json.getString("type")) .build(); @@ -4438,7 +4438,7 @@ public abstract class SetMessagesMethodTest { return AttachmentMetadata.builder() .messageId(new DefaultMessageId()) - .attachmentId(AttachmentId.from(json.getString("blobId"))) + .attachmentId(StringBackedAttachmentId.from(json.getString("blobId"))) .size(json.getLong("size")) .type(json.getString("type")) .build(); diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/BlobManagerImpl.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/BlobManagerImpl.java index 5d7211d4b5..7f714d1fe5 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/BlobManagerImpl.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/BlobManagerImpl.java @@ -34,6 +34,7 @@ import org.apache.james.jmap.api.upload.UploadRepository; import org.apache.james.jmap.draft.exceptions.BlobNotFoundException; import org.apache.james.jmap.draft.model.Blob; import org.apache.james.jmap.draft.model.BlobId; +import org.apache.james.mailbox.AttachmentIdFactory; import org.apache.james.mailbox.AttachmentManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageIdManager; @@ -65,14 +66,17 @@ public class BlobManagerImpl implements BlobManager { private final MessageIdManager messageIdManager; private final MessageId.Factory messageIdFactory; private final UploadRepository uploadRepository; + private final AttachmentIdFactory attachmentIdFactory; @Inject public BlobManagerImpl(AttachmentManager attachmentManager, MessageIdManager messageIdManager, - MessageId.Factory messageIdFactory, UploadRepository uploadRepository) { + MessageId.Factory messageIdFactory, UploadRepository uploadRepository, + AttachmentIdFactory attachmentIdFactory) { this.attachmentManager = attachmentManager; this.messageIdManager = messageIdManager; this.messageIdFactory = messageIdFactory; this.uploadRepository = uploadRepository; + this.attachmentIdFactory = attachmentIdFactory; } @Override @@ -88,7 +92,7 @@ public class BlobManagerImpl implements BlobManager { List<AttachmentId> notEncodingUploadsAsAttachmentIds = notEncodingUploads.stream() - .map(BlobId::asAttachmentId) + .map(blobId -> attachmentIdFactory.from(blobId.getRawValue())) .collect(ImmutableList.toImmutableList()); Flux<Blob> attachmentOrMessage = Mono.fromCallable(() -> attachmentManager.getAttachments(notEncodingUploadsAsAttachmentIds, session)) @@ -145,7 +149,7 @@ public class BlobManagerImpl implements BlobManager { private Optional<Blob> getBlobFromAttachment(BlobId blobId, MailboxSession mailboxSession) throws MailboxException { try { - AttachmentId attachmentId = blobId.asAttachmentId(); + AttachmentId attachmentId = attachmentIdFactory.from(blobId.getRawValue()); AttachmentMetadata attachment = attachmentManager.getAttachment(attachmentId, mailboxSession); return Optional.of(loadAttachmentContent(attachment, mailboxSession)); diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/BlobId.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/BlobId.java index 6ab75e3357..030e2b3ab9 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/BlobId.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/BlobId.java @@ -60,10 +60,6 @@ public class BlobId { return rawValue; } - public AttachmentId asAttachmentId() { - return AttachmentId.from(rawValue); - } - public Optional<UploadId> asUploadId() { if (rawValue.startsWith(UPLOAD_PREFIX)) { UploadId uploadId = UploadId.from(rawValue.substring(UPLOAD_PREFIX.length())); diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/BlobManagerImplTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/BlobManagerImplTest.java index 1877c91b46..3d06570ac5 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/BlobManagerImplTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/BlobManagerImplTest.java @@ -44,10 +44,11 @@ import org.apache.james.mailbox.AttachmentManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSessionUtil; import org.apache.james.mailbox.MessageIdManager; +import org.apache.james.mailbox.StringBackedAttachmentIdFactory; import org.apache.james.mailbox.exception.AttachmentNotFoundException; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.InMemoryMessageId; -import org.apache.james.mailbox.model.AttachmentId; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.ByteContent; import org.apache.james.mailbox.model.Content; @@ -68,7 +69,7 @@ import reactor.core.publisher.Mono; class BlobManagerImplTest { static final String ID = "abc"; - static final AttachmentId ATTACHMENT_ID = AttachmentId.from(ID); + static final StringBackedAttachmentId ATTACHMENT_ID = StringBackedAttachmentId.from(ID); static final ContentType CONTENT_TYPE = ContentType.of("text/plain"); static final byte[] BYTES = "abc".getBytes(StandardCharsets.UTF_8); static final TestMessageId MESSAGE_ID = TestMessageId.of(125); @@ -88,7 +89,7 @@ class BlobManagerImplTest { blobManager = new BlobManagerImpl(attachmentManager, messageIdManager, new TestMessageId.Factory(), new InMemoryUploadRepository(new DeDuplicationBlobStore(new MemoryBlobStoreDAO(), BucketName.of("default"), new HashBlobId.Factory()), - Clock.systemUTC())); + Clock.systemUTC()), new StringBackedAttachmentIdFactory()); } @Test diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MIMEMessageConverterTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MIMEMessageConverterTest.java index 00e81b6b52..12911b30a6 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MIMEMessageConverterTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MIMEMessageConverterTest.java @@ -40,9 +40,7 @@ import org.apache.james.jmap.draft.model.CreationMessage.DraftEmailer; import org.apache.james.jmap.draft.model.CreationMessageId; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSessionUtil; -import org.apache.james.mailbox.model.AttachmentId; -import org.apache.james.mime4j.codec.EncoderUtil; -import org.apache.james.mime4j.codec.EncoderUtil.Usage; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mime4j.dom.Entity; import org.apache.james.mime4j.dom.Message; import org.apache.james.mime4j.dom.Multipart; @@ -612,7 +610,7 @@ class MIMEMessageConverterTest { String expectedMimeType = "image/png"; String text = "123456"; TextBody expectedBody = new BasicBodyFactory().textBody(text.getBytes(), StandardCharsets.UTF_8); - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); Attachment.WithBlob attachment = new Attachment.WithBlob( Attachment.builder() .blobId(BlobId.of(blodId.getId())) @@ -662,7 +660,7 @@ class MIMEMessageConverterTest { String expectedMimeType = "text/calendar; charset=\"iso-8859-1\""; String text = "123456"; TextBody expectedBody = new BasicBodyFactory().textBody(text.getBytes(), StandardCharsets.UTF_8); - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); Attachment.WithBlob attachment = new Attachment.WithBlob( Attachment.builder() @@ -718,7 +716,7 @@ class MIMEMessageConverterTest { String text = "123456"; TextBody expectedAttachmentBody = new BasicBodyFactory().textBody(text.getBytes(), StandardCharsets.UTF_8); - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); Attachment.WithBlob attachment = new Attachment.WithBlob( Attachment.builder() .blobId(BlobId.of(blodId.getId())) @@ -801,7 +799,7 @@ class MIMEMessageConverterTest { String expectedMimeType = "image/png"; String text = "123456"; String name = "ديناصور.png"; - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); Attachment.WithBlob attachment = new Attachment.WithBlob( Attachment.builder() @@ -845,7 +843,7 @@ class MIMEMessageConverterTest { String text = "123456"; String type = "image/png"; - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); Attachment.WithBlob attachment = new Attachment.WithBlob( Attachment.builder() @@ -884,7 +882,7 @@ class MIMEMessageConverterTest { String text = "123456"; String type = "image/png"; - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); Attachment.WithBlob attachment = new Attachment.WithBlob( Attachment.builder() @@ -922,7 +920,7 @@ class MIMEMessageConverterTest { .build(); String text = "123456"; - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); String type = "image/png"; Attachment.WithBlob attachment = new Attachment.WithBlob( @@ -963,7 +961,7 @@ class MIMEMessageConverterTest { String text = "123456"; String type = "image/png; name=abc.png"; - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); Attachment.WithBlob attachment = new Attachment.WithBlob( Attachment.builder() @@ -991,7 +989,7 @@ class MIMEMessageConverterTest { MIMEMessageConverter sut = new MIMEMessageConverter(); String text = "123456"; - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); String type = "image/png; name=abc.png; charset=\"iso-8859-1\""; Attachment attachment = Attachment.builder() @@ -1013,7 +1011,7 @@ class MIMEMessageConverterTest { String text = "123456"; String type = "image/png"; - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); Attachment attachment = Attachment.builder() .blobId(BlobId.of(blodId.getId())) .cid("cid") @@ -1032,7 +1030,7 @@ class MIMEMessageConverterTest { MIMEMessageConverter sut = new MIMEMessageConverter(); String text = "123456"; - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); String type = "image/png; name=abc.png"; Attachment attachment = Attachment.builder() @@ -1052,7 +1050,7 @@ class MIMEMessageConverterTest { MIMEMessageConverter sut = new MIMEMessageConverter(); String text = "123456"; - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); String type = "image/png"; Attachment attachment = Attachment.builder() .blobId(BlobId.of(blodId.getId())) @@ -1079,7 +1077,7 @@ class MIMEMessageConverterTest { String name = "ديناصور.png"; String text = "123456"; - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); String type = "image/png"; Attachment.WithBlob attachment = new Attachment.WithBlob( @@ -1123,7 +1121,7 @@ class MIMEMessageConverterTest { String text = "inline data"; String type = "image/png"; - AttachmentId blodId = AttachmentId.from("blodId"); + StringBackedAttachmentId blodId = StringBackedAttachmentId.from("blodId"); Attachment.WithBlob inline = new Attachment.WithBlob( Attachment.builder() @@ -1142,7 +1140,7 @@ class MIMEMessageConverterTest { .build()); String text2 = "attachment data"; - final AttachmentId blodId2 = AttachmentId.from("blodId2"); + final StringBackedAttachmentId blodId2 = StringBackedAttachmentId.from("blodId2"); Attachment.WithBlob attachment = new Attachment.WithBlob( Attachment.builder() .blobId(BlobId.of(blodId.getId())) diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java index 313488e7a4..ffac500a2f 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java @@ -53,6 +53,7 @@ import org.apache.james.jmap.memory.upload.InMemoryUploadRepository; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageManager; +import org.apache.james.mailbox.StringBackedAttachmentIdFactory; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; @@ -153,7 +154,7 @@ class MessageFastViewFactoryTest { blobManager = new BlobManagerImpl(resources.getAttachmentManager(), resources.getMessageIdManager(), resources.getMessageIdFactory(), new InMemoryUploadRepository(new DeDuplicationBlobStore(new MemoryBlobStoreDAO(), BucketName.of("default"), new HashBlobId.Factory()), - Clock.systemUTC())); + Clock.systemUTC()), new StringBackedAttachmentIdFactory()); messageFullViewFactory = new MessageFullViewFactory(blobManager, messageContentExtractor, htmlTextExtractor, messageIdManager, new MemoryMessageFastViewProjection(new RecordingMetricFactory())); messageFastViewFactory = new MessageFastViewFactory(blobManager, messageIdManager, fastViewProjection, messageFullViewFactory); diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java index dcd52d971f..dbe2c2fcb1 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java @@ -62,11 +62,11 @@ import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageUid; +import org.apache.james.mailbox.StringBackedAttachmentIdFactory; import org.apache.james.mailbox.inmemory.InMemoryId; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.InMemoryMessageId; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; -import org.apache.james.mailbox.model.AttachmentId; import org.apache.james.mailbox.model.AttachmentMetadata; import org.apache.james.mailbox.model.Cid; import org.apache.james.mailbox.model.ComposedMessageId; @@ -77,6 +77,7 @@ import org.apache.james.mailbox.model.MessageAttachmentMetadata; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.model.MessageResult; +import org.apache.james.mailbox.model.StringBackedAttachmentId; import org.apache.james.mailbox.model.TestMessageId; import org.apache.james.metrics.tests.RecordingMetricFactory; import org.apache.james.server.blob.deduplication.DeDuplicationBlobStore; @@ -135,7 +136,8 @@ class MessageFullViewFactoryTest { fastViewProjection = spy(new MemoryMessageFastViewProjection(new RecordingMetricFactory())); BlobManagerImpl blobManager = new BlobManagerImpl(resources.getAttachmentManager(), resources.getMessageIdManager(), resources.getMessageIdFactory(), new InMemoryUploadRepository(new DeDuplicationBlobStore(new MemoryBlobStoreDAO(), - BucketName.of("default"), new HashBlobId.Factory()), Clock.systemUTC())); + BucketName.of("default"), new HashBlobId.Factory()), Clock.systemUTC()), + new StringBackedAttachmentIdFactory()); messageFullViewFactory = new MessageFullViewFactory(blobManager, messageContentExtractor, htmlTextExtractor, messageIdManager, fastViewProjection); @@ -505,7 +507,7 @@ class MessageFullViewFactoryTest { .attachments(ImmutableList.of(MessageAttachmentMetadata.builder() .attachment(AttachmentMetadata.builder() .messageId(InMemoryMessageId.of(46)) - .attachmentId(AttachmentId.from(blodId.getRawValue())) + .attachmentId(StringBackedAttachmentId.from(blodId.getRawValue())) .size(payload.length()) .type(type) .build()) diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java index 7ded4ed2de..5b72e2b8a4 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java @@ -43,6 +43,7 @@ import org.apache.james.jmap.memory.upload.InMemoryUploadRepository; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageManager; +import org.apache.james.mailbox.StringBackedAttachmentIdFactory; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; import org.apache.james.mailbox.model.ComposedMessageId; @@ -84,7 +85,8 @@ class MessageHeaderViewFactoryTest { session).getId(); BlobManagerImpl blobManager = new BlobManagerImpl(resources.getAttachmentManager(), resources.getMessageIdManager(), resources.getMessageIdFactory(), new InMemoryUploadRepository(new DeDuplicationBlobStore(new MemoryBlobStoreDAO(), BucketName.of("default"), new HashBlobId.Factory()), - Clock.systemUTC())); + Clock.systemUTC()), + new StringBackedAttachmentIdFactory()); testee = new MessageHeaderViewFactory(blobManager, messageIdManager); } diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java index 6311090239..25370a5c4f 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java @@ -38,6 +38,7 @@ import org.apache.james.jmap.memory.upload.InMemoryUploadRepository; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageManager; +import org.apache.james.mailbox.StringBackedAttachmentIdFactory; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; import org.apache.james.mailbox.model.ComposedMessageId; @@ -79,7 +80,8 @@ class MessageMetadataViewFactoryTest { BlobManagerImpl blobManager = new BlobManagerImpl(resources.getAttachmentManager(), resources.getMessageIdManager(), resources.getMessageIdFactory(), new InMemoryUploadRepository(new DeDuplicationBlobStore(new MemoryBlobStoreDAO(), BucketName.of("default"), new HashBlobId.Factory()), - Clock.systemUTC())); + Clock.systemUTC()), + new StringBackedAttachmentIdFactory()); testee = new MessageMetadataViewFactory(blobManager, messageIdManager); } diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java index ab16217b97..0c36705640 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java @@ -54,6 +54,7 @@ import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSessionUtil; import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageManager; +import org.apache.james.mailbox.StringBackedAttachmentIdFactory; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; import org.apache.james.mailbox.model.ComposedMessageId; @@ -145,7 +146,8 @@ class ComputeMessageFastViewProjectionListenerTest { BlobManagerImpl blobManager = new BlobManagerImpl(resources.getAttachmentManager(), resources.getMessageIdManager(), resources.getMessageIdFactory(), new InMemoryUploadRepository(new DeDuplicationBlobStore(new MemoryBlobStoreDAO(), BucketName.of("default"), - new HashBlobId.Factory()), Clock.systemUTC())); + new HashBlobId.Factory()), Clock.systemUTC()), + new StringBackedAttachmentIdFactory()); messageFullViewFactory = new MessageFullViewFactory(blobManager, messageContentExtractor, htmlTextExtractor, messageIdManager, messageFastViewProjection); FakeAuthenticator authenticator = new FakeAuthenticator(); diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/DownloadRoutes.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/DownloadRoutes.scala index a445c43ea4..b5c2439397 100644 --- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/DownloadRoutes.scala +++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/DownloadRoutes.scala @@ -48,7 +48,7 @@ import org.apache.james.jmap.routes.DownloadRoutes.{BUFFER_SIZE, LOGGER} import org.apache.james.jmap.{Endpoint, JMAPRoute, JMAPRoutes} import org.apache.james.mailbox.model.ContentType.{MediaType, MimeType, SubType} import org.apache.james.mailbox.model._ -import org.apache.james.mailbox.{AttachmentManager, MailboxSession, MessageIdManager} +import org.apache.james.mailbox.{AttachmentIdFactory, AttachmentManager, MailboxSession, MessageIdManager} import org.apache.james.mime4j.codec.EncoderUtil import org.apache.james.mime4j.codec.EncoderUtil.Usage import org.apache.james.mime4j.dom.SingleBody @@ -173,10 +173,10 @@ class UploadResolver @Inject()(val uploadService: UploadService) extends BlobRes } } -class AttachmentBlobResolver @Inject()(val attachmentManager: AttachmentManager) extends BlobResolver { +class AttachmentBlobResolver @Inject()(val attachmentManager: AttachmentManager, val attachmentIdFactory: AttachmentIdFactory) extends BlobResolver { override def resolve(blobId: BlobId, mailboxSession: MailboxSession): BlobResolutionResult = - AttachmentId.from(blobId.value.value) match { - case attachmentId: AttachmentId => + attachmentIdFactory.from(blobId.value.value) match { + case attachmentId: StringBackedAttachmentId => Try(attachmentManager.getAttachment(attachmentId, mailboxSession)) match { case Success(attachmentMetadata) => Applicable(SMono(attachmentManager.loadReactive(attachmentMetadata, mailboxSession)) --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org