/* Wotonomy: OpenStep design patterns for pure Java applications. Copyright (C) 2000 Intersect Software Corporation 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, see http://www.gnu.org */ package net.wotonomy.control; import java.util.Observable; import java.util.Observer; /** * This is an abstract class for receiving coalesced * notifications of changes from objects. * This class also implements Observer for greater * compatibility. * The point of EODelayedObservers is that when * they receive a willChange message, they * queue themselves with a EODelayedObserverQueue * so they can receive a single subjectChanged() * after all changes from an observed object take * place. * * @author michael@mpowers.net * @author $Author: cgruber $ * @version $Revision: 894 $ */ public abstract class EODelayedObserver implements EOObserving, Observer { /** * Notified immediately. */ public static final int ObserverPriorityImmediate = 0; public static final int ObserverPriorityFirst = 1; public static final int ObserverPrioritySecond = 2; public static final int ObserverPriorityThird = 3; public static final int ObserverPriorityFourth = 4; public static final int ObserverPriorityFifth = 5; public static final int ObserverPrioritySixth = 6; public static final int ObserverPriorityLater = 7; public static final int ObserverNumberOfPriorities = 8; /** * Default constructor. */ public EODelayedObserver () { } /** * Removes this observer from the observer queue * for a currently pending notification. */ public void discardPendingNotification () { observerQueue().dequeueObserver( this ); } /** * Returns the observer queue to which this observer * belongs. This implementation returns the default * EODelayedObserverQueue. * Override to use a different one. */ public EODelayedObserverQueue observerQueue () { return EODelayedObserverQueue.defaultObserverQueue(); } /** * Returns the priority of this observer in the queue. * This implementation returns ObserverPriorityThird. * Override to be notified before other observers. */ public int priority () { return ObserverPriorityThird; } /** * Notifies observer that one or more objects that * it is observing have changed. The observer should * check all objects it is observing for changes. */ public abstract void subjectChanged (); // interface EOObserving /** * Called when the specified object is about to change. * This implementation puts this observer on a * notification queue. */ public void objectWillChange ( Object anObject ) { observerQueue().enqueueObserver( this ); } // interface Observer /** * Called when the specified object has changed, * with the specified argument. * This method is included for interacting with * the java.lang.Observer pattern. * This implementation simply objectWillChange(anObject) * so that the observer still gets a single subjectChanged * call in response to multiple changes. */ public void update ( Observable anObject, Object aValue ) { objectWillChange( anObject ); } } /* * $Log$ * Revision 1.2 2006/02/16 16:47:14 cgruber * Move some classes in to "internal" packages and re-work imports, etc. * * Also use UnsupportedOperationExceptions where appropriate, instead of WotonomyExceptions. * * Revision 1.1 2006/02/16 13:19:57 cgruber * Check in all sources in eclipse-friendly maven-enabled packages. * * Revision 1.2 2001/10/26 18:38:10 mpowers * Reordered priorities. * * Revision 1.1.1.1 2000/12/21 15:46:38 mpowers * Contributing wotonomy. * * Revision 1.3 2000/12/20 16:25:35 michael * Added log to all files. * * */