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]

Reply via email to