Skip to content

Commit 91490ec

Browse files
chibenwaArsnael
authored andcommitted
JAMES-4185 Deleted message vault query: add support for messageId
1 parent e7db516 commit 91490ec

7 files changed

Lines changed: 33 additions & 5 deletions

File tree

docs/modules/servers/partials/operate/webadmin.adoc

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4595,6 +4595,21 @@ curl -XPOST http://ip:port/deletedMessages/users/user@domain.ext/messages
45954595
}
45964596
....
45974597

4598+
To retrieve a specific message by its id:
4599+
4600+
....
4601+
{
4602+
"combinator": "and",
4603+
"criteria": [
4604+
{
4605+
"fieldName": "messageId",
4606+
"operator": "equals",
4607+
"value": "3294a976-ce63-491e-bd52-1b6f465ed7a2"
4608+
}
4609+
]
4610+
}
4611+
....
4612+
45984613
The query body follows the same structure as link:#_restore_deleted_messages[Restore Deleted Messages].
45994614
Pass an empty criteria list to retrieve all deleted messages:
46004615

@@ -4738,6 +4753,10 @@ field matching. Tested value is a string serialized of mailbox id.
47384753
Supports list mailbox id operators:
47394754
** contains: does the tested deleted message’s originMailbox ids contain
47404755
tested mailbox id ?
4756+
* messageId: represents for deleted message `messageId` field matching.
4757+
Tested value is a string serialized message id. Supports string operator:
4758+
** equals: does the tested deleted message’s messageId equal the tested
4759+
value?
47414760

47424761
Messages in the Deleted Messages Vault of a specified user that are
47434762
matched with Query Json Object in the body will be appended to his

mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryTranslator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ private ImmutableTable.Builder<FieldName, Operator, Function<String, Criterion<?
168168
.put(FieldName.SUBJECT, EQUALS, testedValue -> CriterionFactory.subject().equals(STRING_PARSER.parse(testedValue)))
169169
.put(FieldName.SUBJECT, EQUALS_IGNORE_CASE, testedValue -> CriterionFactory.subject().equalsIgnoreCase(STRING_PARSER.parse(testedValue)))
170170
.put(FieldName.SUBJECT, CONTAINS, testedValue -> CriterionFactory.subject().contains(STRING_PARSER.parse(testedValue)))
171-
.put(FieldName.SUBJECT, CONTAINS_IGNORE_CASE, testedValue -> CriterionFactory.subject().containsIgnoreCase(STRING_PARSER.parse(testedValue)));
171+
.put(FieldName.SUBJECT, CONTAINS_IGNORE_CASE, testedValue -> CriterionFactory.subject().containsIgnoreCase(STRING_PARSER.parse(testedValue)))
172+
.put(FieldName.MESSAGE_ID, EQUALS, testedValue -> CriterionFactory.messageId().equals(STRING_PARSER.parse(testedValue)));
172173
}
173174

174175
private Criterion<?> translate(CriterionDTO dto) throws QueryTranslatorException {

mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/CriterionFactory.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import static org.apache.james.vault.search.DeletedMessageField.DELETION_DATE;
2323
import static org.apache.james.vault.search.DeletedMessageField.DELIVERY_DATE;
2424
import static org.apache.james.vault.search.DeletedMessageField.HAS_ATTACHMENT;
25+
import static org.apache.james.vault.search.DeletedMessageField.MESSAGE_ID;
2526
import static org.apache.james.vault.search.DeletedMessageField.ORIGIN_MAILBOXES;
2627
import static org.apache.james.vault.search.DeletedMessageField.RECIPIENTS;
2728
import static org.apache.james.vault.search.DeletedMessageField.SENDER;
@@ -119,6 +120,10 @@ static StringCriterionFactory subject() {
119120
return new StringCriterionFactory(Criterion.Builder.forField(SUBJECT));
120121
}
121122

123+
static StringCriterionFactory messageId() {
124+
return new StringCriterionFactory(Criterion.Builder.forField(MESSAGE_ID));
125+
}
126+
122127
static Criterion<Collection<MailboxId>> containsOriginMailbox(MailboxId mailboxId) {
123128
return Criterion.Builder.forField(ORIGIN_MAILBOXES)
124129
.withMatcher(new Criterion.ValueMatcher<>(mailboxId, CONTAINS, value -> value.contains(mailboxId)));

mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/DeletedMessageField.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import static org.apache.james.vault.search.DeletedMessageField.ValueExtractor.DELETION_DATE_EXTRACTOR;
2323
import static org.apache.james.vault.search.DeletedMessageField.ValueExtractor.DELIVERY_DATE_EXTRACTOR;
2424
import static org.apache.james.vault.search.DeletedMessageField.ValueExtractor.HAS_ATTACHMENT_EXTRACTOR;
25+
import static org.apache.james.vault.search.DeletedMessageField.ValueExtractor.MESSAGE_ID_EXTRACTOR;
2526
import static org.apache.james.vault.search.DeletedMessageField.ValueExtractor.ORIGIN_MAILBOXES_EXTRACTOR;
2627
import static org.apache.james.vault.search.DeletedMessageField.ValueExtractor.RECIPIENTS_EXTRACTOR;
2728
import static org.apache.james.vault.search.DeletedMessageField.ValueExtractor.SENDER_EXTRACTOR;
@@ -63,6 +64,7 @@ interface ValueExtractor<T> {
6364
ValueExtractor<Boolean> HAS_ATTACHMENT_EXTRACTOR = deletedMessage -> Optional.of(deletedMessage.hasAttachment());
6465
ValueExtractor<Collection<MailboxId>> ORIGIN_MAILBOXES_EXTRACTOR = deletedMessage -> Optional.of(deletedMessage.getOriginMailboxes());
6566
ValueExtractor<String> SUBJECT_EXTRACTOR = DeletedMessage::getSubject;
67+
ValueExtractor<String> MESSAGE_ID_EXTRACTOR = deletedMessage -> Optional.of(deletedMessage.getMessageId().serialize());
6668
}
6769

6870
static final DeletedMessageField<ZonedDateTime> DELETION_DATE = new DeletedMessageField<>(FieldName.DELETION_DATE, DELETION_DATE_EXTRACTOR);
@@ -72,5 +74,6 @@ interface ValueExtractor<T> {
7274
static final DeletedMessageField<Boolean> HAS_ATTACHMENT = new DeletedMessageField<>(FieldName.HAS_ATTACHMENT, HAS_ATTACHMENT_EXTRACTOR);
7375
static final DeletedMessageField<Collection<MailboxId>> ORIGIN_MAILBOXES = new DeletedMessageField<>(FieldName.ORIGIN_MAILBOXES, ORIGIN_MAILBOXES_EXTRACTOR);
7476
static final DeletedMessageField<String> SUBJECT = new DeletedMessageField<>(FieldName.SUBJECT, SUBJECT_EXTRACTOR);
77+
static final DeletedMessageField<String> MESSAGE_ID = new DeletedMessageField<>(FieldName.MESSAGE_ID, MESSAGE_ID_EXTRACTOR);
7578

7679
}

mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/FieldName.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public enum FieldName {
2525
SENDER("sender"),
2626
HAS_ATTACHMENT("hasAttachment"),
2727
ORIGIN_MAILBOXES("originMailboxes"),
28-
SUBJECT("subject");
28+
SUBJECT("subject"),
29+
MESSAGE_ID("messageId");
2930

3031
private final String value;
3132

server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@
4040
import org.apache.james.vault.search.Query;
4141
import org.apache.james.webadmin.Routes;
4242
import org.apache.james.webadmin.tasks.TaskFromRequest;
43-
44-
import reactor.core.publisher.Flux;
4543
import org.apache.james.webadmin.tasks.TaskFromRequestRegistry;
4644
import org.apache.james.webadmin.tasks.TaskRegistrationKey;
4745
import org.apache.james.webadmin.utils.ErrorResponder;
@@ -52,6 +50,7 @@
5250

5351
import com.google.common.annotations.VisibleForTesting;
5452

53+
import reactor.core.publisher.Flux;
5554
import spark.Request;
5655
import spark.Route;
5756
import spark.Service;

server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
import static org.apache.james.vault.DeletedMessageFixture.CONTENT;
2626
import static org.apache.james.vault.DeletedMessageFixture.DELETED_MESSAGE;
2727
import static org.apache.james.vault.DeletedMessageFixture.DELETED_MESSAGE_2;
28-
import static org.apache.james.vault.DeletedMessageFixture.DELETED_MESSAGE_OTHER_USER;
2928
import static org.apache.james.vault.DeletedMessageFixture.DELETED_MESSAGE_GENERATOR;
29+
import static org.apache.james.vault.DeletedMessageFixture.DELETED_MESSAGE_OTHER_USER;
3030
import static org.apache.james.vault.DeletedMessageFixture.DELETION_DATE;
3131
import static org.apache.james.vault.DeletedMessageFixture.DELIVERY_DATE;
3232
import static org.apache.james.vault.DeletedMessageFixture.FINAL_STAGE;

0 commit comments

Comments
 (0)