00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 package org.jaebi.midlet.util;
00012
00013 import java.util.Enumeration;
00014 import java.util.Vector;
00015
00020 public class Observable {
00021
00022 private boolean changed = false;
00023 private Vector obs;
00024
00026 public Observable() {
00027 obs = new Vector();
00028 }
00029
00039 public synchronized void addObserver(Observer o) {
00040 if (o == null)
00041 throw new NullPointerException();
00042 if (!obs.contains(o)) {
00043 obs.addElement(o);
00044 }
00045 }
00046
00052 public synchronized void deleteObserver(Observer o) {
00053 obs.removeElement(o);
00054 }
00055
00065 public void notifyObservers() {
00066 notifyObservers(null);
00067 }
00068
00080 public void notifyObservers(Object arg) {
00081
00082
00083
00084 Enumeration observers;
00085
00086 synchronized (this) {
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102 if (!changed)
00103 return;
00104 observers = obs.elements();
00105 clearChanged();
00106 }
00107
00108 while (observers.hasMoreElements())
00109 ((Observer)observers.nextElement()).update(this, arg);
00110
00111 }
00112
00116 public synchronized void deleteObservers() {
00117 obs.removeAllElements();
00118 }
00119
00123 protected synchronized void setChanged() {
00124 changed = true;
00125 }
00126
00136 protected synchronized void clearChanged() {
00137 changed = false;
00138 }
00139
00150 public synchronized boolean hasChanged() {
00151 return changed;
00152 }
00153
00159 public synchronized int countObservers() {
00160 return obs.size();
00161 }
00162 }