You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by hq...@apache.org on 2025/10/29 07:11:36 UTC
(james-project) 02/07: JAMES-4148 RunRulesOnMailboxTask should rely on MailboxPath
This is an automated email from the ASF dual-hosted git repository.
hqtran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit ab36cb926917262787c2b15ac7ace4aa7dacbd12
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Tue Oct 28 11:33:26 2025 +0700
JAMES-4148 RunRulesOnMailboxTask should rely on MailboxPath
To allow running on shared mailbox if needed.
---
.../data/jmap/RunRulesOnMailboxService.java | 9 ++++-----
.../webadmin/data/jmap/RunRulesOnMailboxTask.java | 22 +++++++++++++++-------
.../data/jmap/RunRulesOnMailboxTaskDTO.java | 17 +++++++++--------
.../resources/json/runRulesOnMailbox.task.json | 2 +-
4 files changed, 29 insertions(+), 21 deletions(-)
diff --git a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxService.java b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxService.java
index 881dc3fefb..1cfa6278a5 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxService.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxService.java
@@ -46,7 +46,6 @@ 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.task.Task;
-import org.apache.james.webadmin.validation.MailboxName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -86,20 +85,20 @@ public class RunRulesOnMailboxService {
this.maxActionsPerMailbox = maxActionsPerMailbox;
}
- public Mono<Task.Result> runRulesOnMailbox(Username username, MailboxName mailboxName, Rules rules, RunRulesOnMailboxTask.Context context) {
+ public Mono<Task.Result> runRulesOnMailbox(Username username, MailboxPath mailboxPath, Rules rules, RunRulesOnMailboxTask.Context context) {
MailboxSession mailboxSession = mailboxManager.createSystemSession(username);
RuleMatcher ruleMatcher = new RuleMatcher(rules.getRules());
- return Mono.from(mailboxManager.getMailboxReactive(MailboxPath.forUser(username, mailboxName.asString()), mailboxSession))
+ return Mono.from(mailboxManager.getMailboxReactive(mailboxPath, mailboxSession))
.flatMapMany(messageManager -> Flux.from(messageManager.getMessagesReactive(MessageRange.all(), FetchGroup.HEADERS, mailboxSession))
.flatMap(Throwing.function(messageResult -> runRulesOnMessage(ruleMatcher, messageResult, mailboxSession, context)), DEFAULT_CONCURRENCY))
.onErrorResume(TooManyAppliedActionsException.class, e -> {
- LOGGER.info("Maximum number of actions exceeded for mailbox {} of user {}", mailboxName.asString(), username);
+ LOGGER.info("Maximum number of actions exceeded for mailbox {} of user {}", mailboxPath.asString(), username);
context.setMaximumAppliedActionExceeded();
return Mono.just(Task.Result.COMPLETED);
})
.onErrorResume(e -> {
- LOGGER.error("Error when applying rules to mailbox. Mailbox {} for user {}", mailboxName.asString(), username, e);
+ LOGGER.error("Error when applying rules to mailbox. Mailbox {} for user {}", mailboxPath.asString(), username, e);
context.incrementFails();
return Mono.just(Task.Result.PARTIAL);
})
diff --git a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTask.java b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTask.java
index e9c3f7f356..da99e07ceb 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTask.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTask.java
@@ -28,6 +28,7 @@ import java.util.concurrent.atomic.AtomicLong;
import org.apache.james.core.Username;
import org.apache.james.jmap.api.filtering.Rules;
+import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.task.Task;
import org.apache.james.task.TaskExecutionDetails;
import org.apache.james.task.TaskType;
@@ -202,24 +203,31 @@ public class RunRulesOnMailboxTask implements Task {
private final Context context;
private final Username username;
- private final MailboxName mailboxName;
+ private final MailboxPath mailboxPath;
private final Rules rules;
private final RunRulesOnMailboxService runRulesOnMailboxService;
public RunRulesOnMailboxTask(Username username,
- MailboxName mailboxName,
+ MailboxPath mailboxPath,
Rules rules,
RunRulesOnMailboxService runRulesOnMailboxService) {
this.username = username;
- this.mailboxName = mailboxName;
+ this.mailboxPath = mailboxPath;
this.rules = rules;
this.runRulesOnMailboxService = runRulesOnMailboxService;
this.context = new Context();
}
+ public RunRulesOnMailboxTask(Username username,
+ MailboxName mailboxName,
+ Rules rules,
+ RunRulesOnMailboxService runRulesOnMailboxService) {
+ this(username, MailboxPath.forUser(username, mailboxName.asString()), rules, runRulesOnMailboxService);
+ }
+
@Override
public Result run() {
- return runRulesOnMailboxService.runRulesOnMailbox(username, mailboxName, rules, context)
+ return runRulesOnMailboxService.runRulesOnMailbox(username, mailboxPath, rules, context)
.block();
}
@@ -230,15 +238,15 @@ public class RunRulesOnMailboxTask implements Task {
@Override
public Optional<TaskExecutionDetails.AdditionalInformation> details() {
- return Optional.of(AdditionalInformation.from(username, mailboxName, context));
+ return Optional.of(AdditionalInformation.from(username, new MailboxName(mailboxPath.getName()), context));
}
public Username getUsername() {
return username;
}
- public MailboxName getMailboxName() {
- return mailboxName;
+ public MailboxPath getMailboxPath() {
+ return mailboxPath;
}
public Rules getRules() {
diff --git a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTaskDTO.java b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTaskDTO.java
index 266401be7a..e4ff361c99 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTaskDTO.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunRulesOnMailboxTaskDTO.java
@@ -24,9 +24,9 @@ import org.apache.james.jmap.api.filtering.RuleDTO;
import org.apache.james.jmap.api.filtering.Rules;
import org.apache.james.jmap.api.filtering.Version;
import org.apache.james.json.DTOModule;
+import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.server.task.json.dto.TaskDTO;
import org.apache.james.server.task.json.dto.TaskDTOModule;
-import org.apache.james.webadmin.validation.MailboxName;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.collect.ImmutableList;
@@ -34,16 +34,16 @@ import com.google.common.collect.ImmutableList;
public class RunRulesOnMailboxTaskDTO implements TaskDTO {
private final String type;
private final String username;
- private final String mailboxName;
+ private final String mailboxPath;
private final ImmutableList<RuleDTO> rules;
public RunRulesOnMailboxTaskDTO(@JsonProperty("type") String type,
@JsonProperty("username") String username,
- @JsonProperty("mailboxName") String mailboxName,
+ @JsonProperty("mailboxPath") String mailboxPath,
@JsonProperty("rules") ImmutableList<RuleDTO> rules) {
this.type = type;
this.username = username;
- this.mailboxName = mailboxName;
+ this.mailboxPath = mailboxPath;
this.rules = rules;
}
@@ -56,8 +56,8 @@ public class RunRulesOnMailboxTaskDTO implements TaskDTO {
return username;
}
- public String getMailboxName() {
- return mailboxName;
+ public String getMailboxPath() {
+ return mailboxPath;
}
public ImmutableList<RuleDTO> getRules() {
@@ -75,10 +75,11 @@ public class RunRulesOnMailboxTaskDTO implements TaskDTO {
}
public RunRulesOnMailboxTask fromDTO(RunRulesOnMailboxService runRulesOnMailboxService) {
- return new RunRulesOnMailboxTask(Username.of(username), new MailboxName(mailboxName), new Rules(RuleDTO.toRules(rules), Version.INITIAL), runRulesOnMailboxService);
+ return new RunRulesOnMailboxTask(Username.of(username), MailboxPath.parseEscaped(mailboxPath).orElseThrow(() -> new IllegalArgumentException("Can not parse mailboxPath: " + mailboxPath)),
+ new Rules(RuleDTO.toRules(rules), Version.INITIAL), runRulesOnMailboxService);
}
public static RunRulesOnMailboxTaskDTO toDTO(RunRulesOnMailboxTask domainObject, String typeName) {
- return new RunRulesOnMailboxTaskDTO(typeName, domainObject.getUsername().asString(), domainObject.getMailboxName().asString(), RuleDTO.from(domainObject.getRules().getRules()));
+ return new RunRulesOnMailboxTaskDTO(typeName, domainObject.getUsername().asString(), domainObject.getMailboxPath().asString(), RuleDTO.from(domainObject.getRules().getRules()));
}
}
diff --git a/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/runRulesOnMailbox.task.json b/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/runRulesOnMailbox.task.json
index 63445e07e9..5864a987a5 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/runRulesOnMailbox.task.json
+++ b/server/protocols/webadmin/webadmin-jmap/src/test/resources/json/runRulesOnMailbox.task.json
@@ -1,5 +1,5 @@
{
- "mailboxName": "mbx1",
+ "mailboxPath": "#private:bob@domain.tld:mbx1",
"type": "RunRulesOnMailboxTask",
"username": "bob@domain.tld",
"rules": [
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org