in protocols/imap/src/main/java/org/apache/james/imap/main/PathConverter.java [175:242]
public MailboxQuery mailboxQuery(String finalReferencename, String mailboxName, ImapSession session) {
MailboxSession mailboxSession = session.getMailboxSession();
String decodedMailboxName = ModifiedUtf7.decodeModifiedUTF7(mailboxName);
if (finalReferencename.isEmpty()) {
if (mailboxName.equals("*")) {
return MailboxQuery.builder()
.matchesAllMailboxNames()
.build();
}
int delimiterPosition = mailboxName.indexOf(mailboxSession.getPathDelimiter());
if (mailboxName.startsWith("#") && delimiterPosition > 0 && delimiterPosition + 1 < mailboxName.length()) {
return mailboxQuery(mailboxName.substring(0, delimiterPosition),
mailboxName.substring(delimiterPosition + 1),
session);
}
return MailboxQuery.builder()
.expression(new PrefixedRegex(
"",
decodedMailboxName,
mailboxSession.getPathDelimiter()))
.build();
}
MailboxPath basePath = computeBasePath(session, finalReferencename);
if (basePath.getNamespace().equals(MailboxConstants.USER_NAMESPACE)
&& basePath.getUser() == null) {
int separatorPosition = decodedMailboxName.indexOf(mailboxSession.getPathDelimiter());
if (separatorPosition >= 0) {
// interpret first part as the user
Username username = Username.of(decodedMailboxName.substring(0, separatorPosition));
return MailboxQuery.builder()
.namespace(MailboxConstants.USER_NAMESPACE)
.username(username)
.expression(new PrefixedRegex(
basePath.getName(),
decodedMailboxName.substring(separatorPosition + 1),
mailboxSession.getPathDelimiter()))
.build();
}
return MailboxQuery.builder()
.namespace(MailboxConstants.USER_NAMESPACE)
.expression(new PrefixedRegex(
basePath.getName(),
decodedMailboxName,
mailboxSession.getPathDelimiter()))
.build();
}
if (basePath.getNamespace().equals(MailboxConstants.USER_NAMESPACE)
&& basePath.getUser().equals(mailboxSession.getUser())
&& basePath.getName().isEmpty()
&& mailboxName.equals("*")) {
return MailboxQuery.builder()
.userAndNamespaceFrom(basePath)
.expression(Wildcard.INSTANCE)
.build();
}
return MailboxQuery.builder()
.userAndNamespaceFrom(basePath)
.expression(new PrefixedRegex(
basePath.getName(),
decodedMailboxName,
mailboxSession.getPathDelimiter()))
.build();
}