/* * $Id$ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. */ package org.jdesktop.test; import java.util.Collections; import java.util.LinkedList; import java.util.List; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeWillExpandListener; import javax.swing.tree.ExpandVetoException; /** * A CellEditorListener that stores the received ChangeEvents. * */ public class TreeWillExpandReport implements TreeWillExpandListener { /** * Holds a list of all canceled events. */ protected List<TreeExpansionEvent> expandedEvents = Collections.synchronizedList(new LinkedList<TreeExpansionEvent>()); protected List<TreeExpansionEvent> collapsedEvents = Collections.synchronizedList(new LinkedList<TreeExpansionEvent>()); protected List<TreeExpansionEvent> allEvents = Collections.synchronizedList(new LinkedList<TreeExpansionEvent>()); private boolean veto; public TreeWillExpandReport() { this(false); } /** * @param b */ public TreeWillExpandReport(boolean veto) { this.veto = veto; } //------------------------ implement TreeWillExpandListener public void treeWillExpand(TreeExpansionEvent e) throws ExpandVetoException { expandedEvents.add(0, e); allEvents.add(0, e); if (veto) throw new ExpandVetoException(e, "vetoed expand"); } public void treeWillCollapse(TreeExpansionEvent e) throws ExpandVetoException { collapsedEvents.add(0, e); allEvents.add(0, e); if (veto) throw new ExpandVetoException(e, "vetoed collapse"); } //----------------------- utility methods to access all events public void clear() { expandedEvents.clear(); collapsedEvents.clear(); allEvents.clear(); } public int getEventCount() { return allEvents.size(); } public boolean hasEvents() { return !allEvents.isEmpty(); } public TreeExpansionEvent getLastEvent() { return allEvents.isEmpty() ? null : allEvents.get(0); } //------------------ access canceled events public int getExpandedEventCount() { return expandedEvents.size(); } public boolean hasExpandedEvents() { return !expandedEvents.isEmpty(); } public TreeExpansionEvent getLastExpandedEvent() { return expandedEvents.isEmpty() ? null : expandedEvents.get(0); } //----------------- access stopped events public int getCollapsedEventCount() { return collapsedEvents.size(); } public boolean hasCollapsedEvents() { return !collapsedEvents.isEmpty(); } public TreeExpansionEvent getLastCollapsedEvent() { return collapsedEvents.isEmpty() ? null : collapsedEvents.get(0); } }