visad
Class ActionImpl

java.lang.Object
  extended by visad.ActionImpl
All Implemented Interfaces:
Runnable, EventListener, Action, ThingChangedListener
Direct Known Subclasses:
CellImpl, DisplayImpl, FormulaVar

public abstract class ActionImpl
extends Object
implements Action, Runnable

ActionImpl is the abstract superclass for runnable threads that need to be notified when ThingReference objects change.

ActionImpl is the superclass of DisplayImpl and CellImpl.

ActionImpl is not Serializable and should not be copied between JVMs.


Field Summary
static boolean TRACE_STACK
           
static boolean TRACE_TIME
          Indicates whether we print out the trace from where an action is invoked and print its run time
 
Constructor Summary
ActionImpl(String name)
          construct an ActionImpl
 
Method Summary
 void addReference(ThingReference ref)
          Creates a link to a ThingReference.
 boolean checkTicks()
           
 void disableAction()
          disable activity in this ActionImpl and if necessary wait for end of current doAction() call
abstract  void doAction()
          abstract method that implements activity of this ActionImpl
 void enableAction()
          enable activity in this ActionImpl and trigger any pending activity
 ReferenceActionLink findReference(ThingReference ref)
          Returns the link associated with a ThingReference.
 Thread getCurrentActionThread()
          return Thread currently active in run() method of this ActionImpl, or null is run() is not active
 Vector getLinks()
           
 String getName()
           
static int getTaskCount()
          return the number of tasks in the threadpool queue
static void printPool()
           
 void removeAllReferences()
          delete all links to ThingReferences
 void removeReference(ThingReference ref)
          Removes a link to a ThingReference.
 void run()
          invoked by a Thread from the ThreadPool whenever there is a request for activity in this ActionImpl
 boolean setEnabled(boolean enable)
          Set the "enabled" state of this action.
 void setName(String name)
          change the name of this Action
static void setThreadPoolMaximum(int num)
          increase the maximum number of Threads allowed in the ThreadPool
 void stop()
          stop activity in this ActionImpl
static void stopThreadPool()
          destroy all threads after they've drained the job queue
 boolean thingChanged(ThingChangedEvent e)
          a linked ThingReference has changed, requesting activity in this ActionImpl
 void waitForTasks()
          wait for all queued tasks in ThreadPool to finish
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

TRACE_TIME

public static final boolean TRACE_TIME
Indicates whether we print out the trace from where an action is invoked and print its run time


TRACE_STACK

public static final boolean TRACE_STACK
Constructor Detail

ActionImpl

public ActionImpl(String name)
construct an ActionImpl

Parameters:
name - - String name, used only for debugging
Method Detail

getTaskCount

public static int getTaskCount()
return the number of tasks in the threadpool queue

Returns:
number of queued and active tasks

printPool

public static void printPool()

stopThreadPool

public static void stopThreadPool()
destroy all threads after they've drained the job queue


setThreadPoolMaximum

public static void setThreadPoolMaximum(int num)
                                 throws Exception
increase the maximum number of Threads allowed in the ThreadPool

Parameters:
num - - new maximum number of Threads in ThreadPool
Throws:
Exception - - num is less than previous maximum

stop

public void stop()
stop activity in this ActionImpl


checkTicks

public boolean checkTicks()
Returns:
boolean that is disjunction (or) of flags saved in setTicks() calls to each linked ReferenceActionLink

enableAction

public void enableAction()
enable activity in this ActionImpl and trigger any pending activity


disableAction

public void disableAction()
disable activity in this ActionImpl and if necessary wait for end of current doAction() call


setEnabled

public boolean setEnabled(boolean enable)
Set the "enabled" state of this action. This may be used in code like the following to ensure that the action has the same "enabled" state on leaving the code as it did on entering it:

 ActionImpl action = ...;
 boolean wasEnabled = action.setEnabled(false);
 ...
 action.setEnabled(wasEnabled);
 

Parameters:
enable - The new "enabled" state for this action.
Returns:
The previous "enabled" state of this action.

getCurrentActionThread

public Thread getCurrentActionThread()
return Thread currently active in run() method of this ActionImpl, or null is run() is not active

Returns:
currently active thread or null

run

public void run()
invoked by a Thread from the ThreadPool whenever there is a request for activity in this ActionImpl

Specified by:
run in interface Runnable

doAction

public abstract void doAction()
                       throws VisADException,
                              RemoteException
abstract method that implements activity of this ActionImpl

Throws:
VisADException - a VisAD error occurred
RemoteException - an RMI error occurred

thingChanged

public boolean thingChanged(ThingChangedEvent e)
                     throws VisADException,
                            RemoteException
a linked ThingReference has changed, requesting activity in this ActionImpl

Specified by:
thingChanged in interface ThingChangedListener
Parameters:
e - ThingChangedEvent for change to ThingReference
Returns:
true if the ThingReference changed
Throws:
VisADException - a VisAD error occurred
RemoteException - an RMI error occurred

waitForTasks

public void waitForTasks()
wait for all queued tasks in ThreadPool to finish


addReference

public void addReference(ThingReference ref)
                  throws ReferenceException,
                         RemoteVisADException,
                         VisADException,
                         RemoteException
Creates a link to a ThingReference. Note that this method causes this object to register itself with the ThingReference.

Specified by:
addReference in interface Action
Parameters:
ref - The ThingReference to which to create the link. Subsequent invocation of thingChanged(ThingChangedEvent) causes invocation of ref.acknowledgeThingChanged(this) . This method invokes ref.addThingChangedListener(this, ...).
Throws:
RemoteVisADException - if the reference isn't a ThingReferenceImpl.
ReferenceException - if the reference has already been added.
VisADException - if a VisAD failure occurs.
RemoteException - if a Java RMI failure occurs.
See Also:
thingChanged(ThingChangedEvent), ThingReference.addThingChangedListener(ThingChangedListener, long)

removeReference

public void removeReference(ThingReference ref)
                     throws VisADException,
                            RemoteException

Removes a link to a ThingReference.

This implementation invokes findReference(ThingReference).

Specified by:
removeReference in interface Action
Parameters:
ref - The reference to be removed.
Throws:
RemoteVisADException - if the reference isn't a ThingReferenceImpl.
ReferenceException - if the reference isn't a part of this instance.
VisADException - if a VisAD failure occurs.
RemoteException - if a Java RMI failure occurs.

removeAllReferences

public void removeAllReferences()
                         throws VisADException,
                                RemoteException
delete all links to ThingReferences

Specified by:
removeAllReferences in interface Action
Throws:
RemoteException
VisADException

findReference

public ReferenceActionLink findReference(ThingReference ref)
                                  throws VisADException
Returns the link associated with a ThingReference.

Parameters:
ref - The reference to find.
Returns:
The link associated with the reference.
Throws:
ReferenceException - if the argument is null.
VisADException - if the argument is null.

getLinks

public Vector getLinks()
Returns:
Vector of linked ReferenceActionLinks

getName

public String getName()
Specified by:
getName in interface Action
Returns:
String name of this Action

setName

public void setName(String name)
change the name of this Action

Parameters:
name - new String name