/** * */ package fr.cedrik.email; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import fr.cedrik.inotes.Folder; /** * @author Cédrik LIME */ public class FoldersList extends ArrayList<Folder> { /** * {@inheritDoc} */ public FoldersList() { super(); } /** * {@inheritDoc} */ public FoldersList(int initialCapacity) { super(initialCapacity); } /** * {@inheritDoc} */ public FoldersList(Collection<? extends Folder> c) { super(c); } public Folder getInbox() { for (Folder folder : this) { if (folder.isInbox()) { return folder; } } assert false : "No " + Folder.INBOX + " folder found!"; return null; } public Folder getFolderById(String id) { for (Folder folder : this) { if (folder.getId().equals(id)) { return folder; } } return null; } protected Folder getFolderByLevelTree(String levelTree) { for (Folder folder : this) { if (folder.levelTree.equals(levelTree)) { return folder; } } return null; } protected Folder getParent(Folder folder) { int idx = folder.levelTree.lastIndexOf('.'); if (idx == -1) { return null; } String requestedFolderTree = folder.levelTree.substring(0, idx); Folder parent = getFolderByLevelTree(requestedFolderTree); return parent; } public List<Folder> getFoldersChain(Folder folder) { List<Folder> result = new ArrayList<Folder>(); result.add(folder); Folder parent; while ((parent = getParent(folder)) != null) { result.add(parent); folder = parent; } Collections.reverse(result); assert result != null && ! result.isEmpty() : folder; return result; } }