/*
- * 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.
* 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.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<ObservableType, Event> {
-
- private static final Logger LOGGER = Logger.getLogger(Observable.class);
-
/**
* Observable.
*/
* Object used for implementing notification of listeners.
*/
public Observable(ObservableType aObservable,
- ObserverNotifier<ObservableType, Event> aNotifier) {
+ ObserverNotifier<ObservableType, Event> aNotifier) {
observable = aObservable;
notifier = aNotifier;
observers = new TreeMap<Long, Observer<ObservableType, Event>>();
*/
public synchronized long subscribe(Observer<ObservableType, Event> aObserver) {
long subscription = counter++; // integer rage is so large it will
- // never roll over.
+ // never roll over.
+
observers.put(subscription, aObserver);
+
return subscription;
}
*/
public synchronized void unsubscribe(long aSubscription) {
Object obj = observers.remove(aSubscription);
+
if (obj == null) {
- throw new IllegalArgumentException("Subscription '" + aSubscription
- + "'");
+ throw new IllegalArgumentException("Subscription '" +
+ aSubscription + "'");
}
}
// potential deadlock
// situations.
List<Observer<ObservableType, Event>> myObservers = new ArrayList<Observer<ObservableType, Event>>();
+
synchronized (this) {
myObservers.addAll(observers.values());
}
+
for (Observer<ObservableType, Event> 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();
- }
-
}