home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / browser / observable.java < prev    next >
Text File  |  1995-08-11  |  3KB  |  104 lines

  1. /*
  2.  * @(#)Observable.java    1.7 95/03/14 Chris Warth
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package browser;
  21.  
  22. import browser.Observer;
  23. import java.util.Enumeration;
  24. import java.util.Vector;
  25.  
  26.  
  27. /*
  28.  * This class should be subclassed by observable objetc, or "data"
  29.  * in the Model-View paradigm.  An Observable object may have any
  30.  * number of Observers.  Whenever the Observable instance changes it
  31.  * notifies all of its observers.  Notification is done by calling
  32.  * the update() method on all observers.
  33.  */
  34. public class Observable {
  35.     private boolean changed = false;
  36.     private Object obs;
  37.  
  38.     public synchronized void addObserver(Observer o) {
  39.     if (obs != null) {
  40.         if (obs instanceof ObserverList) {
  41.         if (!((ObserverList) obs).contains(o)) {
  42.             ((ObserverList) obs).addElement(o);
  43.         }
  44.         } else if (obs != o) {
  45.         ObserverList tmp = new ObserverList();
  46.  
  47.         tmp.addElement(obs);
  48.         tmp.addElement(o);
  49.         obs = tmp;
  50.         }
  51.     } else {
  52.         obs = o;
  53.     }
  54.     }
  55.  
  56.     public synchronized void deleteObserver(Observer o) {
  57.     if (obs == o) {
  58.         obs = null;
  59.     } else if (obs != null && obs instanceof ObserverList) {
  60.         ((ObserverList) obs).removeElement(o);
  61.     } 
  62.     }
  63.  
  64.     public synchronized void notifyObservers() {
  65.     if (hasChanged()) {
  66.         if (obs != null) {
  67.         if (obs instanceof ObserverList) {
  68.             ((ObserverList) obs).notifyObservers(this);
  69.         } else {
  70.             ((Observer) obs).update(this);
  71.         }
  72.         }
  73.         clearChanged();
  74.     }
  75.     }
  76.  
  77.     public synchronized void deleteObservers() {
  78.     obs = null;
  79.     }
  80.  
  81.     protected synchronized void setChanged() {
  82.     changed = true;
  83.     }
  84.  
  85.     protected synchronized void clearChanged() {
  86.     changed = false;
  87.     }
  88.  
  89.     public synchronized boolean hasChanged() {
  90.     return changed;
  91.     }
  92.  
  93.     public synchronized int countObservers() {
  94.     if (obs != null) {
  95.         if (obs instanceof ObserverList) {
  96.         return ((ObserverList)obs).size();
  97.         } else {
  98.         return 1;
  99.         }
  100.     }
  101.     return 0;
  102.     }
  103. }
  104.