ucar.netcdf
Class RemoteAccessorImpl

java.lang.Object
  extended byjava.rmi.server.RemoteObject
      extended byucar.netcdf.RemoteAccessorImpl
All Implemented Interfaces:
Accessor, Remote, RemoteAccessor, Serializable

public class RemoteAccessorImpl
extends RemoteObject
implements RemoteAccessor

RemoteAccessorImpl is a UnicastRemoteObject (RMI service) which implements ucar.multiarray.RemoteAccessor using the proxy pattern. Accessor methods are forwarded to the adaptee and adaptee exceptions are wrapped in java.rmi.ServerException.

See Also:
Serialized Form

Field Summary
 
Fields inherited from class java.rmi.server.RemoteObject
ref
 
Constructor Summary
RemoteAccessorImpl(NetcdfRemoteProxyImpl svr, Accessor adaptee)
          Construct a UnicastRemoteObject which acts as an Accessor proxy.
 
Method Summary
 void copyin(int[] origin, MultiArray source)
          Aggregate write access.
 MultiArray copyout(int[] origin, int[] shape)
          Aggregate read access.
 Object get(int[] index)
          Get (read) the array element at index.
 boolean getBoolean(int[] index)
          Get the array element at index, as a boolean.
 byte getByte(int[] index)
          Get the array element at index, as a byte.
 char getChar(int[] index)
          Get the array element at index, as a char.
 double getDouble(int[] index)
          Get the array element at index, as a double.
 float getFloat(int[] index)
          Get the array element at index, as a float.
 int getInt(int[] index)
          Get the array element at index, as an int.
 long getLong(int[] index)
          Get the array element at index, as a long.
 short getShort(int[] index)
          Get the array element at index, as a short.
 void set(int[] index, Object value)
          Set (modify, write) the array element at index to the specified value.
 void setBoolean(int[] index, boolean value)
          Set the array element at index to the specified boolean value.
 void setByte(int[] index, byte value)
          Set the array element at index to the specified byte value.
 void setChar(int[] index, char value)
          Set the array element at index to the specified char value.
 void setDouble(int[] index, double value)
          Set the array element at index to the specified double value.
 void setFloat(int[] index, float value)
          Set the array element at index to the specified float value.
 void setInt(int[] index, int value)
          Set the array element at index to the specified int value.
 void setLong(int[] index, long value)
          Set the array element at index to the specified long value.
 void setShort(int[] index, short value)
          Set the array element at index to the specified short value.
 Object toArray()
          Returns a new array containing all of the elements in this MultiArray.
 Object toArray(Object dst, int[] origin, int[] shape)
          Returns an array containing elements of this MultiArray specified by origin and shape, possibly converting the component type.
 
Methods inherited from class java.rmi.server.RemoteObject
equals, getRef, hashCode, toString, toStub
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

RemoteAccessorImpl

public RemoteAccessorImpl(NetcdfRemoteProxyImpl svr,
                          Accessor adaptee)
                   throws RemoteException
Construct a UnicastRemoteObject which acts as an Accessor proxy.

Parameters:
svr - NetcdfRemoteProxyImpl which owns this. May be null.
adaptee - Accessor to which the Accessor methods of this are forwarded.
Method Detail

get

public Object get(int[] index)
           throws RemoteException
Description copied from interface: Accessor
Get (read) the array element at index. The returned value is wrapped in an object if it has a primitive type. Length of index must be greater than or equal to the rank of this. Values of index components must be less than corresponding values from getLengths().

Specified by:
get in interface RemoteAccessor
Throws:
RemoteException

getBoolean

public boolean getBoolean(int[] index)
                   throws RemoteException
Description copied from interface: Accessor
Get the array element at index, as a boolean.

Specified by:
getBoolean in interface RemoteAccessor
Throws:
RemoteException

getChar

public char getChar(int[] index)
             throws RemoteException
Description copied from interface: Accessor
Get the array element at index, as a char.

Specified by:
getChar in interface RemoteAccessor
Throws:
RemoteException

getByte

public byte getByte(int[] index)
             throws RemoteException
Description copied from interface: Accessor
Get the array element at index, as a byte.

Specified by:
getByte in interface RemoteAccessor
Throws:
RemoteException

getShort

public short getShort(int[] index)
               throws RemoteException
Description copied from interface: Accessor
Get the array element at index, as a short.

Specified by:
getShort in interface RemoteAccessor
Throws:
RemoteException

getInt

public int getInt(int[] index)
           throws RemoteException
Description copied from interface: Accessor
Get the array element at index, as an int.

Specified by:
getInt in interface RemoteAccessor
Throws:
RemoteException

getLong

public long getLong(int[] index)
             throws RemoteException
Description copied from interface: Accessor
Get the array element at index, as a long.

Specified by:
getLong in interface RemoteAccessor
Throws:
RemoteException

getFloat

public float getFloat(int[] index)
               throws RemoteException
Description copied from interface: Accessor
Get the array element at index, as a float.

Specified by:
getFloat in interface RemoteAccessor
Throws:
RemoteException

getDouble

public double getDouble(int[] index)
                 throws RemoteException
Description copied from interface: Accessor
Get the array element at index, as a double.

Specified by:
getDouble in interface RemoteAccessor
Throws:
RemoteException

set

public void set(int[] index,
                Object value)
         throws RemoteException
Description copied from interface: Accessor
Set (modify, write) the array element at index to the specified value. If the array has a primitive component type, the value may be unwrapped. Values of index components must be less than corresponding values from getLengths().

Specified by:
set in interface RemoteAccessor
Throws:
RemoteException

setBoolean

public void setBoolean(int[] index,
                       boolean value)
                throws RemoteException
Description copied from interface: Accessor
Set the array element at index to the specified boolean value.

Specified by:
setBoolean in interface RemoteAccessor
Throws:
RemoteException

setChar

public void setChar(int[] index,
                    char value)
             throws RemoteException
Description copied from interface: Accessor
Set the array element at index to the specified char value.

Specified by:
setChar in interface RemoteAccessor
Throws:
RemoteException

setByte

public void setByte(int[] index,
                    byte value)
             throws RemoteException
Description copied from interface: Accessor
Set the array element at index to the specified byte value.

Specified by:
setByte in interface RemoteAccessor
Throws:
RemoteException

setShort

public void setShort(int[] index,
                     short value)
              throws RemoteException
Description copied from interface: Accessor
Set the array element at index to the specified short value.

Specified by:
setShort in interface RemoteAccessor
Throws:
RemoteException

setInt

public void setInt(int[] index,
                   int value)
            throws RemoteException
Description copied from interface: Accessor
Set the array element at index to the specified int value.

Specified by:
setInt in interface RemoteAccessor
Throws:
RemoteException

setLong

public void setLong(int[] index,
                    long value)
             throws RemoteException
Description copied from interface: Accessor
Set the array element at index to the specified long value.

Specified by:
setLong in interface RemoteAccessor
Throws:
RemoteException

setFloat

public void setFloat(int[] index,
                     float value)
              throws RemoteException
Description copied from interface: Accessor
Set the array element at index to the specified float value.

Specified by:
setFloat in interface RemoteAccessor
Throws:
RemoteException

setDouble

public void setDouble(int[] index,
                      double value)
               throws RemoteException
Description copied from interface: Accessor
Set the array element at index to the specified double value.

Specified by:
setDouble in interface RemoteAccessor
Throws:
RemoteException

copyout

public MultiArray copyout(int[] origin,
                          int[] shape)
                   throws RemoteException
Description copied from interface: Accessor
Aggregate read access. Return a new MultiArray of the same componentType as this, and with shape as specified, which is initialized to the values of this, as clipped to (origin, origin + shape).

It is easier to implement than to specify :-).

The main reason to implement this instead of using the equivalent proxy is for remote or file access.

assert(origin[ii] + shape[ii] <= lengths[ii]);

Specified by:
copyout in interface RemoteAccessor
Throws:
RemoteException

copyin

public void copyin(int[] origin,
                   MultiArray source)
            throws RemoteException
Description copied from interface: Accessor
Aggregate write access. Given a MultiArray, copy it into this at the specified starting index. TODO: clearer specification.

Hopefully this member can be optimized in various situations.

assert(origin[ii] + (source.getLengths())[ii] <= (getLengths())[ii]);

Specified by:
copyin in interface RemoteAccessor
Throws:
RemoteException

toArray

public Object toArray()
               throws RemoteException
Description copied from interface: Accessor
Returns a new array containing all of the elements in this MultiArray. The returned array is one dimensional. The order of the elements in the result is natural, as if we used an IndexIterator to step through the elements of this MultiArray. The component type of the result is the same as this.

This method acts as bridge between array-based and MultiArray-based APIs.

This method is functionally equivalent to

                Object anArray = Array.newInstance(getComponentType(), 1);
                int [] origin = new int[getRank()]
                int [] shape = getDimensions();
                return toArray(anArray, origin, shape);
 

Specified by:
toArray in interface RemoteAccessor
Throws:
RemoteException

toArray

public Object toArray(Object dst,
                      int[] origin,
                      int[] shape)
               throws RemoteException
Description copied from interface: Accessor
Returns an array containing elements of this MultiArray specified by origin and shape, possibly converting the component type. The returned array is one dimensional. The order of the elements in the result is natural, as if we used an IndexIterator to step through the elements of this MultiArray.

The anArray argument should be an array. If it is large enough to contain the output, it is used and no new storage is allocated. Otherwise, new storage is allocated with the same component type as the argument, and the data is copied into it.

This method acts as bridge between array-based and MultiArray-based APIs.

This method is similar to copyout(origin, shape).toArray(), but avoids a copy operation and (potentially) an allocation.

NOTE: Implementation of type conversion is deferred until JDK 1.2. Currently, the componentType of anArray must be the same as this

Specified by:
toArray in interface RemoteAccessor
Throws:
RemoteException