This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit f4b1864c42cc3da06d78fd30e7d2884a7f67f2fe
Author: Benoit TELLIER <btell...@linagora.com>
AuthorDate: Wed Oct 9 11:24:22 2024 +0200

    JAMES-2182 PathConverter: transform into an interface and inject
    
    This will allow customization of the IMAP folder naming strategy.
---
 .../org/apache/james/imap/main/PathConverter.java  | 108 ++++++++++++---------
 .../imap/processor/AbstractAuthProcessor.java      |  22 +++--
 .../processor/AbstractMessageRangeProcessor.java   |   7 +-
 .../imap/processor/AbstractSelectionProcessor.java |   7 +-
 .../james/imap/processor/AppendProcessor.java      |   7 +-
 .../imap/processor/AuthenticateProcessor.java      |   5 +-
 .../apache/james/imap/processor/CopyProcessor.java |   5 +-
 .../james/imap/processor/CreateProcessor.java      |   7 +-
 .../james/imap/processor/DefaultProcessor.java     |  50 +++++-----
 .../james/imap/processor/DeleteACLProcessor.java   |   6 +-
 .../james/imap/processor/DeleteProcessor.java      |   7 +-
 .../james/imap/processor/ExamineProcessor.java     |   5 +-
 .../james/imap/processor/GetACLProcessor.java      |   7 +-
 .../james/imap/processor/GetMetadataProcessor.java |   8 +-
 .../imap/processor/GetQuotaRootProcessor.java      |   6 +-
 .../apache/james/imap/processor/ListProcessor.java |  11 ++-
 .../james/imap/processor/ListRightsProcessor.java  |   7 +-
 .../james/imap/processor/LoginProcessor.java       |   5 +-
 .../apache/james/imap/processor/MoveProcessor.java |   5 +-
 .../james/imap/processor/MyRightsProcessor.java    |   7 +-
 .../james/imap/processor/RenameProcessor.java      |   7 +-
 .../james/imap/processor/ReplaceProcessor.java     |   7 +-
 .../james/imap/processor/SelectProcessor.java      |   5 +-
 .../james/imap/processor/SetACLProcessor.java      |   7 +-
 .../james/imap/processor/SetMetadataProcessor.java |   7 +-
 .../james/imap/processor/StatusProcessor.java      |   7 +-
 .../james/imap/processor/SubscribeProcessor.java   |   7 +-
 .../james/imap/processor/UnsubscribeProcessor.java |   7 +-
 .../james/imap/processor/XListProcessor.java       |   9 +-
 .../apache/james/imap/main/PathConverterTest.java  |   2 +-
 .../processor/AbstractSelectionProcessorTest.java  |   3 +-
 .../james/imap/processor/CopyProcessorTest.java    |   3 +-
 .../imap/processor/DeleteACLProcessorTest.java     |   3 +-
 .../james/imap/processor/GetACLProcessorTest.java  |   3 +-
 .../imap/processor/GetAnnotationProcessorTest.java |   3 +-
 .../imap/processor/GetQuotaRootProcessorTest.java  |   3 +-
 .../imap/processor/ListRightsProcessorTest.java    |   3 +-
 .../james/imap/processor/MoveProcessorTest.java    |   5 +-
 .../james/imap/processor/SelectProcessorTest.java  |   4 +-
 .../james/imap/processor/SetACLProcessorTest.java  |   3 +-
 .../imap/processor/SetMetadataProcessorTest.java   |   3 +-
 .../james/modules/protocols/IMAPServerModule.java  |   2 +
 .../james/imapserver/netty/IMAPServerTest.java     |   1 +
 43 files changed, 246 insertions(+), 150 deletions(-)

diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/main/PathConverter.java 
b/protocols/imap/src/main/java/org/apache/james/imap/main/PathConverter.java
index ca5a7cbfd9..4e7828b62c 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/main/PathConverter.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/main/PathConverter.java
@@ -32,69 +32,83 @@ import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import com.google.common.collect.Iterables;
 
-public class PathConverter {
-
-    private static final int NAMESPACE = 0;
+public interface PathConverter {
+    interface Factory {
+        PathConverter.Factory DEFAULT = new PathConverter.Factory.Default();
+
+        class Default implements Factory {
+            public PathConverter forSession(ImapSession session) {
+                return new PathConverter.Default(session);
+            }
+        }
 
-    public static PathConverter forSession(ImapSession session) {
-        return new PathConverter(session);
+        PathConverter forSession(ImapSession session);
     }
 
-    private final ImapSession session;
+    class Default implements PathConverter{
+        private static final int NAMESPACE = 0;
 
-    private PathConverter(ImapSession session) {
-        this.session = session;
-    }
-
-    public MailboxPath buildFullPath(String mailboxName) {
-        if (Strings.isNullOrEmpty(mailboxName)) {
-            return buildRelativePath("");
+        public static PathConverter forSession(ImapSession session) {
+            return new PathConverter.Default(session);
         }
-        if (isAbsolute(mailboxName)) {
-            return buildAbsolutePath(mailboxName);
-        } else {
-            return buildRelativePath(mailboxName);
+
+        private final ImapSession session;
+
+        private Default(ImapSession session) {
+            this.session = session;
         }
-    }
 
-    private boolean isAbsolute(String mailboxName) {
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(mailboxName));
-        return mailboxName.charAt(0) == MailboxConstants.NAMESPACE_PREFIX_CHAR;
-    }
+        public MailboxPath buildFullPath(String mailboxName) {
+            if (Strings.isNullOrEmpty(mailboxName)) {
+                return buildRelativePath("");
+            }
+            if (isAbsolute(mailboxName)) {
+                return buildAbsolutePath(mailboxName);
+            } else {
+                return buildRelativePath(mailboxName);
+            }
+        }
 
-    private MailboxPath buildRelativePath(String mailboxName) {
-        return buildMailboxPath(MailboxConstants.USER_NAMESPACE, 
session.getUserName(), mailboxName);
-    }
+        private boolean isAbsolute(String mailboxName) {
+            Preconditions.checkArgument(!Strings.isNullOrEmpty(mailboxName));
+            return mailboxName.charAt(0) == 
MailboxConstants.NAMESPACE_PREFIX_CHAR;
+        }
 
-    private MailboxPath buildAbsolutePath(String absolutePath) {
-        char pathDelimiter = session.getMailboxSession().getPathDelimiter();
-        List<String> mailboxPathParts = 
Splitter.on(pathDelimiter).splitToList(absolutePath);
-        String namespace = mailboxPathParts.get(NAMESPACE);
-        String mailboxName = 
Joiner.on(pathDelimiter).join(Iterables.skip(mailboxPathParts, 1));
-        return buildMailboxPath(namespace, retrieveUserName(namespace), 
mailboxName);
-    }
+        private MailboxPath buildRelativePath(String mailboxName) {
+            return buildMailboxPath(MailboxConstants.USER_NAMESPACE, 
session.getUserName(), mailboxName);
+        }
 
-    private Username retrieveUserName(String namespace) {
-        if (namespace.equals(MailboxConstants.USER_NAMESPACE)) {
-            return session.getUserName();
+        private MailboxPath buildAbsolutePath(String absolutePath) {
+            char pathDelimiter = 
session.getMailboxSession().getPathDelimiter();
+            List<String> mailboxPathParts = 
Splitter.on(pathDelimiter).splitToList(absolutePath);
+            String namespace = mailboxPathParts.get(NAMESPACE);
+            String mailboxName = 
Joiner.on(pathDelimiter).join(Iterables.skip(mailboxPathParts, 1));
+            return buildMailboxPath(namespace, retrieveUserName(namespace), 
mailboxName);
         }
-        throw new DeniedAccessOnSharedMailboxException();
-    }
 
-    private MailboxPath buildMailboxPath(String namespace, Username user, 
String mailboxName) {
-        if (!namespace.equals(MailboxConstants.USER_NAMESPACE)) {
+        private Username retrieveUserName(String namespace) {
+            if (namespace.equals(MailboxConstants.USER_NAMESPACE)) {
+                return session.getUserName();
+            }
             throw new DeniedAccessOnSharedMailboxException();
         }
-        return new MailboxPath(namespace, user, 
sanitizeMailboxName(mailboxName));
-    }
 
-    private String sanitizeMailboxName(String mailboxName) {
-        // use uppercase for INBOX
-        // See IMAP-349
-        if (mailboxName.equalsIgnoreCase(MailboxConstants.INBOX)) {
-            return MailboxConstants.INBOX;
+        private MailboxPath buildMailboxPath(String namespace, Username user, 
String mailboxName) {
+            if (!namespace.equals(MailboxConstants.USER_NAMESPACE)) {
+                throw new DeniedAccessOnSharedMailboxException();
+            }
+            return new MailboxPath(namespace, user, 
sanitizeMailboxName(mailboxName));
+        }
+
+        private String sanitizeMailboxName(String mailboxName) {
+            // use uppercase for INBOX
+            // See IMAP-349
+            if (mailboxName.equalsIgnoreCase(MailboxConstants.INBOX)) {
+                return MailboxConstants.INBOX;
+            }
+            return mailboxName;
         }
-        return mailboxName;
     }
 
+    MailboxPath buildFullPath(String mailboxName);
 }
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java
index 508198c34a..17ac2f13c6 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java
@@ -56,14 +56,17 @@ public abstract class AbstractAuthProcessor<R extends 
ImapRequest> extends Abstr
     private static final int MAX_FAILURES = 3;
     private ImapConfiguration imapConfiguration;
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @FunctionalInterface
     protected interface MailboxSessionAuthWithDelegationSupplier {
         MailboxSession get() throws MailboxException;
     }
     
     public AbstractAuthProcessor(Class<R> acceptableClass, MailboxManager 
mailboxManager, StatusResponseFactory factory,
-                                 MetricFactory metricFactory) {
+                                 MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(acceptableClass, mailboxManager, factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
@@ -81,14 +84,13 @@ public abstract class AbstractAuthProcessor<R extends 
ImapRequest> extends Abstr
                 authFailure = true;
             }
             if (!authFailure) {
-                final MailboxManager mailboxManager = getMailboxManager();
                 try {
-                    final MailboxSession mailboxSession = 
mailboxManager.authenticate(authenticationAttempt.getAuthenticationId(),
+                    final MailboxSession mailboxSession = 
getMailboxManager().authenticate(authenticationAttempt.getAuthenticationId(),
                         authenticationAttempt.getPassword())
                         .withoutDelegation();
                     session.authenticated();
                     session.setMailboxSession(mailboxSession);
-                    provisionInbox(session, mailboxManager, mailboxSession);
+                    provisionInbox(session, getMailboxManager(), 
mailboxSession);
                     AuditTrail.entry()
                         .username(() -> mailboxSession.getUser().asString())
                         .sessionId(() -> session.sessionId().asString())
@@ -135,8 +137,8 @@ public abstract class AbstractAuthProcessor<R extends 
ImapRequest> extends Abstr
                                         ImapSession session, ImapRequest 
request, Responder responder,
                                         Username authenticateUser, Username 
delegatorUser) {
         try {
-            final MailboxManager mailboxManager = getMailboxManager();
-            final MailboxSession mailboxSession = mailboxSessionSupplier.get();
+            MailboxManager mailboxManager = getMailboxManager();
+            MailboxSession mailboxSession = mailboxSessionSupplier.get();
             session.authenticated();
             session.setMailboxSession(mailboxSession);
             AuditTrail.entry()
@@ -179,7 +181,7 @@ public abstract class AbstractAuthProcessor<R extends 
ImapRequest> extends Abstr
     }
 
     protected void provisionInbox(ImapSession session, MailboxManager 
mailboxManager, MailboxSession mailboxSession) throws MailboxException {
-        final MailboxPath inboxPath = 
PathConverter.forSession(session).buildFullPath(MailboxConstants.INBOX);
+        MailboxPath inboxPath = 
pathConverterFactory.forSession(session).buildFullPath(MailboxConstants.INBOX);
         if (Mono.from(mailboxManager.mailboxExists(inboxPath, 
mailboxSession)).block()) {
             LOGGER.debug("INBOX exists. No need to create it.");
         } else {
@@ -194,7 +196,7 @@ public abstract class AbstractAuthProcessor<R extends 
ImapRequest> extends Abstr
 
     private void provisionMailbox(String mailbox, ImapSession session, 
MailboxManager mailboxManager,
                                   MailboxSession mailboxSession) throws 
MailboxException {
-        var mailboxPath = 
PathConverter.forSession(session).buildFullPath(mailbox);
+        MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(mailbox);
         if (Mono.from(mailboxManager.mailboxExists(mailboxPath, 
mailboxSession)).block()) {
             LOGGER.debug("{} exists. No need to create it.", mailbox);
             return;
@@ -215,8 +217,8 @@ public abstract class AbstractAuthProcessor<R extends 
ImapRequest> extends Abstr
     }
 
     protected void manageFailureCount(ImapSession session, ImapRequest 
request, Responder responder, HumanReadableText failed) {
-        final Integer currentNumberOfFailures = (Integer) 
session.getAttribute(ATTRIBUTE_NUMBER_OF_FAILURES);
-        final int failures;
+        Integer currentNumberOfFailures = (Integer) 
session.getAttribute(ATTRIBUTE_NUMBER_OF_FAILURES);
+        int failures;
         if (currentNumberOfFailures == null) {
             failures = 1;
         } else {
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMessageRangeProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMessageRangeProcessor.java
index 5a36239ba1..4fac7fc59f 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMessageRangeProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMessageRangeProcessor.java
@@ -52,9 +52,12 @@ import reactor.core.publisher.Mono;
 public abstract class AbstractMessageRangeProcessor<R extends 
AbstractMessageRangeRequest> extends AbstractMailboxProcessor<R> {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(AbstractMessageRangeProcessor.class);
 
+    private final PathConverter.Factory pathConverterFactory;
+
     public AbstractMessageRangeProcessor(Class<R> acceptableClass, 
MailboxManager mailboxManager, StatusResponseFactory factory,
-                                         MetricFactory metricFactory) {
+                                         MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(acceptableClass, mailboxManager, factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     protected abstract Flux<MessageRange> process(MailboxId targetMailbox,
@@ -66,7 +69,7 @@ public abstract class AbstractMessageRangeProcessor<R extends 
AbstractMessageRan
 
     @Override
     protected Mono<Void> processRequestReactive(R request, ImapSession 
session, Responder responder) {
-        MailboxPath targetMailbox = 
PathConverter.forSession(session).buildFullPath(request.getMailboxName());
+        MailboxPath targetMailbox = 
pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName());
         MailboxSession mailboxSession = session.getMailboxSession();
 
         return Mono.from(getMailboxManager().mailboxExists(targetMailbox, 
mailboxSession))
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
index fb5153ff08..6655204291 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
@@ -82,13 +82,16 @@ abstract class AbstractSelectionProcessor<R extends 
AbstractMailboxSelectionRequ
     private static final List<Capability> CAPS = 
ImmutableList.of(ImapConstants.SUPPORTS_QRESYNC, 
ImapConstants.SUPPORTS_CONDSTORE);
 
     private final StatusResponseFactory statusResponseFactory;
+
+    private final PathConverter.Factory pathConverterFactory;
     private final boolean openReadOnly;
     private final EventBus eventBus;
 
-    public AbstractSelectionProcessor(Class<R> acceptableClass, MailboxManager 
mailboxManager, StatusResponseFactory statusResponseFactory, boolean 
openReadOnly,
+    public AbstractSelectionProcessor(Class<R> acceptableClass, MailboxManager 
mailboxManager, StatusResponseFactory statusResponseFactory, 
PathConverter.Factory pathConverterFactory, boolean openReadOnly,
                                       MetricFactory metricFactory, EventBus 
eventBus) {
         super(acceptableClass, mailboxManager, statusResponseFactory, 
metricFactory);
         this.statusResponseFactory = statusResponseFactory;
+        this.pathConverterFactory = pathConverterFactory;
         this.openReadOnly = openReadOnly;
 
         this.eventBus = eventBus;
@@ -97,7 +100,7 @@ abstract class AbstractSelectionProcessor<R extends 
AbstractMailboxSelectionRequ
     @Override
     protected Mono<Void> processRequestReactive(R request, ImapSession 
session, Responder responder) {
         String mailboxName = request.getMailboxName();
-        MailboxPath fullMailboxPath = 
PathConverter.forSession(session).buildFullPath(mailboxName);
+        MailboxPath fullMailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(mailboxName);
 
         return respond(session, fullMailboxPath, request, responder)
             .onErrorResume(MailboxNotFoundException.class, e -> {
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
index ce0ce416ea..494ed0e18c 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
@@ -63,9 +63,12 @@ public class AppendProcessor extends 
AbstractMailboxProcessor<AppendRequest> imp
 
     private ImmutableList<Capability> capabilities = ImmutableList.of();
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
-    public AppendProcessor(MailboxManager mailboxManager, 
StatusResponseFactory statusResponseFactory, MetricFactory metricFactory) {
+    public AppendProcessor(MailboxManager mailboxManager, 
StatusResponseFactory statusResponseFactory, MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(AppendRequest.class, mailboxManager, statusResponseFactory, 
metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
@@ -88,7 +91,7 @@ public class AppendProcessor extends 
AbstractMailboxProcessor<AppendRequest> imp
         final Content messageIn = request.getMessage().asMailboxContent();
         final Date datetime = request.getDatetime();
         final Flags flags = request.getFlags();
-        final MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(mailboxName);
+        final MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(mailboxName);
         final MailboxManager mailboxManager = getMailboxManager();
 
         session.stopDetectingCommandInjection();
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
index df500fe0bb..89eaa5877c 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
@@ -36,6 +36,7 @@ import org.apache.james.imap.api.message.Capability;
 import org.apache.james.imap.api.message.request.ImapRequest;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapSession;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.AuthenticateRequest;
 import org.apache.james.imap.message.request.IRAuthenticateRequest;
 import org.apache.james.imap.message.response.AuthenticateResponse;
@@ -70,8 +71,8 @@ public class AuthenticateProcessor extends 
AbstractAuthProcessor<AuthenticateReq
 
     @Inject
     public AuthenticateProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory,
-                                 MetricFactory metricFactory) {
-        super(AuthenticateRequest.class, mailboxManager, factory, 
metricFactory);
+                                 MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
+        super(AuthenticateRequest.class, mailboxManager, factory, 
metricFactory, pathConverterFactory);
     }
 
     @Override
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
index 8b3298fe6e..bde419a541 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
@@ -24,6 +24,7 @@ import jakarta.inject.Inject;
 import org.apache.james.imap.api.message.IdRange;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.SelectedMailbox;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.CopyRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -38,8 +39,8 @@ public class CopyProcessor extends 
AbstractMessageRangeProcessor<CopyRequest> {
 
     @Inject
     public CopyProcessor(MailboxManager mailboxManager, StatusResponseFactory 
factory,
-                         MetricFactory metricFactory) {
-        super(CopyRequest.class, mailboxManager, factory, metricFactory);
+                         MetricFactory metricFactory, PathConverter.Factory 
pathConverterFactory) {
+        super(CopyRequest.class, mailboxManager, factory, metricFactory, 
pathConverterFactory);
     }
 
     @Override
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java
index e4a4c24883..99fc531c35 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java
@@ -41,17 +41,20 @@ import reactor.core.publisher.Mono;
 public class CreateProcessor extends AbstractMailboxProcessor<CreateRequest> {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(CreateProcessor.class);
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
     public CreateProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory,
-                           MetricFactory metricFactory) {
+                           MetricFactory metricFactory, PathConverter.Factory 
pathConverterFactory) {
         super(CreateRequest.class, mailboxManager, factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
     protected Mono<Void> processRequestReactive(CreateRequest request, 
ImapSession session, Responder responder) {
         MailboxManager mailboxManager = getMailboxManager();
 
-        return Mono.fromCallable(() -> 
PathConverter.forSession(session).buildFullPath(request.getMailboxName()))
+        return Mono.fromCallable(() -> 
pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName()))
             .flatMap(mailboxPath -> 
Mono.from(mailboxManager.createMailboxReactive(mailboxPath, 
session.getMailboxSession()))
                 .flatMap(mailboxId -> unsolicitedResponses(session, responder, 
false)
                     .then(Mono.fromRunnable(() -> okComplete(request, 
StatusResponse.ResponseCode.mailboxId(mailboxId), responder))))
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessor.java
index 08a87d0dc9..f96689a2e4 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessor.java
@@ -30,6 +30,7 @@ import 
org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.api.process.MailboxTyper;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.processor.base.AbstractProcessor;
 import org.apache.james.imap.processor.base.ImapResponseMessageProcessor;
 import org.apache.james.imap.processor.fetch.FetchProcessor;
@@ -55,6 +56,7 @@ public class DefaultProcessor implements ImapProcessor {
                                                        QuotaManager 
quotaManager,
                                                        QuotaRootResolver 
quotaRootResolver,
                                                        MetricFactory 
metricFactory) {
+        PathConverter.Factory pathConverterFactory = 
PathConverter.Factory.DEFAULT;
 
         ImmutableList.Builder<AbstractProcessor> builder = 
ImmutableList.builder();
         CapabilityProcessor capabilityProcessor = new 
CapabilityProcessor(mailboxManager, statusResponseFactory, metricFactory);
@@ -63,51 +65,51 @@ public class DefaultProcessor implements ImapProcessor {
         builder.add(capabilityProcessor);
         builder.add(new IdProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
         builder.add(new CheckProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
-        builder.add(new LoginProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
-        builder.add(new RenameProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
-        builder.add(new DeleteProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
-        builder.add(new CreateProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
+        builder.add(new LoginProcessor(mailboxManager, statusResponseFactory, 
metricFactory, pathConverterFactory));
+        builder.add(new RenameProcessor(mailboxManager, statusResponseFactory, 
metricFactory, pathConverterFactory));
+        builder.add(new DeleteProcessor(mailboxManager, statusResponseFactory, 
metricFactory, pathConverterFactory));
+        builder.add(new CreateProcessor(mailboxManager, statusResponseFactory, 
metricFactory, pathConverterFactory));
         builder.add(new CloseProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
-        builder.add(new UnsubscribeProcessor(mailboxManager, 
subscriptionManager, statusResponseFactory, metricFactory));
-        builder.add(new SubscribeProcessor(mailboxManager, 
subscriptionManager, statusResponseFactory, metricFactory));
-        builder.add(new CopyProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
-        builder.add(new AuthenticateProcessor(mailboxManager, 
statusResponseFactory, metricFactory));
+        builder.add(new UnsubscribeProcessor(mailboxManager, 
subscriptionManager, statusResponseFactory, metricFactory, 
pathConverterFactory));
+        builder.add(new SubscribeProcessor(mailboxManager, 
subscriptionManager, statusResponseFactory, metricFactory, 
pathConverterFactory));
+        builder.add(new CopyProcessor(mailboxManager, statusResponseFactory, 
metricFactory, pathConverterFactory));
+        builder.add(new AuthenticateProcessor(mailboxManager, 
statusResponseFactory, metricFactory, pathConverterFactory));
         builder.add(new ExpungeProcessor(mailboxManager, 
statusResponseFactory, metricFactory));
-        builder.add(new ReplaceProcessor(mailboxManager, 
statusResponseFactory, metricFactory));
-        builder.add(new ExamineProcessor(mailboxManager, eventBus, 
statusResponseFactory, metricFactory));
-        builder.add(new AppendProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
+        builder.add(new ReplaceProcessor(mailboxManager, 
statusResponseFactory, metricFactory, pathConverterFactory));
+        builder.add(new ExamineProcessor(mailboxManager, eventBus, 
statusResponseFactory, metricFactory, pathConverterFactory));
+        builder.add(new AppendProcessor(mailboxManager, statusResponseFactory, 
metricFactory, pathConverterFactory));
         builder.add(new StoreProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
         builder.add(new NoopProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
         builder.add(new IdleProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
-        StatusProcessor statusProcessor = new StatusProcessor(mailboxManager, 
statusResponseFactory, metricFactory);
+        StatusProcessor statusProcessor = new StatusProcessor(mailboxManager, 
statusResponseFactory, metricFactory, pathConverterFactory);
         builder.add(statusProcessor);
         builder.add(new LSubProcessor(mailboxManager, subscriptionManager, 
statusResponseFactory, metricFactory));
-        builder.add(new XListProcessor(mailboxManager, statusResponseFactory, 
mailboxTyper, metricFactory, subscriptionManager));
-        builder.add(new ListProcessor<>(mailboxManager, statusResponseFactory, 
metricFactory, subscriptionManager, statusProcessor, mailboxTyper));
+        builder.add(new XListProcessor(mailboxManager, statusResponseFactory, 
mailboxTyper, metricFactory, subscriptionManager, pathConverterFactory));
+        builder.add(new ListProcessor<>(mailboxManager, statusResponseFactory, 
metricFactory, subscriptionManager, statusProcessor, mailboxTyper, 
pathConverterFactory));
         builder.add(new SearchProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
-        builder.add(new SelectProcessor(mailboxManager, eventBus, 
statusResponseFactory, metricFactory));
+        builder.add(new SelectProcessor(mailboxManager, eventBus, 
statusResponseFactory, metricFactory, pathConverterFactory));
         builder.add(new NamespaceProcessor(mailboxManager, 
statusResponseFactory, metricFactory, new NamespaceSupplier.Default()));
         builder.add(new FetchProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
         builder.add(new StartTLSProcessor(statusResponseFactory));
         builder.add(new UnselectProcessor(mailboxManager, 
statusResponseFactory, metricFactory));
         builder.add(new CompressProcessor(statusResponseFactory));
-        builder.add(new GetACLProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
-        builder.add(new SetACLProcessor(mailboxManager, statusResponseFactory, 
metricFactory));
-        builder.add(new DeleteACLProcessor(mailboxManager, 
statusResponseFactory, metricFactory));
-        builder.add(new ListRightsProcessor(mailboxManager, 
statusResponseFactory, metricFactory));
-        builder.add(new MyRightsProcessor(mailboxManager, 
statusResponseFactory, metricFactory));
+        builder.add(new GetACLProcessor(mailboxManager, statusResponseFactory, 
metricFactory, pathConverterFactory));
+        builder.add(new SetACLProcessor(mailboxManager, statusResponseFactory, 
metricFactory, pathConverterFactory));
+        builder.add(new DeleteACLProcessor(mailboxManager, 
statusResponseFactory, metricFactory, pathConverterFactory));
+        builder.add(new ListRightsProcessor(mailboxManager, 
statusResponseFactory, metricFactory, pathConverterFactory));
+        builder.add(new MyRightsProcessor(mailboxManager, 
statusResponseFactory, metricFactory, pathConverterFactory));
         EnableProcessor enableProcessor = new EnableProcessor(mailboxManager, 
statusResponseFactory, metricFactory, capabilityProcessor);
         builder.add(enableProcessor);
         builder.add(new GetQuotaProcessor(mailboxManager, 
statusResponseFactory, quotaManager, quotaRootResolver, metricFactory));
         builder.add(new SetQuotaProcessor(mailboxManager, 
statusResponseFactory, metricFactory));
-        builder.add(new GetQuotaRootProcessor(mailboxManager, 
statusResponseFactory, quotaRootResolver, quotaManager, metricFactory));
+        builder.add(new GetQuotaRootProcessor(mailboxManager, 
statusResponseFactory, quotaRootResolver, quotaManager, metricFactory, 
pathConverterFactory));
         builder.add(new ImapResponseMessageProcessor());
         if 
(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)) {
-            builder.add(new MoveProcessor(mailboxManager, 
statusResponseFactory, metricFactory));
+            builder.add(new MoveProcessor(mailboxManager, 
statusResponseFactory, metricFactory, pathConverterFactory));
         }
         if 
(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Annotation)) {
-            builder.add(new SetMetadataProcessor(mailboxManager, 
statusResponseFactory, metricFactory));
-            builder.add(new GetMetadataProcessor(mailboxManager, 
statusResponseFactory, metricFactory));
+            builder.add(new SetMetadataProcessor(mailboxManager, 
statusResponseFactory, metricFactory, pathConverterFactory));
+            builder.add(new GetMetadataProcessor(mailboxManager, 
statusResponseFactory, metricFactory, pathConverterFactory));
         }
 
         ImmutableList<AbstractProcessor> processors = builder.build();
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java
index d0c0f33cb8..f34624337d 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java
@@ -57,10 +57,12 @@ public class DeleteACLProcessor extends 
AbstractMailboxProcessor<DeleteACLReques
     private static final Logger LOGGER = 
LoggerFactory.getLogger(DeleteACLProcessor.class);
 
     private static final List<Capability> CAPABILITIES = 
ImmutableList.of(ImapConstants.SUPPORTS_ACL);
+    private final PathConverter.Factory pathConverterFactory;
 
     @Inject
-    public DeleteACLProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory, MetricFactory metricFactory) {
+    public DeleteACLProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory, MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(DeleteACLRequest.class, mailboxManager, factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
@@ -69,7 +71,7 @@ public class DeleteACLProcessor extends 
AbstractMailboxProcessor<DeleteACLReques
         final MailboxSession mailboxSession = session.getMailboxSession();
         MailboxName mailboxName = request.getMailboxName();
         MailboxACL.EntryKey entryKey = request.getEntryKey();
-        MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(mailboxName.asString());
+        MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(mailboxName.asString());
 
         return checkLookupRight(request, responder, mailboxManager, 
mailboxSession, mailboxPath)
             .filter(FunctionalUtils.identityPredicate())
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java
index 2007ffdd17..040d8c3f2b 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java
@@ -43,15 +43,18 @@ import reactor.core.publisher.Mono;
 public class DeleteProcessor extends AbstractMailboxProcessor<DeleteRequest> {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(DeleteProcessor.class);
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
-    public DeleteProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory, MetricFactory metricFactory) {
+    public DeleteProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory, MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(DeleteRequest.class, mailboxManager, factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
     protected Mono<Void> processRequestReactive(DeleteRequest request, 
ImapSession session, Responder responder) {
         MailboxManager mailboxManager = getMailboxManager();
-        MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(request.getMailboxName());
+        MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName());
         SelectedMailbox selected = session.getSelected();
 
         return deselect(session, selected, mailboxPath)
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
index d765c6f9eb..6a03f55db8 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
@@ -28,6 +28,7 @@ import org.apache.james.events.EventBus;
 import org.apache.james.imap.api.message.IdRange;
 import org.apache.james.imap.api.message.UidRange;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.ExamineRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
@@ -37,8 +38,8 @@ public class ExamineProcessor extends 
AbstractSelectionProcessor<ExamineRequest>
 
     @Inject
     public ExamineProcessor(MailboxManager mailboxManager, EventBus eventBus, 
StatusResponseFactory statusResponseFactory,
-                            MetricFactory metricFactory) {
-        super(ExamineRequest.class, mailboxManager, statusResponseFactory, 
true, metricFactory, eventBus);
+                            MetricFactory metricFactory, PathConverter.Factory 
pathConverterFactory) {
+        super(ExamineRequest.class, mailboxManager, statusResponseFactory, 
pathConverterFactory, true, metricFactory, eventBus);
     }
 
     @Override
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java
index 11badd0c4f..0b770ab3be 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java
@@ -61,10 +61,13 @@ public class GetACLProcessor extends 
AbstractMailboxProcessor<GetACLRequest> imp
 
     private static final List<Capability> CAPABILITIES = 
ImmutableList.of(ImapConstants.SUPPORTS_ACL);
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
     public GetACLProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory,
-                           MetricFactory metricFactory) {
+                           MetricFactory metricFactory, PathConverter.Factory 
pathConverterFactory) {
         super(GetACLRequest.class, mailboxManager, factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
@@ -73,7 +76,7 @@ public class GetACLProcessor extends 
AbstractMailboxProcessor<GetACLRequest> imp
         MailboxSession mailboxSession = session.getMailboxSession();
         MailboxName mailboxName = request.getMailboxName();
 
-        MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(mailboxName.asString());
+        MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(mailboxName.asString());
 
         return Mono.from(mailboxManager.getMailboxReactive(mailboxPath, 
mailboxSession))
             .flatMap(Throwing.function(mailbox -> {
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetMetadataProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetMetadataProcessor.java
index 22fda73572..d8218a5a6d 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetMetadataProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetMetadataProcessor.java
@@ -65,10 +65,13 @@ public class GetMetadataProcessor extends 
AbstractMailboxProcessor<GetMetadataRe
     private static final Logger LOGGER = 
LoggerFactory.getLogger(GetMetadataProcessor.class);
     private final ImmutableList<Capability> capabilities;
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
     public GetMetadataProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory,
-                                MetricFactory metricFactory) {
+                                MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(GetMetadataRequest.class, mailboxManager, factory, 
metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
         this.capabilities = computeCapabilities();
     }
 
@@ -89,7 +92,8 @@ public class GetMetadataProcessor extends 
AbstractMailboxProcessor<GetMetadataRe
         String mailboxName = request.getMailboxName();
         Optional<Integer> maxsize = request.getMaxsize();
 
-        return getMailboxAnnotations(session, request.getKeys(), 
request.getDepth(), 
PathConverter.forSession(session).buildFullPath(mailboxName))
+        MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(mailboxName);
+        return getMailboxAnnotations(session, request.getKeys(), 
request.getDepth(), mailboxPath)
             .collectList()
             .flatMap(mailboxAnnotations -> Mono.fromCallable(() -> 
getMaxSizeValue(mailboxAnnotations, maxsize))
                 .flatMap(maximumOversizedSize -> Mono.fromRunnable(() -> 
respond(request, responder, mailboxName, mailboxAnnotations, maxsize, 
maximumOversizedSize)))
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java
index d176577f88..79bd8e75b3 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java
@@ -60,13 +60,15 @@ public class GetQuotaRootProcessor extends 
AbstractMailboxProcessor<GetQuotaRoot
 
     private final QuotaRootResolver quotaRootResolver;
     private final QuotaManager quotaManager;
+    private final PathConverter.Factory pathConverterFactory;
 
     @Inject
     public GetQuotaRootProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory, QuotaRootResolver quotaRootResolver, 
QuotaManager quotaManager,
-                                 MetricFactory metricFactory) {
+                                 MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(GetQuotaRootRequest.class, mailboxManager, factory, 
metricFactory);
         this.quotaRootResolver = quotaRootResolver;
         this.quotaManager = quotaManager;
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
@@ -79,7 +81,7 @@ public class GetQuotaRootProcessor extends 
AbstractMailboxProcessor<GetQuotaRoot
         final MailboxSession mailboxSession = session.getMailboxSession();
         final MailboxManager mailboxManager = getMailboxManager();
 
-        final MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(request.getMailboxName());
+        final MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName());
 
         // First check mailbox exists
         return Mono.from(mailboxManager.getMailboxReactive(mailboxPath, 
mailboxSession))
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
index 2875497ce4..bc2e347ad8 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
@@ -90,20 +90,23 @@ public class ListProcessor<T extends ListRequest> extends 
AbstractMailboxProcess
     private final StatusProcessor statusProcessor;
     protected final MailboxTyper mailboxTyper;
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
     public ListProcessor(MailboxManager mailboxManager, StatusResponseFactory 
factory,
                          MetricFactory metricFactory, SubscriptionManager 
subscriptionManager,
-                         StatusProcessor statusProcessor, MailboxTyper 
mailboxTyper) {
-        this((Class<T>) ListRequest.class, mailboxManager, factory, 
metricFactory, subscriptionManager, statusProcessor, mailboxTyper);
+                         StatusProcessor statusProcessor, MailboxTyper 
mailboxTyper, PathConverter.Factory pathConverterFactory) {
+        this((Class<T>) ListRequest.class, mailboxManager, factory, 
metricFactory, subscriptionManager, statusProcessor, mailboxTyper, 
pathConverterFactory);
     }
 
     public ListProcessor(Class<T> clazz, MailboxManager mailboxManager, 
StatusResponseFactory factory,
                          MetricFactory metricFactory, SubscriptionManager 
subscriptionManager,
-                         StatusProcessor statusProcessor, MailboxTyper 
mailboxTyper) {
+                         StatusProcessor statusProcessor, MailboxTyper 
mailboxTyper, PathConverter.Factory pathConverterFactory) {
         super(clazz, mailboxManager, factory, metricFactory);
         this.subscriptionManager = subscriptionManager;
         this.statusProcessor = statusProcessor;
         this.mailboxTyper = mailboxTyper;
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
@@ -360,7 +363,7 @@ public class ListProcessor<T extends ListRequest> extends 
AbstractMailboxProcess
         if (isRelative) {
             return MailboxPath.forUser(session.getUserName(), decodedName);
         } else {
-            return 
PathConverter.forSession(session).buildFullPath(decodedName);
+            return 
pathConverterFactory.forSession(session).buildFullPath(decodedName);
         }
     }
 
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
index 7c2c599006..a4d750ab7e 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
@@ -59,10 +59,13 @@ public class ListRightsProcessor extends 
AbstractMailboxProcessor<ListRightsRequ
 
     private static final List<Capability> CAPABILITIES = 
ImmutableList.of(ImapConstants.SUPPORTS_ACL);
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
     public ListRightsProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory,
-                               MetricFactory metricFactory) {
+                               MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(ListRightsRequest.class, mailboxManager, factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
@@ -70,7 +73,7 @@ public class ListRightsProcessor extends 
AbstractMailboxProcessor<ListRightsRequ
         MailboxManager mailboxManager = getMailboxManager();
         MailboxSession mailboxSession = session.getMailboxSession();
         MailboxName mailboxName = request.getMailboxName();
-        MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(mailboxName.asString());
+        MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(mailboxName.asString());
 
         return Mono.from(mailboxManager.getMailboxReactive(mailboxPath, 
mailboxSession))
             .doOnNext(Throwing.<MessageManager>consumer(mailbox -> {
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
index f435d8ec97..b4d20915f9 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
@@ -28,6 +28,7 @@ import org.apache.james.imap.api.display.HumanReadableText;
 import org.apache.james.imap.api.message.Capability;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapSession;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.LoginRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
@@ -45,8 +46,8 @@ public class LoginProcessor extends 
AbstractAuthProcessor<LoginRequest> implemen
     private static final Logger LOGGER = 
LoggerFactory.getLogger(LoginProcessor.class);
 
     @Inject
-    public LoginProcessor(MailboxManager mailboxManager, StatusResponseFactory 
factory, MetricFactory metricFactory) {
-        super(LoginRequest.class, mailboxManager, factory, metricFactory);
+    public LoginProcessor(MailboxManager mailboxManager, StatusResponseFactory 
factory, MetricFactory metricFactory, PathConverter.Factory 
pathConverterFactory) {
+        super(LoginRequest.class, mailboxManager, factory, metricFactory, 
pathConverterFactory);
     }
 
     @Override
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java
index 018264cead..6b66e9f937 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java
@@ -29,6 +29,7 @@ import org.apache.james.imap.api.message.IdRange;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.api.process.SelectedMailbox;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.MoveRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -47,8 +48,8 @@ public class MoveProcessor extends 
AbstractMessageRangeProcessor<MoveRequest> im
 
     @Inject
     public MoveProcessor(MailboxManager mailboxManager, StatusResponseFactory 
factory,
-                         MetricFactory metricFactory) {
-        super(MoveRequest.class, mailboxManager, factory, metricFactory);
+                         MetricFactory metricFactory, PathConverter.Factory 
pathConverterFactory) {
+        super(MoveRequest.class, mailboxManager, factory, metricFactory, 
pathConverterFactory);
         moveCapabilitySupported = 
mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move);
     }
 
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java
index ea2fc84d61..5baa4d9d6b 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java
@@ -58,9 +58,12 @@ public class MyRightsProcessor extends 
AbstractMailboxProcessor<MyRightsRequest>
 
     private static final List<Capability> CAPABILITIES = 
Collections.singletonList(ImapConstants.SUPPORTS_ACL);
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
-    public MyRightsProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory, MetricFactory metricFactory) {
+    public MyRightsProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory, MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(MyRightsRequest.class, mailboxManager, factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
@@ -69,7 +72,7 @@ public class MyRightsProcessor extends 
AbstractMailboxProcessor<MyRightsRequest>
         MailboxSession mailboxSession = session.getMailboxSession();
         MailboxName mailboxName = request.getMailboxName();
 
-        MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(mailboxName.asString());
+        MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(mailboxName.asString());
         return Mono.from(mailboxManager.getMailboxReactive(mailboxPath, 
mailboxSession))
             .doOnNext(Throwing.consumer(mailbox -> {
                 Rfc4314Rights myRights = 
mailboxManager.myRights(mailbox.getMailboxEntity(), mailboxSession);
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java
index 30b4c05043..eb61e4bcd1 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java
@@ -45,16 +45,19 @@ import reactor.core.publisher.Mono;
 public class RenameProcessor extends AbstractMailboxProcessor<RenameRequest> {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(RenameProcessor.class);
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
     public RenameProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory,
-                           MetricFactory metricFactory) {
+                           MetricFactory metricFactory, PathConverter.Factory 
pathConverterFactory) {
         super(RenameRequest.class, mailboxManager, factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
     protected Mono<Void> processRequestReactive(RenameRequest request, 
ImapSession session, Responder responder) {
         try {
-            PathConverter pathConverter = PathConverter.forSession(session);
+            PathConverter pathConverter = 
pathConverterFactory.forSession(session);
             MailboxPath existingPath = 
pathConverter.buildFullPath(request.getExistingName());
             MailboxPath newPath = 
pathConverter.buildFullPath(request.getNewName());
             MailboxManager mailboxManager = getMailboxManager();
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/ReplaceProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/ReplaceProcessor.java
index 74db0d3f14..757aea38a3 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/ReplaceProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/ReplaceProcessor.java
@@ -68,8 +68,11 @@ public class ReplaceProcessor extends 
AbstractMailboxProcessor<ReplaceRequest> i
     private static final Logger LOGGER = 
LoggerFactory.getLogger(ReplaceProcessor.class);
     private static final ImmutableList<Capability> CAPABILITIES = 
ImmutableList.of(Capability.of("REPLACE"));
 
-    public ReplaceProcessor(MailboxManager mailboxManager, 
StatusResponseFactory statusResponseFactory, MetricFactory metricFactory) {
+    private final PathConverter.Factory pathConverterFactory;
+
+    public ReplaceProcessor(MailboxManager mailboxManager, 
StatusResponseFactory statusResponseFactory, MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(ReplaceRequest.class, mailboxManager, statusResponseFactory, 
metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
@@ -83,7 +86,7 @@ public class ReplaceProcessor extends 
AbstractMailboxProcessor<ReplaceRequest> i
         final Content messageIn = request.getMessage().asMailboxContent();
         final Date datetime = request.getDatetime();
         final Flags flags = request.getFlags();
-        final MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(mailboxName);
+        final MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(mailboxName);
         final MailboxManager mailboxManager = getMailboxManager();
 
         session.stopDetectingCommandInjection();
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
index 721932fce1..fdfd4960e6 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
@@ -28,6 +28,7 @@ import org.apache.james.events.EventBus;
 import org.apache.james.imap.api.message.IdRange;
 import org.apache.james.imap.api.message.UidRange;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.SelectRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.metrics.api.MetricFactory;
@@ -37,8 +38,8 @@ public class SelectProcessor extends 
AbstractSelectionProcessor<SelectRequest> {
 
     @Inject
     public SelectProcessor(MailboxManager mailboxManager, EventBus eventBus, 
StatusResponseFactory statusResponseFactory,
-                           MetricFactory metricFactory) {
-        super(SelectRequest.class, mailboxManager, statusResponseFactory, 
false, metricFactory, eventBus);
+                           MetricFactory metricFactory, PathConverter.Factory 
pathConverterFactory) {
+        super(SelectRequest.class, mailboxManager, statusResponseFactory, 
pathConverterFactory, false, metricFactory, eventBus);
     }
 
     @Override
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java
index ace668d01a..660686c288 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java
@@ -58,10 +58,13 @@ public class SetACLProcessor extends 
AbstractMailboxProcessor<SetACLRequest> imp
 
     private static final List<Capability> CAPABILITIES = 
ImmutableList.of(ImapConstants.SUPPORTS_ACL);
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
     public SetACLProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory,
-                           MetricFactory metricFactory) {
+                           MetricFactory metricFactory, PathConverter.Factory 
pathConverterFactory) {
         super(SetACLRequest.class, mailboxManager, factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
@@ -69,7 +72,7 @@ public class SetACLProcessor extends 
AbstractMailboxProcessor<SetACLRequest> imp
         final MailboxManager mailboxManager = getMailboxManager();
         final MailboxSession mailboxSession = session.getMailboxSession();
         MailboxName mailboxName = request.getMailboxName();
-        MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(mailboxName.asString());
+        MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(mailboxName.asString());
 
         return checkLookupRight(request, responder, mailboxManager, 
mailboxSession, mailboxPath)
             .filter(FunctionalUtils.identityPredicate())
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetMetadataProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetMetadataProcessor.java
index d47f87c097..a3249960f5 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetMetadataProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetMetadataProcessor.java
@@ -57,10 +57,13 @@ public class SetMetadataProcessor extends 
AbstractMailboxProcessor<SetMetadataRe
     private static final Logger LOGGER = 
LoggerFactory.getLogger(SetMetadataProcessor.class);
     private final ImmutableList<Capability> capabilities;
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
     public SetMetadataProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory,
-                                MetricFactory metricFactory) {
+                                MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(SetMetadataRequest.class, mailboxManager, factory, 
metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
         this.capabilities = computeCapabilities();
     }
 
@@ -83,7 +86,7 @@ public class SetMetadataProcessor extends 
AbstractMailboxProcessor<SetMetadataRe
         final String mailboxName = request.getMailboxName();
 
         return Mono.from(mailboxManager.updateAnnotationsReactive(
-                PathConverter.forSession(session).buildFullPath(mailboxName),
+                
pathConverterFactory.forSession(session).buildFullPath(mailboxName),
                 mailboxSession, request.getMailboxAnnotations()))
             .then(Mono.fromRunnable(() -> okComplete(request, 
responder)).then())
             .doOnEach(logOnError(MailboxException.class,
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java
index 59314fcd68..a4aafb278e 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java
@@ -75,12 +75,15 @@ import reactor.core.publisher.Mono;
 public class StatusProcessor extends AbstractMailboxProcessor<StatusRequest> 
implements CapabilityImplementingProcessor {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(StatusProcessor.class);
 
+
+    private final PathConverter.Factory pathConverterFactory;
     private ImapConfiguration imapConfiguration;
 
     @Inject
     public StatusProcessor(MailboxManager mailboxManager, 
StatusResponseFactory factory,
-                           MetricFactory metricFactory) {
+                           MetricFactory metricFactory, PathConverter.Factory 
pathConverterFactory) {
         super(StatusRequest.class, mailboxManager, factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
@@ -96,7 +99,7 @@ public class StatusProcessor extends 
AbstractMailboxProcessor<StatusRequest> imp
 
     @Override
     protected Mono<Void> processRequestReactive(StatusRequest request, 
ImapSession session, Responder responder) {
-        MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(request.getMailboxName());
+        MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName());
         MailboxSession mailboxSession = session.getMailboxSession();
         StatusDataItems statusDataItems = request.getStatusDataItems();
 
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
index 096beefee1..eb52896edd 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
@@ -42,15 +42,18 @@ import reactor.core.publisher.Mono;
 public class SubscribeProcessor extends 
AbstractSubscriptionProcessor<SubscribeRequest> {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(SubscribeProcessor.class);
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
     public SubscribeProcessor(MailboxManager mailboxManager, 
SubscriptionManager subscriptionManager, StatusResponseFactory factory,
-                              MetricFactory metricFactory) {
+                              MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(SubscribeRequest.class, mailboxManager, subscriptionManager, 
factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
     protected Mono<Void> doProcessRequest(SubscribeRequest request, 
ImapSession session, Responder responder) {
-        MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(request.getMailboxName());
+        MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName());
         MailboxSession mailboxSession = session.getMailboxSession();
 
         return 
Mono.from(getSubscriptionManager().subscribeReactive(mailboxPath, 
mailboxSession))
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
index c39ab1b263..8f6ffdcdf3 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
@@ -43,15 +43,18 @@ import reactor.core.publisher.Mono;
 public class UnsubscribeProcessor extends 
AbstractSubscriptionProcessor<UnsubscribeRequest> {
     private static final Logger LOGGER = 
LoggerFactory.getLogger(UnsubscribeProcessor.class);
 
+    private final PathConverter.Factory pathConverterFactory;
+
     @Inject
     public UnsubscribeProcessor(MailboxManager mailboxManager, 
SubscriptionManager subscriptionManager, StatusResponseFactory factory,
-                                MetricFactory metricFactory) {
+                                MetricFactory metricFactory, 
PathConverter.Factory pathConverterFactory) {
         super(UnsubscribeRequest.class, mailboxManager, subscriptionManager, 
factory, metricFactory);
+        this.pathConverterFactory = pathConverterFactory;
     }
 
     @Override
     protected Mono<Void> doProcessRequest(UnsubscribeRequest request, 
ImapSession session, Responder responder) {
-        MailboxPath mailboxPath = 
PathConverter.forSession(session).buildFullPath(request.getMailboxName());
+        MailboxPath mailboxPath = 
pathConverterFactory.forSession(session).buildFullPath(request.getMailboxName());
         MailboxSession mailboxSession = session.getMailboxSession();
 
         return 
Mono.from(getSubscriptionManager().unsubscribeReactive(mailboxPath, 
mailboxSession))
diff --git 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java
 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java
index 3ec8b19b2c..a7eddc25e3 100644
--- 
a/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java
+++ 
b/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java
@@ -31,6 +31,7 @@ import 
org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.api.process.MailboxType;
 import org.apache.james.imap.api.process.MailboxTyper;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.ListRequest;
 import org.apache.james.imap.message.request.XListRequest;
 import org.apache.james.imap.message.response.XListResponse;
@@ -51,13 +52,13 @@ public class XListProcessor extends 
ListProcessor<XListRequest> implements Capab
 
     @Inject
     public XListProcessor(MailboxManager mailboxManager, StatusResponseFactory 
factory, MetricFactory metricFactory,
-                          SubscriptionManager subscriptionManager) {
-        this(mailboxManager, factory, null, metricFactory, 
subscriptionManager);
+                          SubscriptionManager subscriptionManager, 
PathConverter.Factory pathConverterFactory) {
+        this(mailboxManager, factory, null, metricFactory, 
subscriptionManager, pathConverterFactory);
     }
 
     public XListProcessor(MailboxManager mailboxManager, StatusResponseFactory 
factory, MailboxTyper mailboxTyper,
-                          MetricFactory metricFactory, SubscriptionManager 
subscriptionManager) {
-        super(XListRequest.class, mailboxManager, factory, metricFactory, 
subscriptionManager, null, mailboxTyper);
+                          MetricFactory metricFactory, SubscriptionManager 
subscriptionManager, PathConverter.Factory pathConverterFactory) {
+        super(XListRequest.class, mailboxManager, factory, metricFactory, 
subscriptionManager, null, mailboxTyper, pathConverterFactory);
     }
 
     @Override
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/main/PathConverterTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/main/PathConverterTest.java
index e6bc9b75c4..93d2970bd9 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/main/PathConverterTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/main/PathConverterTest.java
@@ -44,7 +44,7 @@ class PathConverterTest {
     void setUp() {
         imapSession = new FakeImapSession();
         mailboxSession = MailboxSessionUtil.create(USERNAME);
-        pathConverter = PathConverter.forSession(imapSession);
+        pathConverter = PathConverter.Factory.DEFAULT.forSession(imapSession);
         imapSession.setMailboxSession(mailboxSession);
     }
 
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/AbstractSelectionProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/AbstractSelectionProcessorTest.java
index 314a37f9dd..67f886a2fe 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/AbstractSelectionProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/AbstractSelectionProcessorTest.java
@@ -30,6 +30,7 @@ import org.apache.james.imap.api.message.IdRange;
 import org.apache.james.imap.api.message.UidRange;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.SelectedMailbox;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.metrics.api.MetricFactory;
@@ -45,7 +46,7 @@ public class AbstractSelectionProcessorTest {
         EventBus eventBus = null;
         StatusResponseFactory statusResponseFactory = null;
         MetricFactory metricFactory = null;
-        testee = new SelectProcessor(mailboxManager, eventBus, 
statusResponseFactory, metricFactory);
+        testee = new SelectProcessor(mailboxManager, eventBus, 
statusResponseFactory, metricFactory, PathConverter.Factory.DEFAULT);
     }
 
     @Test
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java
index 0fd12e9445..66a18ba397 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java
@@ -40,6 +40,7 @@ import 
org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.api.process.SelectedMailbox;
 import org.apache.james.imap.encode.FakeImapSession;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.CopyRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -86,7 +87,7 @@ class CopyProcessorTest {
         imapSession = new FakeImapSession();
         mailboxSession = MailboxSessionUtil.create(USERNAME);
 
-        testee = new CopyProcessor(mockMailboxManager, 
mockStatusResponseFactory, new RecordingMetricFactory());
+        testee = new CopyProcessor(mockMailboxManager, 
mockStatusResponseFactory, new RecordingMetricFactory(), 
PathConverter.Factory.DEFAULT);
 
         imapSession.authenticated();
         imapSession.setMailboxSession(mailboxSession);
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/DeleteACLProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/DeleteACLProcessorTest.java
index 88233e5a50..4f3a1dbdb6 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/DeleteACLProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/DeleteACLProcessorTest.java
@@ -33,6 +33,7 @@ import org.apache.james.imap.api.ImapConstants;
 import org.apache.james.imap.api.message.response.ImapResponseMessage;
 import org.apache.james.imap.api.process.ImapProcessor.Responder;
 import org.apache.james.imap.encode.FakeImapSession;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.MailboxName;
 import org.apache.james.imap.message.request.DeleteACLRequest;
 import org.apache.james.imap.message.response.UnpooledStatusResponseFactory;
@@ -81,7 +82,7 @@ class DeleteACLProcessorTest {
             Object[] args = invocation.getArguments();
             return (Mono) args[0];
         });
-        subject = new DeleteACLProcessor(mailboxManager, 
statusResponseFactory, new RecordingMetricFactory());
+        subject = new DeleteACLProcessor(mailboxManager, 
statusResponseFactory, new RecordingMetricFactory(), 
PathConverter.Factory.DEFAULT);
         imapSession = new FakeImapSession();
         mailboxSession = MailboxSessionUtil.create(USER_1);
 
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java
index 7968cea29b..339cb3369c 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java
@@ -36,6 +36,7 @@ import org.apache.james.imap.api.ImapConstants;
 import org.apache.james.imap.api.message.response.ImapResponseMessage;
 import org.apache.james.imap.api.process.ImapProcessor.Responder;
 import org.apache.james.imap.encode.FakeImapSession;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.MailboxName;
 import org.apache.james.imap.message.request.GetACLRequest;
 import org.apache.james.imap.message.response.ACLResponse;
@@ -83,7 +84,7 @@ class GetACLProcessorTest {
             Object[] args = invocation.getArguments();
             return (Mono) args[0];
         });
-        subject = new GetACLProcessor(mailboxManager, statusResponseFactory, 
new RecordingMetricFactory());
+        subject = new GetACLProcessor(mailboxManager, statusResponseFactory, 
new RecordingMetricFactory(), PathConverter.Factory.DEFAULT);
         imapSession = new FakeImapSession();
         mailboxSession = MailboxSessionUtil.create(USER_1);
         MessageManager messageManager = mock(MessageManager.class);
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetAnnotationProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetAnnotationProcessorTest.java
index 9d15f391b3..4a1453b3e3 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetAnnotationProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetAnnotationProcessorTest.java
@@ -43,6 +43,7 @@ import 
org.apache.james.imap.api.message.response.StatusResponse.ResponseCode;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.encode.FakeImapSession;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.GetMetadataRequest;
 import org.apache.james.imap.message.request.GetMetadataRequest.Depth;
 import org.apache.james.imap.message.response.MetadataResponse;
@@ -126,7 +127,7 @@ class GetAnnotationProcessorTest {
         MockitoAnnotations.initMocks(this);
         initAndMockData();
 
-        processor = new GetMetadataProcessor(mockMailboxManager, 
mockStatusResponseFactory, new RecordingMetricFactory());
+        processor = new GetMetadataProcessor(mockMailboxManager, 
mockStatusResponseFactory, new RecordingMetricFactory(), 
PathConverter.Factory.DEFAULT);
     }
 
     @Test
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaRootProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaRootProcessorTest.java
index be0fa6b84c..131360dd24 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaRootProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaRootProcessorTest.java
@@ -42,6 +42,7 @@ import 
org.apache.james.imap.api.message.response.ImapResponseMessage;
 import org.apache.james.imap.api.message.response.StatusResponse;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.encode.FakeImapSession;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.GetQuotaRootRequest;
 import org.apache.james.imap.message.response.QuotaResponse;
 import org.apache.james.imap.message.response.QuotaRootResponse;
@@ -103,7 +104,7 @@ class GetQuotaRootProcessorTest {
             .thenReturn(Mono.just(messageManager));
         
when(messageManager.getMailboxEntity()).thenReturn(mock(Mailbox.class));
         testee = new GetQuotaRootProcessor(mockedMailboxManager,
-            statusResponseFactory, mockedQuotaRootResolver, 
mockedQuotaManager, new RecordingMetricFactory());
+            statusResponseFactory, mockedQuotaRootResolver, 
mockedQuotaManager, new RecordingMetricFactory(), 
PathConverter.Factory.DEFAULT);
     }
 
     @Test
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java
index 839efe4d6f..c069d7b4e3 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java
@@ -37,6 +37,7 @@ import org.apache.james.imap.api.ImapConstants;
 import org.apache.james.imap.api.message.response.ImapResponseMessage;
 import org.apache.james.imap.api.process.ImapProcessor.Responder;
 import org.apache.james.imap.encode.FakeImapSession;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.MailboxName;
 import org.apache.james.imap.message.request.ListRightsRequest;
 import org.apache.james.imap.message.response.ListRightsResponse;
@@ -90,7 +91,7 @@ class ListRightsProcessorTest {
             Object[] args = invocation.getArguments();
             return (Mono) args[0];
         });
-        subject = new ListRightsProcessor(mailboxManager, 
statusResponseFactory, new RecordingMetricFactory());
+        subject = new ListRightsProcessor(mailboxManager, 
statusResponseFactory, new RecordingMetricFactory(), 
PathConverter.Factory.DEFAULT);
         imapSession = new FakeImapSession();
         mailboxSession = MailboxSessionUtil.create(USER_1);
         MessageManager messageManager = mock(MessageManager.class);
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java
index d5d315c67d..9e7f4cf9f3 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java
@@ -41,6 +41,7 @@ import 
org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.api.process.SelectedMailbox;
 import org.apache.james.imap.encode.FakeImapSession;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.MoveRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxManager.MailboxCapabilities;
@@ -88,7 +89,7 @@ public class MoveProcessorTest {
         mailboxSession = MailboxSessionUtil.create(USERNAME);
 
         
when(mockMailboxManager.hasCapability(eq(MailboxCapabilities.Move))).thenReturn(true);
-        testee = new MoveProcessor(mockMailboxManager, 
mockStatusResponseFactory, new RecordingMetricFactory());
+        testee = new MoveProcessor(mockMailboxManager, 
mockStatusResponseFactory, new RecordingMetricFactory(), 
PathConverter.Factory.DEFAULT);
         verify(mockMailboxManager).hasCapability(MailboxCapabilities.Move);
 
         imapSession.authenticated();
@@ -103,7 +104,7 @@ public class MoveProcessorTest {
     @Test
     void 
getImplementedCapabilitiesShouldNotContainMoveWhenUnSupportedByMailboxManager() 
{
         
when(mockMailboxManager.hasCapability(eq(MailboxCapabilities.Move))).thenReturn(false);
-        assertThat(new MoveProcessor(mockMailboxManager, 
mockStatusResponseFactory, new RecordingMetricFactory())
+        assertThat(new MoveProcessor(mockMailboxManager, 
mockStatusResponseFactory, new RecordingMetricFactory(), 
PathConverter.Factory.DEFAULT)
                 .getImplementedCapabilities(null)).isEmpty();
     }
 
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/SelectProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/SelectProcessorTest.java
index ddf910c2c1..a0e339baf0 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/SelectProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/SelectProcessorTest.java
@@ -36,6 +36,7 @@ import org.apache.james.imap.encode.FakeImapSession;
 import org.apache.james.imap.encode.base.ImapResponseComposerImpl;
 import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
 import org.apache.james.imap.encode.main.DefaultLocalizer;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.main.ResponseEncoder;
 import org.apache.james.imap.message.request.AbstractMailboxSelectionRequest;
 import org.apache.james.imap.message.request.SelectRequest;
@@ -68,7 +69,8 @@ class SelectProcessorTest {
         testee = new SelectProcessor(mailboxManager,
             integrationResources.getEventBus(),
             new UnpooledStatusResponseFactory(),
-            new RecordingMetricFactory());
+            new RecordingMetricFactory(),
+            PathConverter.Factory.DEFAULT);
 
         mailboxSession = 
mailboxManager.createSystemSession(Username.of("bob"));
         mailboxManager.createMailbox(MailboxPath.inbox(BOB), mailboxSession);
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/SetACLProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/SetACLProcessorTest.java
index 207f72624c..354b8dd562 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/SetACLProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/SetACLProcessorTest.java
@@ -34,6 +34,7 @@ import org.apache.james.imap.api.ImapConstants;
 import org.apache.james.imap.api.message.response.ImapResponseMessage;
 import org.apache.james.imap.api.process.ImapProcessor.Responder;
 import org.apache.james.imap.encode.FakeImapSession;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.MailboxName;
 import org.apache.james.imap.message.request.SetACLRequest;
 import org.apache.james.imap.message.response.UnpooledStatusResponseFactory;
@@ -88,7 +89,7 @@ class SetACLProcessorTest {
             Object[] args = invocation.getArguments();
             return (Mono) args[0];
         });
-        subject = new SetACLProcessor(mailboxManager, statusResponseFactory, 
new RecordingMetricFactory());
+        subject = new SetACLProcessor(mailboxManager, statusResponseFactory, 
new RecordingMetricFactory(), PathConverter.Factory.DEFAULT);
         imapSession = new FakeImapSession();
         mailboxSession = MailboxSessionUtil.create(USER_1);
         MessageManager messageManager = mock(MessageManager.class);
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/SetMetadataProcessorTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/SetMetadataProcessorTest.java
index a61bca7656..4a7c580a1a 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/processor/SetMetadataProcessorTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/processor/SetMetadataProcessorTest.java
@@ -40,6 +40,7 @@ import 
org.apache.james.imap.api.message.response.StatusResponse;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.encode.FakeImapSession;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.request.SetMetadataRequest;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -103,7 +104,7 @@ class SetMetadataProcessorTest {
     void setUp() {
         MockitoAnnotations.initMocks(this);
         initAndMockData();
-        processor = new SetMetadataProcessor(mockMailboxManager, 
mockStatusResponseFactory, new RecordingMetricFactory());
+        processor = new SetMetadataProcessor(mockMailboxManager, 
mockStatusResponseFactory, new RecordingMetricFactory(), 
PathConverter.Factory.DEFAULT);
     }
 
     @Test
diff --git 
a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
 
b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
index d5f33d874a..617f75630f 100644
--- 
a/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
+++ 
b/server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
@@ -50,6 +50,7 @@ import org.apache.james.imap.encode.base.EndImapEncoder;
 import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
 import org.apache.james.imap.encode.main.DefaultLocalizer;
 import org.apache.james.imap.main.DefaultImapDecoderFactory;
+import org.apache.james.imap.main.PathConverter;
 import org.apache.james.imap.message.response.UnpooledStatusResponseFactory;
 import org.apache.james.imap.processor.AuthenticateProcessor;
 import org.apache.james.imap.processor.CapabilityImplementingProcessor;
@@ -106,6 +107,7 @@ public class IMAPServerModule extends AbstractModule {
         bind(StatusProcessor.class).in(Scopes.SINGLETON);
         bind(EnableProcessor.class).in(Scopes.SINGLETON);
         
bind(NamespaceSupplier.class).to(NamespaceSupplier.Default.class).in(Scopes.SINGLETON);
+        
bind(PathConverter.Factory.class).to(PathConverter.Factory.Default.class).in(Scopes.SINGLETON);
         
bind(MailboxTyper.class).to(DefaultMailboxTyper.class).in(Scopes.SINGLETON);
 
         Multibinder.newSetBinder(binder(), 
GuiceProbe.class).addBinding().to(ImapGuiceProbe.class);
diff --git 
a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java
 
b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java
index c39d54c032..76f8a4d0af 100644
--- 
a/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java
+++ 
b/server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java
@@ -21,6 +21,7 @@ package org.apache.james.imapserver.netty;
 
 import static jakarta.mail.Flags.Flag.ANSWERED;
 import static jakarta.mail.Folder.READ_WRITE;
+import static org.apache.james.jmap.JMAPTestingConstants.BOB;
 import static org.apache.james.jmap.JMAPTestingConstants.LOCALHOST_IP;
 import static org.apache.james.jwt.OidcTokenFixture.INTROSPECTION_RESPONSE;
 import static org.apache.james.mailbox.MessageManager.FlagsUpdateMode.REPLACE;


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org


Reply via email to