This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch 3.9.x in repository https://gitbox.apache.org/repos/asf/james-project.git
commit f2e393c0049ef92c5487aab78968915fa9535e0f Author: Quan Tran <[email protected]> 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:[email protected]:mbx1", "type": "RunRulesOnMailboxTask", "username": "[email protected]", "rules": [ --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
