Implementation Class for a Remote Thermometer Object






package therm;
 
import java.rmi.*;
import java.rmi.server.*;
import java.util.Observable;
import java.util.Vector;
 
public class ThermometerImpl extends UnicastRemoteObject
                         implements Thermometer,
                                    java.io.Serializable
{
    String title;
    int minTemp, maxTemp, temp;
 
    public ThermometerImpl()            // Default constructor
        throws RemoteException
    {
        // Export the remote object by listening for incoming calls to the obj
        // on a port.
        //UnicastRemoteObject.exportObject( (Remote)this );
        super();
 
        title = "Farhenheit Thermometer";
        minTemp = 0; maxTemp = 100; temp = 50;
    }
 
    public ThermometerImpl(int temp)            // Constructor
        throws RemoteException
    {
        this();
        this.temp = temp;
    }
 
    public ThermometerImpl(int minTemp, int maxTemp, int temp)  // Constructor
        throws RemoteException
    {
        this(temp);
        this.minTemp = minTemp;
        this.maxTemp = maxTemp;
    }
 
    public ThermometerImpl(String title, int minTemp, int maxTemp, int temp)
       throws RemoteException
    {
        this(minTemp,maxTemp,temp);
        this.title = title;
    }
 
    public void setTitle(String t)
    {
        System.out.println( "ThermometerImpl: setTitle()" );
        title = t;
        changed();              // Notify observers of change
        System.out.println( "ThermometerImpl: setTitle() exiting" );
    }
 
    public String getTitle()
       {return title;}
 
    public void setTemp(int t)
    {
        if (0 <= t && t <= 100)
            temp = t;                   // Set temperature
        else
            {
             System.out.println(
                 "New temp out of range.  Setting to default of 50F" );
             temp = 50;                 // Set to default if t out of range
            }
 
        changed();                      // Notify observers of change
    }
 
    public int getTemp()
       {return temp;}
 
    public int getMinTemp()
       {return minTemp;}
 
    public int getMaxTemp()
       {return maxTemp;}
 
    public void changed()
    {
        notifyObservers();
    }
 
    // The following code is modeled on that provided by
    // java.util.Observable
 
    private Vector observers = new Vector();
 
    void notifyObservers()
    {
        System.out.println("Enter ThermometerImpl: notifyObservers()");
        int size = observers.size();
 
        for ( int i = 0; i < size; i++ )
        {
            try{
            ((ThermObserver)(observers.elementAt(i))).update( this,null );
            }
            catch ( RemoteException e )
            {}
        }
    }
 
    public void addObserver( Object o ) throws java.rmi.RemoteException
    {
        System.out.println("Enter ThermometerImpl: addObserver(), o = " +
                            o );
        if ( !observers.contains( o ) )
            observers.addElement( o );
    }