X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=support%2Fgeneral%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fobserver%2FObservable.java;h=f31ba0dc485d1b839ceb8e354c9d0d0e15f657e5;hb=4a575582a5c2999bd816b197d9cf274b4b3ddcd7;hp=820db38c8bb3241b61d3d3a12ab19585351ae4d4;hpb=0d8d8f24656e585ee75558cfd6a4c661f8f14985;p=utils diff --git a/support/general/src/main/java/org/wamblee/observer/Observable.java b/support/general/src/main/java/org/wamblee/observer/Observable.java index 820db38c..f31ba0dc 100644 --- a/support/general/src/main/java/org/wamblee/observer/Observable.java +++ b/support/general/src/main/java/org/wamblee/observer/Observable.java @@ -1,5 +1,5 @@ /* - * Copyright 2005 the original author or authors. + * Copyright 2005-2010 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. @@ -13,24 +13,18 @@ * 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.List; 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. */ @@ -60,7 +54,7 @@ public class Observable { * Object used for implementing notification of listeners. */ public Observable(ObservableType aObservable, - ObserverNotifier aNotifier) { + ObserverNotifier aNotifier) { observable = aObservable; notifier = aNotifier; observers = new TreeMap>(); @@ -76,8 +70,10 @@ public class Observable { */ public synchronized long subscribe(Observer aObserver) { long subscription = counter++; // integer rage is so large it will - // never roll over. + // never roll over. + observers.put(subscription, aObserver); + return subscription; } @@ -91,9 +87,10 @@ public class Observable { */ public synchronized void unsubscribe(long aSubscription) { Object obj = observers.remove(aSubscription); + if (obj == null) { - throw new IllegalArgumentException("Subscription '" + aSubscription - + "'"); + throw new IllegalArgumentException("Subscription '" + + aSubscription + "'"); } } @@ -117,30 +114,13 @@ public class Observable { // potential deadlock // situations. List> myObservers = new ArrayList>(); + synchronized (this) { myObservers.addAll(observers.values()); } + for (Observer observer : myObservers) { 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(); - } - }