@Override public MailFolder getMailbox(MailFolder parent, String name) { return ((HierarchicalFolder) parent).getChild(name); }
@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; }
@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); } }