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 d5def5a030e3609bc7f575ca67a9901954d29975
Author: Jan-Eric Hellenberg <janeric.hellenb...@gmail.com>
AuthorDate: Wed Jan 8 10:26:43 2025 +0100

    James-4099 Allow more characters as path delimiter
---
 docs/modules/servers/partials/configure/jvm.adoc   |  2 +-
 .../james/mailbox/model/MailboxConstants.java      | 14 ++++++--
 .../james/mailbox/model/MailboxPathTest.java       | 36 +++++++++++++++++++--
 .../mailbox/model/search/PrefixedRegexTest.java    | 37 ++++++++++++++++++++--
 .../james/imap/main/DefaultPathConverterTest.java  | 37 ++++++++++++++++++++--
 .../docker-configuration/jvm.properties            |  2 +-
 .../sample-configuration/jvm.properties            |  2 +-
 .../docker-configuration/jvm.properties            |  2 +-
 .../sample-configuration/jvm.properties            |  2 +-
 .../docker-configuration/jvm.properties            |  2 +-
 .../sample-configuration/jvm.properties            |  2 +-
 .../jpa-app/sample-configuration/jvm.properties    |  2 +-
 .../sample-configuration/jvm.properties            |  2 +-
 .../memory-app/sample-configuration/jvm.properties |  2 +-
 .../sample-configuration/jvm.properties            |  2 +-
 15 files changed, 127 insertions(+), 19 deletions(-)

diff --git a/docs/modules/servers/partials/configure/jvm.adoc 
b/docs/modules/servers/partials/configure/jvm.adoc
index 11f22bc5a3..0147537a8a 100644
--- a/docs/modules/servers/partials/configure/jvm.adoc
+++ b/docs/modules/servers/partials/configure/jvm.adoc
@@ -18,7 +18,7 @@ Ex in `jvm.properties`
 james.mailbox.folder.delimiter=dot
 ----
 
-Allowed values are: dot (will use '.' as delimiter), slash (will use '/' as 
delimiter).
+Allowed values are: dot (will use '.' as delimiter), slash (will use '/' as 
delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
 
 == Control the threshold memory
 This governs the threshold MimeMessageInputStreamSource relies on for storing 
MimeMessage content on disk.
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxConstants.java
 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxConstants.java
index 3afd9f21c7..6117e2b9e1 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxConstants.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxConstants.java
@@ -38,9 +38,19 @@ public class MailboxConstants {
     public static char FOLDER_DELIMITER = 
Optional.ofNullable(System.getProperty("james.mailbox.folder.delimiter"))
             
.map(MailboxFolderDelimiter::parse).orElse(MailboxFolderDelimiter.DOT).value;
 
-    enum MailboxFolderDelimiter {
+    public enum MailboxFolderDelimiter {
+        // NOTE: When changing this list, make sure to adjust the 
MailboxFolderDelimiterAwareTests as well.
+        // Values currently left-out explicitly:
+        // hash sign '#' (Clashes with namespace prefix character)
+        // backslash '\\' (Anticipated some problems with the PrefixedRegex 
matching.
+        //                 Also, because it is the escaping character, it can 
generally be a bit more annoying
+        //                 to deal with in strings)
         DOT('.'),
-        SLASH('/');
+        SLASH('/'),
+        PIPE('|'),
+        COMMA(','),
+        COLON(':'),
+        SEMICOLON(';');
 
         public final char value;
 
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
index 2542651543..01d11637fb 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
@@ -48,7 +48,7 @@ class MailboxPathTest {
     public class DotDelimiter extends TestBase {
         @Override
         public char folderDelimiter() {
-            return '.';
+            return MailboxConstants.MailboxFolderDelimiter.DOT.value;
         }
     }
 
@@ -56,7 +56,39 @@ class MailboxPathTest {
     public class SlashDelimiter extends TestBase {
         @Override
         public char folderDelimiter() {
-            return '/';
+            return MailboxConstants.MailboxFolderDelimiter.SLASH.value;
+        }
+    }
+
+    @Nested
+    public class PipeDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.PIPE.value;
+        }
+    }
+
+    @Nested
+    public class CommaDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.COMMA.value;
+        }
+    }
+
+    @Nested
+    public class ColonDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.COLON.value;
+        }
+    }
+
+    @Nested
+    public class SemicolonDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.SEMICOLON.value;
         }
     }
 
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java
index d72becf65a..e15ff3269f 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java
@@ -25,6 +25,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxFolderDelimiterAwareTest;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
@@ -38,7 +39,7 @@ class PrefixedRegexTest {
     public class DotDelimiter extends TestBase {
         @Override
         public char folderDelimiter() {
-            return '.';
+            return MailboxConstants.MailboxFolderDelimiter.DOT.value;
         }
     }
 
@@ -46,7 +47,39 @@ class PrefixedRegexTest {
     public class SlashDelimiter extends TestBase {
         @Override
         public char folderDelimiter() {
-            return '/';
+            return MailboxConstants.MailboxFolderDelimiter.SLASH.value;
+        }
+    }
+
+    @Nested
+    public class PipeDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.PIPE.value;
+        }
+    }
+
+    @Nested
+    public class CommaDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.COMMA.value;
+        }
+    }
+
+    @Nested
+    public class ColonDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.COLON.value;
+        }
+    }
+
+    @Nested
+    public class SemicolonDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.SEMICOLON.value;
         }
     }
 
diff --git 
a/protocols/imap/src/test/java/org/apache/james/imap/main/DefaultPathConverterTest.java
 
b/protocols/imap/src/test/java/org/apache/james/imap/main/DefaultPathConverterTest.java
index 476d1c670e..29535c69eb 100644
--- 
a/protocols/imap/src/test/java/org/apache/james/imap/main/DefaultPathConverterTest.java
+++ 
b/protocols/imap/src/test/java/org/apache/james/imap/main/DefaultPathConverterTest.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.imap.main;
 
+import org.apache.james.mailbox.model.MailboxConstants;
 import org.junit.jupiter.api.Nested;
 
 public class DefaultPathConverterTest {
@@ -26,7 +27,7 @@ public class DefaultPathConverterTest {
     public class DotDelimiter extends TestBase {
         @Override
         public char folderDelimiter() {
-            return '.';
+            return MailboxConstants.MailboxFolderDelimiter.DOT.value;
         }
     }
 
@@ -34,7 +35,39 @@ public class DefaultPathConverterTest {
     public class SlashDelimiter extends TestBase {
         @Override
         public char folderDelimiter() {
-            return '/';
+            return MailboxConstants.MailboxFolderDelimiter.SLASH.value;
+        }
+    }
+
+    @Nested
+    public class PipeDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.PIPE.value;
+        }
+    }
+
+    @Nested
+    public class CommaDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.COMMA.value;
+        }
+    }
+
+    @Nested
+    public class ColonDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.COLON.value;
+        }
+    }
+
+    @Nested
+    public class SemicolonDelimiter extends TestBase {
+        @Override
+        public char folderDelimiter() {
+            return MailboxConstants.MailboxFolderDelimiter.SEMICOLON.value;
         }
     }
 
diff --git a/server/apps/cassandra-app/docker-configuration/jvm.properties 
b/server/apps/cassandra-app/docker-configuration/jvm.properties
index 3c81157e45..c4f1119578 100644
--- a/server/apps/cassandra-app/docker-configuration/jvm.properties
+++ b/server/apps/cassandra-app/docker-configuration/jvm.properties
@@ -5,7 +5,7 @@
 # my.property=whatever
 
 # The delimiter used to separate parent/child folders.
-# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter).
+# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
 # WARNING: This value should only be changed when setting up a new deployment. 
Changing the parameter for an existing deployments
 # will likely lead to failure of some system components, as occurrences of old 
delimiter will still be present in the database/data store.
 # james.mailbox.folder.delimiter=dot
diff --git a/server/apps/cassandra-app/sample-configuration/jvm.properties 
b/server/apps/cassandra-app/sample-configuration/jvm.properties
index d763daefa8..0fdbbe1172 100644
--- a/server/apps/cassandra-app/sample-configuration/jvm.properties
+++ b/server/apps/cassandra-app/sample-configuration/jvm.properties
@@ -5,7 +5,7 @@
 # my.property=whatever
 
 # The delimiter used to separate parent/child folders.
-# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter).
+# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
 # WARNING: This value should only be changed when setting up a new deployment. 
Changing the parameter for an existing deployments
 # will likely lead to failure of some system components, as occurrences of old 
delimiter will still be present in the database/data store.
 # james.mailbox.folder.delimiter=dot
diff --git a/server/apps/distributed-app/docker-configuration/jvm.properties 
b/server/apps/distributed-app/docker-configuration/jvm.properties
index 3c81157e45..c4f1119578 100644
--- a/server/apps/distributed-app/docker-configuration/jvm.properties
+++ b/server/apps/distributed-app/docker-configuration/jvm.properties
@@ -5,7 +5,7 @@
 # my.property=whatever
 
 # The delimiter used to separate parent/child folders.
-# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter).
+# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
 # WARNING: This value should only be changed when setting up a new deployment. 
Changing the parameter for an existing deployments
 # will likely lead to failure of some system components, as occurrences of old 
delimiter will still be present in the database/data store.
 # james.mailbox.folder.delimiter=dot
diff --git a/server/apps/distributed-app/sample-configuration/jvm.properties 
b/server/apps/distributed-app/sample-configuration/jvm.properties
index 600d91b329..20b9d1c067 100644
--- a/server/apps/distributed-app/sample-configuration/jvm.properties
+++ b/server/apps/distributed-app/sample-configuration/jvm.properties
@@ -8,7 +8,7 @@
 config.file=conf/cassandra-driver.conf
 
 # The delimiter used to separate parent/child folders.
-# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter).
+# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
 # WARNING: This value should only be changed when setting up a new deployment. 
Changing the parameter for an existing deployments
 # will likely lead to failure of some system components, as occurrences of old 
delimiter will still be present in the database/data store.
 # james.mailbox.folder.delimiter=dot
diff --git 
a/server/apps/distributed-pop3-app/docker-configuration/jvm.properties 
b/server/apps/distributed-pop3-app/docker-configuration/jvm.properties
index 3c81157e45..c4f1119578 100644
--- a/server/apps/distributed-pop3-app/docker-configuration/jvm.properties
+++ b/server/apps/distributed-pop3-app/docker-configuration/jvm.properties
@@ -5,7 +5,7 @@
 # my.property=whatever
 
 # The delimiter used to separate parent/child folders.
-# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter).
+# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
 # WARNING: This value should only be changed when setting up a new deployment. 
Changing the parameter for an existing deployments
 # will likely lead to failure of some system components, as occurrences of old 
delimiter will still be present in the database/data store.
 # james.mailbox.folder.delimiter=dot
diff --git 
a/server/apps/distributed-pop3-app/sample-configuration/jvm.properties 
b/server/apps/distributed-pop3-app/sample-configuration/jvm.properties
index 37646e5cec..fb6e7bae9f 100644
--- a/server/apps/distributed-pop3-app/sample-configuration/jvm.properties
+++ b/server/apps/distributed-pop3-app/sample-configuration/jvm.properties
@@ -5,7 +5,7 @@
 # my.property=whatever
 
 # The delimiter used to separate parent/child folders.
-# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter).
+# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
 # WARNING: This value should only be changed when setting up a new deployment. 
Changing the parameter for an existing deployments
 # will likely lead to failure of some system components, as occurrences of old 
delimiter will still be present in the database/data store.
 # james.mailbox.folder.delimiter=dot
diff --git a/server/apps/jpa-app/sample-configuration/jvm.properties 
b/server/apps/jpa-app/sample-configuration/jvm.properties
index 8cf7dfb861..6e5c37ba68 100644
--- a/server/apps/jpa-app/sample-configuration/jvm.properties
+++ b/server/apps/jpa-app/sample-configuration/jvm.properties
@@ -5,7 +5,7 @@
 # my.property=whatever
 
 # The delimiter used to separate parent/child folders.
-# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter).
+# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
 # WARNING: This value should only be changed when setting up a new deployment. 
Changing the parameter for an existing deployments
 # will likely lead to failure of some system components, as occurrences of old 
delimiter will still be present in the database/data store.
 # james.mailbox.folder.delimiter=dot
diff --git a/server/apps/jpa-smtp-app/sample-configuration/jvm.properties 
b/server/apps/jpa-smtp-app/sample-configuration/jvm.properties
index a90fd7a31f..e9d55bd151 100644
--- a/server/apps/jpa-smtp-app/sample-configuration/jvm.properties
+++ b/server/apps/jpa-smtp-app/sample-configuration/jvm.properties
@@ -5,7 +5,7 @@
 # my.property=whatever
 
 # The delimiter used to separate parent/child folders.
-# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter).
+# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
 # WARNING: This value should only be changed when setting up a new deployment. 
Changing the parameter for an existing deployments
 # will likely lead to failure of some system components, as occurrences of old 
delimiter will still be present in the database/data store.
 # james.mailbox.folder.delimiter=dot
diff --git a/server/apps/memory-app/sample-configuration/jvm.properties 
b/server/apps/memory-app/sample-configuration/jvm.properties
index c362f00894..19fc9a33c0 100644
--- a/server/apps/memory-app/sample-configuration/jvm.properties
+++ b/server/apps/memory-app/sample-configuration/jvm.properties
@@ -5,7 +5,7 @@
 # my.property=whatever
 
 # The delimiter used to separate parent/child folders.
-# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter).
+# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
 # WARNING: This value should only be changed when setting up a new deployment. 
Changing the parameter for an existing deployments
 # will likely lead to failure of some system components, as occurrences of old 
delimiter will still be present in the database/data store.
 # james.mailbox.folder.delimiter=dot
diff --git 
a/server/apps/scaling-pulsar-smtp/sample-configuration/jvm.properties 
b/server/apps/scaling-pulsar-smtp/sample-configuration/jvm.properties
index 886dec96f5..9e3220b277 100644
--- a/server/apps/scaling-pulsar-smtp/sample-configuration/jvm.properties
+++ b/server/apps/scaling-pulsar-smtp/sample-configuration/jvm.properties
@@ -5,7 +5,7 @@
 # my.property=whatever
 
 # The delimiter used to separate parent/child folders.
-# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter).
+# Optional. Allowed values are: dot (will use '.' as delimiter), slash (will 
use '/' as delimiter), pipe ('|'), comma (','), colon (':'), semicolon (';').
 # WARNING: This value should only be changed when setting up a new deployment. 
Changing the parameter for an existing deployments
 # will likely lead to failure of some system components, as occurrences of old 
delimiter will still be present in the database/data store.
 # james.mailbox.folder.delimiter=dot


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

Reply via email to