Initial revision
From-SVN: r26263
This commit is contained in:
parent
140fa895c6
commit
ee9dd3721b
370 changed files with 173494 additions and 0 deletions
98
libjava/java/util/Observable.java
Normal file
98
libjava/java/util/Observable.java
Normal file
|
@ -0,0 +1,98 @@
|
|||
/* Copyright (C) 1998, 1999 Cygnus Solutions
|
||||
|
||||
This file is part of libgcj.
|
||||
|
||||
This software is copyrighted work licensed under the terms of the
|
||||
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
||||
details. */
|
||||
|
||||
package java.util;
|
||||
|
||||
/**
|
||||
* @author Warren Levy <warrenl@cygnus.com>
|
||||
* @date September 2, 1998.
|
||||
*/
|
||||
/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3
|
||||
* "The Java Language Specification", ISBN 0-201-63451-1
|
||||
* plus online API docs for JDK 1.2 beta from http://www.javasoft.com.
|
||||
* Status: Believed complete and correct.
|
||||
*/
|
||||
|
||||
public class Observable
|
||||
{
|
||||
/* tracks whether this object has changed */
|
||||
private boolean changed;
|
||||
|
||||
/* list of the Observers registered as interested in this Observable */
|
||||
private Vector observerVec;
|
||||
|
||||
/* TBD: This might be better implemented as an Observer[]
|
||||
* but that would mean writing more code rather than making use of
|
||||
* the existing Vector class (this also implies a larger text code
|
||||
* space in resulting executables). The tradeoff is one of speed
|
||||
* (manipulating the Observer[] directly) vs. size/reuse. In the future,
|
||||
* we may decide to make the tradeoff and reimplement with an Observer[].
|
||||
*/
|
||||
|
||||
public Observable()
|
||||
{
|
||||
changed = false;
|
||||
observerVec = new Vector();
|
||||
}
|
||||
|
||||
public synchronized void addObserver(Observer obs)
|
||||
{
|
||||
// JDK 1.2 spec says not to add this if it is already there
|
||||
if (!observerVec.contains(obs))
|
||||
observerVec.addElement(obs);
|
||||
}
|
||||
|
||||
protected synchronized void clearChanged()
|
||||
{
|
||||
changed = false;
|
||||
}
|
||||
|
||||
public synchronized int countObservers()
|
||||
{
|
||||
return observerVec.size();
|
||||
}
|
||||
|
||||
public synchronized void deleteObserver(Observer obs)
|
||||
{
|
||||
observerVec.removeElement(obs);
|
||||
}
|
||||
|
||||
public synchronized void deleteObservers()
|
||||
{
|
||||
observerVec.removeAllElements();
|
||||
}
|
||||
|
||||
public synchronized boolean hasChanged()
|
||||
{
|
||||
return changed;
|
||||
}
|
||||
|
||||
public void notifyObservers()
|
||||
{
|
||||
notifyObservers(null);
|
||||
}
|
||||
|
||||
public void notifyObservers(Object arg)
|
||||
{
|
||||
if (changed)
|
||||
{
|
||||
/* The JDK 1.2 spec states that though the order of notification
|
||||
* is unspecified in subclasses, in Observable it is in the order
|
||||
* of registration.
|
||||
*/
|
||||
for (int i = 0, numObs = observerVec.size(); i < numObs; i++)
|
||||
((Observer) (observerVec.elementAt(i))).update(this, arg);
|
||||
changed = false;
|
||||
}
|
||||
}
|
||||
|
||||
protected synchronized void setChanged()
|
||||
{
|
||||
changed = true;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue