/* * $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.awt.ItemSelectable; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.Collections; import java.util.LinkedList; import java.util.List; /** * A ItemListener that stores the received ItemEvents. * */ public class ItemReport implements ItemListener { /** * Holds a list of all selected events. */ protected List<ItemEvent> selectedEvents = Collections.synchronizedList(new LinkedList<ItemEvent>()); /** * Holds a list of all deselected events. */ protected List<ItemEvent> deselectedEvents = Collections.synchronizedList(new LinkedList<ItemEvent>()); /** * Holds a list of all events. */ protected List<ItemEvent> allEvents = Collections.synchronizedList(new LinkedList<ItemEvent>()); /** * Instantiates a report. */ public ItemReport() { this(null); } /** * Instantiates a report and registers itself as listener to the given model, * if it is not null. * * @param model the model to register as listener to */ public ItemReport(ItemSelectable model) { if (model != null) { model.addItemListener(this); } } //------------------------ implement CellEditorListener public void itemStateChanged(ItemEvent e) { allEvents.add(e); if (ItemEvent.SELECTED == e.getStateChange()) { selectedEvents.add(e); } else if (ItemEvent.DESELECTED == e.getStateChange()){ deselectedEvents.add(e); } else { // ItemEvent doesn't guard against illegal states, can't do anything } } //----------------------- utility methods to access all events public void clear() { selectedEvents.clear(); deselectedEvents.clear(); allEvents.clear(); } public int getEventCount() { return allEvents.size(); } public boolean hasEvents() { return !allEvents.isEmpty(); } public ItemEvent getLastEvent() { return allEvents.isEmpty() ? null : allEvents.get(0); } //------------------ access canceled events public int getSelectedEventCount() { return selectedEvents.size(); } public boolean hasSelectedEvents() { return !selectedEvents.isEmpty(); } public ItemEvent getLastSelectedEvent() { return selectedEvents.isEmpty() ? null : selectedEvents.get(0); } //----------------- access stopped events public int getDeselectedEventCount() { return deselectedEvents.size(); } public boolean hasDeselectedEvents() { return !deselectedEvents.isEmpty(); } public ItemEvent getLastDeselectedEvent() { return deselectedEvents.isEmpty() ? null : deselectedEvents.get(0); } }