HierarchicalFolder createChild(String mailboxName) { HierarchicalFolder child = new HierarchicalFolder(this, mailboxName); synchronized (children) { children.add(child); } return child; }
@Override public MailFolder createMailbox(MailFolder parent, String mailboxName, boolean selectable) throws FolderException { if (mailboxName.indexOf(HIERARCHY_DELIMITER_CHAR) != -1) { throw new FolderException("Invalid mailbox name "+mailboxName); } HierarchicalFolder castParent = (HierarchicalFolder) parent; HierarchicalFolder child = castParent.createChild(mailboxName); child.setSelectable(selectable); return child; }
@Override public MailFolder getMailbox(MailFolder parent, String name) { return ((HierarchicalFolder) parent).getChild(name); }
@Override public void deleteMailbox(MailFolder folder) throws FolderException { HierarchicalFolder toDelete = (HierarchicalFolder) folder; if (toDelete.hasChildren()) { throw new FolderException("Cannot delete mailbox with children."); } if (toDelete.getMessageCount() != 0) { throw new FolderException("Cannot delete non-empty mailbox"); } HierarchicalFolder parent = toDelete.getParent(); parent.removeChild(toDelete); }
@Override public void renameMailbox(MailFolder existingFolder, String newName) throws FolderException { HierarchicalFolder toRename = (HierarchicalFolder) existingFolder; HierarchicalFolder parent = toRename.getParent(); int idx = newName.lastIndexOf(ImapConstants.HIERARCHY_DELIMITER_CHAR); String newFolderName; String newFolderPathWithoutName; if (idx > 0) { newFolderName = newName.substring(idx + 1); newFolderPathWithoutName = newName.substring(0, idx); } else { newFolderName = newName; newFolderPathWithoutName = ""; } if (parent.getName().equals(newFolderPathWithoutName)) { // Simple rename toRename.setName(newFolderName); } else { // Hierarchy change parent.removeChild(toRename); HierarchicalFolder userFolder = getInboxOrUserRootFolder(toRename); String[] path = newName.split('\\' + ImapConstants.HIERARCHY_DELIMITER); HierarchicalFolder newParent = userFolder; for (int i = 0; i < path.length - 1; i++) { newParent = newParent.getChild(path[i]); } toRename.moveToNewParent(newParent); toRename.setName(newFolderName); } }
@Override public void setFlags(Flags flags, boolean value, long uid, FolderListener silentListener, boolean addUid) throws FolderException { int msn = getMsn(uid); StoredMessage message = mailMessages.get(msn - 1); message.setFlags(flags, value); Long uidNotification = null; if (addUid) { uidNotification = uid; } notifyFlagUpdate(msn, message.getFlags(), uidNotification, silentListener); }
for (final Object o : parent.getChildren()) { HierarchicalFolder child = (HierarchicalFolder) o; if (child.getName().startsWith(matchPattern)) { mailboxes.add(child);
@Override public Collection<MailFolder> getChildren(MailFolder parent) { return Collections.<MailFolder>unmodifiableCollection(((HierarchicalFolder) parent).getChildren()); }
@Override public Message getMessageByUID(long uid) { return getMessage(uid).getMimeMessage(); }
@Override public String getFullName() { return parent.getFullName() + ImapConstants.HIERARCHY_DELIMITER_CHAR + name; }
HierarchicalFolder getChild(String name) { synchronized (children) { for (HierarchicalFolder child : children) { if (child.getName().equalsIgnoreCase(name)) { return child; } } } return null; }
@Override public void store(MimeMessage message) { Date receivedDate = new Date(); Flags flags = new Flags(); appendMessage(message, flags, receivedDate); }
@Override public void replaceFlags(Flags flags, long uid, FolderListener silentListener, boolean addUid) throws FolderException { int msn = getMsn(uid); StoredMessage message = mailMessages.get(msn - 1); message.setFlags(MessageFlags.ALL_FLAGS, false); message.setFlags(flags, true); Long uidNotification = null; if (addUid) { uidNotification = uid; } notifyFlagUpdate(msn, message.getFlags(), uidNotification, silentListener); }
private void addAllChildren(HierarchicalFolder mailbox, Collection<MailFolder> mailboxes) { Collection<HierarchicalFolder> children = mailbox.getChildren(); for (HierarchicalFolder child : children) { mailboxes.add(child); addAllChildren(child, mailboxes); } }
@Override public long copyMessage(long uid, MailFolder toFolder) throws FolderException { StoredMessage originalMessage = getMessage(uid); MimeMessage newMime; try { newMime = new MimeMessage(originalMessage.getMimeMessage()); } catch (MessagingException e) { throw new FolderException("Can not copy message " + uid + " to folder " + toFolder, e); } return toFolder.appendMessage(newMime, originalMessage.getFlags(), originalMessage.getReceivedDate()); }
@Override public MailFolder getMailbox(String absoluteMailboxName) { StringTokenizer tokens = new StringTokenizer(absoluteMailboxName, HIERARCHY_DELIMITER); // The first token must be "#mail" if (!tokens.hasMoreTokens() || !tokens.nextToken().equalsIgnoreCase(USER_NAMESPACE)) { return null; } HierarchicalFolder parent = rootMailbox; while (parent != null && tokens.hasMoreTokens()) { String childName = tokens.nextToken(); parent = parent.getChild(childName); } return parent; }