X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=support%2Fsrc%2Forg%2Fwamblee%2Fobserver%2FObservable.java;h=2980afafd33dbc63a0a7416e6aed4ca7cb2396c9;hb=5b6b49fbe01397461e67238481c84a62c8ed4bef;hp=7af7ea7d4bb506d6ade25a9979d59d41cc86a982;hpb=a9a399fb3921ce5dca15cf85cd06f523724a7db1;p=utils diff --git a/support/src/org/wamblee/observer/Observable.java b/support/src/org/wamblee/observer/Observable.java index 7af7ea7d..2980afaf 100644 --- a/support/src/org/wamblee/observer/Observable.java +++ b/support/src/org/wamblee/observer/Observable.java @@ -12,7 +12,7 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. - */ + */ package org.wamblee.observer; @@ -23,105 +23,123 @@ import java.util.TreeMap; import org.apache.log4j.Logger; - /** - * Implements subscription and notification logic for an observer pattern. - * This class is thread safe. + * Implements subscription and notification logic for an observer pattern. This + * class is thread safe. */ public class Observable { - + private static final Logger LOGGER = Logger.getLogger(Observable.class); - + /** - * Observable. + * Observable. */ private ObservableType _observable; - + /** - * Used to notify observers. + * Used to notify observers. */ - private ObserverNotifier _notifier; - + private ObserverNotifier _notifier; + /** - * Map of subscription to observer. + * Map of subscription to observer. */ - private Map> _observers; - + private Map> _observers; + /** - * Counter for subscriptions. Holds the next subscription. + * Counter for subscriptions. Holds the next subscription. */ - private long _counter; - + private long _counter; + /** - * Constructs the observable. - * @param aObservable Observable this instance is used for. - * @param aNotifier Object used for implementing notification of listeners. + * Constructs the observable. + * + * @param aObservable + * Observable this instance is used for. + * @param aNotifier + * Object used for implementing notification of listeners. */ - public Observable(ObservableType aObservable, ObserverNotifier aNotifier) { + public Observable(ObservableType aObservable, + ObserverNotifier aNotifier) { _observable = aObservable; - _notifier = aNotifier; + _notifier = aNotifier; _observers = new TreeMap>(); - _counter = 0; + _counter = 0; } - + /** - * Subscribe an obvers. - * @param aObserver Observer to subscribe. - * @return Event Event to send. + * Subscribe an obvers. + * + * @param aObserver + * Observer to subscribe. + * @return Event Event to send. */ public synchronized long subscribe(Observer aObserver) { - long subscription = _counter++; // integer rage is so large it will never roll over. + long subscription = _counter++; // integer rage is so large it will + // never roll over. _observers.put(subscription, aObserver); - return subscription; + return subscription; } - + /** - * Unsubscribe an observer. - * @param aSubscription Subscription which is used - * @throws IllegalArgumentException In case the subscription is not known. + * Unsubscribe an observer. + * + * @param aSubscription + * Subscription which is used + * @throws IllegalArgumentException + * In case the subscription is not known. */ public synchronized void unsubscribe(long aSubscription) { Object obj = _observers.remove(aSubscription); - if ( obj == null ) { - throw new IllegalArgumentException("Subscription '" + aSubscription + "'"); + if (obj == null) { + throw new IllegalArgumentException("Subscription '" + aSubscription + + "'"); } } - + /** - * Gets the number of subscribed observers. + * Gets the number of subscribed observers. + * + * @return Number of subscribed observers. */ - public int getObserverCount() { - return _observers.size(); + public int getObserverCount() { + return _observers.size(); } - + /** - * Notifies all subscribed observers. - * @param aEvent Event to send. + * Notifies all subscribed observers. + * + * @param aEvent + * Event to send. */ public void send(Event aEvent) { - // Make sure we do the notification while not holding the lock to avoid potential deadlock - // situations. - List> observers = new ArrayList>(); - synchronized (this) { + // Make sure we do the notification while not holding the lock to avoid + // potential deadlock + // situations. + List> observers = new ArrayList>(); + synchronized (this) { observers.addAll(_observers.values()); } - for (Observer observer: observers) { - _notifier.update(observer, _observable, aEvent); + for (Observer observer : observers) { + _notifier.update(observer, _observable, aEvent); } } - - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see java.lang.Object#finalize() */ @Override protected void finalize() throws Throwable { - if ( _observers.size() > 0 ) { - LOGGER.error("Still observers registered at finalization of observer!"); - for (Observer observer: _observers.values()) { + if (_observers.size() > 0) { + LOGGER + .error("Still observers registered at finalization of observer!"); + for (Observer observer : _observers.values()) { LOGGER.error(" observer: " + observer); } } - + super.finalize(); }