Subversion Repositories svnkaklik

Rev

Blame | Last modification | View Log | Download

/*
    AVRcamVIEW: A PC application to test out the functionallity of the
     AVRcam real-time image processing engine.
    Copyright (C) 2004    Brent A. Taylor

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This program 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
    General Public License for more details.

    You should have received a copy of the GNU General Public
    License along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

   For more information on the AVRcamVIEW, please contact:

   taylorba@comcast.net

   or go to www.jrobot.net for more details regarding the system.
*/

package avr.connection;

import javax.swing.event.*;

import avr.connection.event.*;

/***********************************************************************
 * Defines a Connection that fires events describing if the connection
 * was opened or closed.
 */
public abstract class AbstractConnection implements Connection {

   /**
    * The list of registered event listeners.
    */
   private EventListenerList listenerList;

   /**
    * Boolean to test if the connection is connected (true) or
    * disconnected (false).
    */
   private boolean connected;

   /**
    * Initialize this object and set connected to false.
    */
   protected AbstractConnection() {
      listenerList = new EventListenerList();
      connected = false;
   }

   /**
    * Set connected to true and fire a connected event.
    */
   protected void setConnected() {
      setConnected(true);
      fireConnectedEvent(this);
   }

   /**
    * Set connected to false and fire a disconnected event.
    */
   protected void setDisconnected() {
      setConnected(false);
      fireDisconnectedEvent(this);
   }

   /**
    * Set this connected variable to the given value.
    * @param connected true if this connection is connected, false otherwise.
    */
   private void setConnected(boolean connected) {
      this.connected = connected;
   }

   /**
    * Tells whether or not this connection is connected.
    * @return true if, and only if, this connection is connected.
    */
   public boolean isConnected() {
      return connected;
   }

   /**
    * Adds a listener to the list that's notified each time a connect or
    * disconnect occurs.
    * @param cl the ConnectionListener
    */
   public void addConnectionListener(ConnectionListener cl) {
      listenerList.add(ConnectionListener.class, cl);
   }

   /**
    * Removes a listener to the list that's notified each time a connect or
    * disconnect occurs.
    * @param cl the ConnectionListener
    */
   public void removeConnectionListener(ConnectionListener cl) {
      listenerList.remove(ConnectionListener.class, cl);
   }

   public void removeAllConnectionListeners() {
      ConnectionListener[] listeners = getConnectionListeners();
      for(int i = 0; i < listeners.length; i++) {
         removeConnectionListener(listeners[i]);
      }
   }

   /**
    * Returns an array of all the connection listeners registered on
    * this connection.
    * @return all of this connection's ConnectionListeners or
    * an empty array if no connection listeners are currently registered
    */
   public ConnectionListener[] getConnectionListeners() {
      return (ConnectionListener[])
                listenerList.getListeners(ConnectionListener.class);
   }

   /**
    * Notifies all listeners that a connection has been established.
    * @param source This connection.
    */
   protected void fireConnectedEvent(Object source) {
      ConnectionListener[] listeners = getConnectionListeners();

      ConnectionEvent event = null;

      for(int i = 0; i < listeners.length; i++) {
         if(event == null) {
            event = new ConnectionEvent(this);
         }
         listeners[i].connected(event);
      }
   }

   /**
    * Notifies all listeners that a connection has been destroyed.
    * @param source This connection.
    */
   protected void fireDisconnectedEvent(Object source) {
      ConnectionListener[] listeners = getConnectionListeners();

      ConnectionEvent event = null;

      for(int i = 0; i < listeners.length; i++) {
         if(event == null) {
            event = new ConnectionEvent(this);
         }
         listeners[i].disconnected(event);
      }
   }

}