All Downloads are FREE. Search and download functionalities are using the official Maven repository.

panda.net.ProtocolCommandSupport Maven / Gradle / Ivy

package panda.net;

import java.io.Serializable;
import java.util.EventListener;

import panda.net.util.ListenerList;

/***
 * ProtocolCommandSupport is a convenience class for managing a list of ProtocolCommandListeners and
 * firing ProtocolCommandEvents. You can simply delegate ProtocolCommandEvent firing and listener
 * registering/unregistering tasks to this class.
 * 
 * @see ProtocolCommandEvent
 * @see ProtocolCommandListener
 ***/

public class ProtocolCommandSupport implements Serializable {
	private static final long serialVersionUID = -8017692739988399978L;

	private final Object __source;
	private final ListenerList __listeners;

	/***
	 * Creates a ProtocolCommandSupport instance using the indicated source as the source of
	 * ProtocolCommandEvents.
	 * 
	 * @param source The source to use for all generated ProtocolCommandEvents.
	 ***/
	public ProtocolCommandSupport(Object source) {
		__listeners = new ListenerList();
		__source = source;
	}

	/***
	 * Fires a ProtocolCommandEvent signalling the sending of a command to all registered listeners,
	 * invoking their {@link panda.net.ProtocolCommandListener#protocolCommandSent
	 * protocolCommandSent() } methods.
	 * 
	 * @param command The string representation of the command type sent, not including the
	 *            arguments (e.g., "STAT" or "GET").
	 * @param message The entire command string verbatim as sent to the server, including all
	 *            arguments.
	 ***/
	public void fireCommandSent(String command, String message) {
		ProtocolCommandEvent event;

		event = new ProtocolCommandEvent(__source, command, message);

		for (EventListener listener : __listeners) {
			((ProtocolCommandListener)listener).protocolCommandSent(event);
		}
	}

	/***
	 * Fires a ProtocolCommandEvent signalling the reception of a command reply to all registered
	 * listeners, invoking their {@link panda.net.ProtocolCommandListener#protocolReplyReceived
	 * protocolReplyReceived() } methods.
	 * 
	 * @param replyCode The integer code indicating the natureof the reply. This will be the
	 *            protocol integer value for protocols that use integer reply codes, or the reply
	 *            class constant corresponding to the reply for protocols like POP3 that use strings
	 *            like OK rather than integer codes (i.e., POP3Repy.OK).
	 * @param message The entire reply as received from the server.
	 ***/
	public void fireReplyReceived(int replyCode, String message) {
		ProtocolCommandEvent event;
		event = new ProtocolCommandEvent(__source, replyCode, message);

		for (EventListener listener : __listeners) {
			((ProtocolCommandListener)listener).protocolReplyReceived(event);
		}
	}

	/***
	 * Adds a ProtocolCommandListener.
	 * 
	 * @param listener The ProtocolCommandListener to add.
	 ***/
	public void addProtocolCommandListener(ProtocolCommandListener listener) {
		__listeners.addListener(listener);
	}

	/***
	 * Removes a ProtocolCommandListener.
	 * 
	 * @param listener The ProtocolCommandListener to remove.
	 ***/
	public void removeProtocolCommandListener(ProtocolCommandListener listener) {
		__listeners.removeListener(listener);
	}

	/***
	 * Returns the number of ProtocolCommandListeners currently registered.
	 * 
	 * @return The number of ProtocolCommandListeners currently registered.
	 ***/
	public int getListenerCount() {
		return __listeners.getListenerCount();
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy