X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=src%2Forg%2Fwamblee%2Fobserver%2FObservable.java;fp=src%2Forg%2Fwamblee%2Fobserver%2FObservable.java;h=0000000000000000000000000000000000000000;hb=fb4deb496257c78d4711aab48191dd9a0678798a;hp=7af7ea7d4bb506d6ade25a9979d59d41cc86a982;hpb=b0cc85c32e342ad381876d0ce497285de6ed6ee9;p=utils diff --git a/src/org/wamblee/observer/Observable.java b/src/org/wamblee/observer/Observable.java deleted file mode 100644 index 7af7ea7d..00000000 --- a/src/org/wamblee/observer/Observable.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2005 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * 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; - -import java.util.List; -import java.util.ArrayList; -import java.util.Map; -import java.util.TreeMap; - -import org.apache.log4j.Logger; - - -/** - * 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. - */ - private ObservableType _observable; - - /** - * Used to notify observers. - */ - private ObserverNotifier _notifier; - - /** - * Map of subscription to observer. - */ - private Map> _observers; - - /** - * Counter for subscriptions. Holds the next subscription. - */ - private long _counter; - - /** - * 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) { - _observable = aObservable; - _notifier = aNotifier; - _observers = new TreeMap>(); - _counter = 0; - } - - /** - * 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. - _observers.put(subscription, aObserver); - return subscription; - } - - /** - * 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 + "'"); - } - } - - /** - * Gets the number of subscribed observers. - */ - public int getObserverCount() { - return _observers.size(); - } - - /** - * 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) { - observers.addAll(_observers.values()); - } - for (Observer observer: observers) { - _notifier.update(observer, _observable, aEvent); - } - } - - /* (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()) { - LOGGER.error(" observer: " + observer); - } - } - - super.finalize(); - } - -}