/* * $Id$ * * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ package org.jdesktop.swingx.event; import java.util.logging.Level; import javax.swing.event.EventListenerList; /** * A helper class which is an implementation of a message source and a progress * source. This class manages the listener list and has convenience methods to * fire MessageEvents and ProgressEvents. * * @see MessageEvent * @see MessageSource * @see ProgressEvent * @see ProgressSource * @author Mark Davidson */ public class MessageSourceSupport implements MessageSource, ProgressSource { private EventListenerList listeners; private Object source; /** * Creates an MessageSource instance using the source object as the source * of events. */ public MessageSourceSupport(Object source) { if (source == null) { throw new IllegalArgumentException("source Object cannot be null"); } this.source = source; this.listeners = new EventListenerList(); } public void addMessageListener(MessageListener l) { if (l != null) { listeners.add(MessageListener.class, l); } } public void removeMessageListener(MessageListener l) { if (l != null) { listeners.remove(MessageListener.class, l); } } public MessageListener[] getMessageListeners() { return (MessageListener[]) listeners .getListeners(MessageListener.class); } // Perhaps the ProgressListener interface should be defined public void addProgressListener(ProgressListener l) { if (l != null) { listeners.add(ProgressListener.class, l); } } public void removeProgressListener(ProgressListener l) { if (l != null) { listeners.remove(ProgressListener.class, l); } } public ProgressListener[] getProgressListeners() { return (ProgressListener[]) listeners .getListeners(ProgressListener.class); } /** * Indicates that a long operation is staring. For a determinite progress * operation, the minimum value should be less than the maximum value. For * inderminate operations, set minimum equal to maximum. * * @param minimum the minimum value of the progress operation * @param maximum the maximum value of the progress operation */ public void fireProgressStarted(int minimum, int maximum) { fireProgressStarted(new ProgressEvent(source, minimum, maximum)); } /** * Indicates that an increment of progress has occured. * * @param progress total value of the progress operation. This value should * be between the minimum and maximum values */ public void fireProgressIncremented(int progress) { fireProgressIncremented(new ProgressEvent(source, progress)); } /** * Indicates that a progress operation has completed */ public void fireProgressEnded() { fireProgressEnded(new ProgressEvent(source)); } /** * Create a SEVERE MessageEvent which represents an Exception. * <p> * <b>NOTE: This will create an event which is by default at Level.SEVERE</b> * * @see java.util.logging.Level */ public void fireException(Throwable t) { fireMessage(new MessageEvent(source, t, Level.SEVERE)); } /** * Send a Level.INFO, non-timestamped message to the list of listeners. * * @param message a string of text to send */ public void fireMessage(String message) { fireMessage(message, Level.INFO); } /** * Send a non-timestamped message to the list of listeners. * * @param value the contents of the message * @param level the level of message. */ public void fireMessage(Object value, Level level) { fireMessage(value, level, 0L); } /** * Send a message to the list of listeners with a timestamp. * * @param value the contents of the message * @param level the level of message * @param when timestamp of when this event occured */ public void fireMessage(Object value, Level level, long when) { fireMessage(new MessageEvent(source, value, level, when)); } /** * Send the MessageEvent to the list of listeners. * * @param evt a non-null MessageEvent. */ public void fireMessage(MessageEvent evt) { if (evt == null) { throw new IllegalArgumentException("the event should not be null"); } MessageListener[] ls = getMessageListeners(); for (int i = 0; i < ls.length; i++) { ls[i].message(evt); } } /** * Send the ProgessEvent to the list of listeners. * * @param evt a non-null ProgressEvent */ public void fireProgressIncremented(ProgressEvent evt) { if (evt == null) { throw new IllegalArgumentException("the event should not be null"); } ProgressListener[] ls = getProgressListeners(); for (int i = 0; i < ls.length; i++) { ls[i].progressIncremented(evt); } } /** * Send the ProgessEvent to the list of listeners. * * @param evt a non-null ProgressEvent */ public void fireProgressStarted(ProgressEvent evt) { if (evt == null) { throw new IllegalArgumentException("the event should not be null"); } ProgressListener[] ls = getProgressListeners(); for (int i = 0; i < ls.length; i++) { ls[i].progressStarted(evt); } } /** * Send the ProgessEvent to the list of listeners. * * @param evt a non-null ProgressEvent */ public void fireProgressEnded(ProgressEvent evt) { if (evt == null) { throw new IllegalArgumentException("the event should not be null"); } ProgressListener[] ls = getProgressListeners(); for (int i = 0; i < ls.length; i++) { ls[i].progressEnded(evt); } } }