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