| /* |
| * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Distribution License v. 1.0, which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| import javax.swing.tree.DefaultMutableTreeNode; |
| import javax.mail.Store; |
| import javax.mail.Folder; |
| import javax.mail.MessagingException; |
| |
| /** |
| * Node which represents a Folder in the javax.mail apis. |
| * |
| * @author Christopher Cotton |
| */ |
| public class FolderTreeNode extends DefaultMutableTreeNode { |
| |
| protected Folder folder = null; |
| protected boolean hasLoaded = false; |
| |
| /** |
| * creates a tree node that points to the particular Store. |
| * |
| * @param what the store for this node |
| */ |
| public FolderTreeNode(Folder what) { |
| super(what); |
| folder = what; |
| } |
| |
| |
| /** |
| * a Folder is a leaf if it cannot contain sub folders |
| */ |
| public boolean isLeaf() { |
| try { |
| if ((folder.getType() & Folder.HOLDS_FOLDERS) == 0) |
| return true; |
| } catch (MessagingException me) { } |
| |
| // otherwise it does hold folders, and therefore not |
| // a leaf |
| return false; |
| } |
| |
| /** |
| * returns the folder for this node |
| */ |
| public Folder getFolder() { |
| return folder; |
| } |
| |
| |
| |
| /** |
| * return the number of children for this folder node. The first |
| * time this method is called we load up all of the folders |
| * under the store's defaultFolder |
| */ |
| |
| public int getChildCount() { |
| if (!hasLoaded) { |
| loadChildren(); |
| } |
| return super.getChildCount(); |
| } |
| |
| protected void loadChildren() { |
| // if it is a leaf, just say we have loaded them |
| if (isLeaf()) { |
| hasLoaded = true; |
| return; |
| } |
| |
| try { |
| // Folder[] sub = folder.listSubscribed(); |
| Folder[] sub = folder.list(); |
| |
| // add a FolderTreeNode for each Folder |
| int num = sub.length; |
| for(int i = 0; i < num; i++) { |
| FolderTreeNode node = new FolderTreeNode(sub[i]); |
| // we used insert here, since add() would make |
| // another recursive call to getChildCount(); |
| insert(node, i); |
| } |
| |
| } catch (MessagingException me) { |
| me.printStackTrace(); |
| } |
| } |
| |
| |
| /** |
| * override toString() since we only want to display a folder's |
| * name, and not the full path of the folder |
| */ |
| public String toString() { |
| return folder.getName(); |
| } |
| |
| } |
| |