public LSubProcessor(ImapProcessor next, MailboxManager mailboxManager, SubscriptionManager subscriptionManager, StatusResponseFactory factory) {
super(LsubRequest.class, next, mailboxManager, subscriptionManager, factory);
}
private void listSubscriptions(ImapSession session, Responder responder, final String referenceName, final String mailboxName) throws SubscriptionException, MailboxException {
final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
final Collection<String> mailboxes = getSubscriptionManager().subscriptions(mailboxSession);
// If the mailboxName is fully qualified, ignore the reference name.
String finalReferencename = referenceName;
if (mailboxName.charAt(0) == MailboxConstants.NAMESPACE_PREFIX_CHAR) {
finalReferencename = "";
}
// Is the interpreted (combined) pattern relative?
boolean isRelative = ((finalReferencename + mailboxName).charAt(0) != MailboxConstants.NAMESPACE_PREFIX_CHAR);
MailboxPath basePath = null;
if (isRelative) {
basePath = new MailboxPath(MailboxConstants.USER_NAMESPACE, mailboxSession.getUser().getUserName(), CharsetUtil.decodeModifiedUTF7(finalReferencename));
} else {
basePath = buildFullPath(session, CharsetUtil.decodeModifiedUTF7(finalReferencename));
}
final MailboxQuery expression = new MailboxQuery(basePath, CharsetUtil.decodeModifiedUTF7(mailboxName), mailboxSession.getPathDelimiter());
final Collection<String> mailboxResponses = new ArrayList<String>();
for (final String mailbox : mailboxes) {
respond(responder, expression, mailbox, true, mailboxes, mailboxResponses, mailboxSession.getPathDelimiter());
}
}