📄 dataeventobservable.java
字号:
/* * Copyright (c) 2003 - 2007, Silvio Meier and Tobias Reinhard * * All rights reserved. * * Redistribution and use in source and binary forms, * with or without modification, are permitted provided * that the following conditions are met: * * o Redistributions of source code must retain the above * copyright notice, this list of conditions and the * following disclaimer. * o Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the * following disclaimer in the documentation and/or other * materials provided with the distribution. * o The names of its contributors may not be used to endorse * or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */package net.sf.cscc;import java.util.Enumeration;import java.util.Vector;/** * This class provides the functionality for observing the incoming * data event queue of the communication system. * * @author Silvio Meier (SM) * @copyright Silvio Meier, Tobias Reinhard, 2003 * @history 2003-05-09 SM First Version * 2003-05-14 SM working on additional methods and events, * correction of some comments. * 2003-05-20 TR Comments corrected * 2006-11-02 SM Comments revised. * @version $Date: 2007/07/01 17:04:06 $, $Author: reode_orm $, $Revision: 1.1 $ */class DataEventObservable { /** * Contains a list of objects implementing the {@link net.sf.cscc.DataEventObserver} * or the {@link net.sf.cscc.DataEventReceivingObserver} interface. */ private Vector observers; /** * This constructor initializes the observable object. * * @pre true * @post observers != null */ public DataEventObservable() { observers = new Vector(); } /** * Removes a given observer from the list of data event observers. * If the given observer is not in the observer list, nothing happens. * * @pre o != null * @post ((observers.size())@pre == (observers.size())@post + 1 && * (obervers.contains(o))@pre) || (!(observers.contains(o)) * @param o Observer which should be eliminated from the observer list. */ public synchronized void removeDataEventObserver(DataEventBaseObserver o) { observers.remove(o); } /** * Notifies all observers in the observer list by sending them the given * data event. The observers have to implement either the * {@link net.sf.cscc.DataEventReceivingObserver} * or the {@link net.sf.cscc.DataEventObserver} interface. * If the observer does only implement the super interface * {@link net.sf.cscc.DataEventBaseObserver}, no event is * propagated to the observer. * * @pre de != null * @post true * @param de DataEvent object which is sent to the observers. * @return Returns true after the delivery of the data event to * all observers, ie. all the observers got the event data. * Afterwards, the delivered event is ready to be removed * from the queue. */ public synchronized boolean notifyDataEventObservers(DataEvent de) { boolean dequeue = true; Enumeration e = observers.elements(); while (e.hasMoreElements()) { Object o = e.nextElement(); if (o instanceof DataEventObserver) { ((DataEventObserver)o).receiveEvent(); dequeue = false; } else { if (o instanceof DataEventReceivingObserver) { ((DataEventReceivingObserver)o).receiveEvent(de); } } } return dequeue; } /** * Adds an oberver to the observer list. In the case the observer is * already in the list, it is added again, so * that multiple event notifications can happen. The observer may not * be null! * * @pre o != null * @post ((observers.size())@pre == (observers.size())@post - 1 * @param o Observer to add to the list */ public synchronized void addDataObserver(DataEventBaseObserver o) { observers.add(o); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -