uwcse.location
Class FusionService

java.lang.Object
  |
  +--com.intel.research.rain.Service
        |
        +--uwcse.location.LocationService
              |
              +--uwcse.location.FusionService
All Implemented Interfaces:
MessageHandler

public class FusionService
extends LocationService

A service to collect the Measurements generated by various hardware drivers and perform sensor fusion.

Version:
$Revision: 1.59 $
Author:
Jeffrey Hightower
See Also:
Measurement

Nested Class Summary
protected  class FusionService.FusionMeasurementThread
          A helper thread class for the FusionService to consume measurements received and queued by the FusionService and update the appropriate physical object's trackers.
protected  class FusionService.FusionThread
          A helper abstract thread class for the FusionService
protected  class FusionService.NameSubscriptionThread
          A thread class to manage and dispatch name subscription issues.
protected  class FusionService.SubscriptionThread
          A thread class to manage and dispatch subscription issues.
protected  class FusionService.TypeSubscriptionThread
          A thread class to manage and dispatch type subscription issues.
 
Nested classes inherited from class uwcse.location.LocationService
LocationService.RediscoverServices
 
Field Summary
protected  String m_dbInitDir
           
protected  String m_dbSaveDir
           
protected  DisplayPanel m_displayPanel
           
protected  ThreadGroup m_fusionMeasurementThreadGroup
           
protected  ThreadGroup m_fusionThreadGroup
           
protected  JFrame m_mainFrame
           
protected  ProducerConsumerQueue m_measurementQueue
           
protected  PhysicalObjectDatabase m_objectDatabase
           
protected  Map m_subscriptionToThreadMap
           
protected  long SUBSCRIPTION_LENGTH
           
protected  long SUBSCRIPTION_PERIOD
           
 
Fields inherited from class uwcse.location.LocationService
CONFIG_FILENAME, MESSAGE_ELEMENT, MESSAGE_EXTENSION, RPC_ELEMENT, RPC_EXCEPTION_ELEMENT, RPC_EXTENSION, RPC_RESULT_ELEMENT
 
Constructor Summary
FusionService(String databaseInitDirectory, String databaseSaveDirectory)
          Construct a FusionServce.
 
Method Summary
protected  void handleTerminalCommand(String cmd)
          Process fusion terminal command strings captured by runTerminalCommandLoop.
 void hideVisualization()
          Hide the visualization window.
static void main(String[] argv)
           
protected static void printUsageAndExit()
          Show the program argument usage and then exit.
protected  void processLocationMsg(ServiceID from, LocationMsg@MeasurementMsg measMsg)
          Handle incoming Measurements by placing them on the processing queue.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@AddChildObjectRpc addChildObjectRpc)
          Handle an RPC request to add a child PhysicalObject to the database with an existing parent.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@AddObjectRpc addRpc)
          Handle an RPC request to add a PhysicalObject to the database.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@AddObjectWithStateRpc addRpc)
          Handle an RPC request to add a PhysicalObject to the database and initialize its State.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@LinkObjectRpc linkObjectRpc)
          Handle an RPC request to hierarchically link two existing PhysicalObjects in the database.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@LocationQuery query)
          Respond to a query request for the locations of objects.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@NameSubscriptionReq nameSubReq)
          Request a subscription to the named object.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@ObjectNameQuery query)
          Respond to a request to query the database for the names of objects.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@PhysicalObjectQuery query)
          Respond to a query request for a PhysicalObject.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@PhysicalObjectRootQuery query)
          Respond to a query request for a root PhysicalObject.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@RemoveObjectGroupRpc removeObjectGroupRpc)
          Handle an RPC request to remove from the database a PhysicalObject and all child objects in its hierarchical group.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@RemoveObjectRpc removeObjectRpc)
          Handle an RPC request to remove a PhysicalObject from the database.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@SubscriptionCancellationReq req)
          Handle a request to cancel an existing subscription.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@SubscriptionExpirationReq req)
          Handle a request to expire an existing subscription.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@SubscriptionRenewalReq req)
          Handle a request to renew an existing subscription.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@TypeLocationQuery query)
          Respond to a query request for the locations of all objects of a certain type.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@TypeSubscriptionReq typeSubReq)
          Request a subscription to all objects of a given type.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@UnlinkObjectRpc unlinkObjectRpc)
          Handle an RPC request to unlink an existing PhysicalObjects from any grouping parents in the database.
protected  LocationRpcResult processLocationRpc(ServiceID from, LocationRpc@WorldMapQuery query)
          Respond to a query request for the world map.
 void showVisualization()
          Display the visualization window.
protected  void withdraw()
          Supplement the inherited behavior to gracefully shutdown the thread groups and possibly save a database snapshot when withdrawing from Rain.
 
Methods inherited from class uwcse.location.LocationService
addObject, callLocationRpc, correctedTimeMillis, getObject, getSysclockError, multicastLocationMsg, multicastLocationMsgs, processLocationMsg, processLocationRpc, runTerminalCommandLoop, sendLocationMsg, sendLocationMsgs, setDescription
 
Methods inherited from class com.intel.research.rain.Service
getDaemon, getDispatcher, getServiceID, process, receive, setDaemon
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SUBSCRIPTION_LENGTH

protected final long SUBSCRIPTION_LENGTH

SUBSCRIPTION_PERIOD

protected final long SUBSCRIPTION_PERIOD

m_measurementQueue

protected ProducerConsumerQueue m_measurementQueue

m_fusionThreadGroup

protected ThreadGroup m_fusionThreadGroup

m_fusionMeasurementThreadGroup

protected ThreadGroup m_fusionMeasurementThreadGroup

m_objectDatabase

protected PhysicalObjectDatabase m_objectDatabase

m_subscriptionToThreadMap

protected Map m_subscriptionToThreadMap

m_dbInitDir

protected String m_dbInitDir

m_dbSaveDir

protected String m_dbSaveDir

m_mainFrame

protected JFrame m_mainFrame

m_displayPanel

protected DisplayPanel m_displayPanel
Constructor Detail

FusionService

public FusionService(String databaseInitDirectory,
                     String databaseSaveDirectory)
              throws RainException,
                     LocationException
Construct a FusionServce.

Parameters:
databaseInitDirectory - the name of the filesystem directory containing a persistent database snapshot that will be used for initalization. Must not be null and should designate an existing directory.
databaseSaveDirectory - the name of a filesystem directory to save a persistent database snapshot when the FusionService is withdrawn. No snapshot is saved if this parameter is null.
Throws:
RainException
LocationException
See Also:
withdraw()
Method Detail

processLocationMsg

protected void processLocationMsg(ServiceID from,
                                  LocationMsg@MeasurementMsg measMsg)
Handle incoming Measurements by placing them on the processing queue.

Overrides:
processLocationMsg in class LocationService
See Also:
Measurement, ProducerConsumerQueue

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@AddChildObjectRpc addChildObjectRpc)
                                        throws DuplicatePhysicalObjectException,
                                               NoSuchPhysicalObjectException
Handle an RPC request to add a child PhysicalObject to the database with an existing parent.

Overrides:
processLocationRpc in class LocationService
Throws:
DuplicatePhysicalObjectException
NoSuchPhysicalObjectException
See Also:
PhysicalObjectDatabase.add(PhysicalObject,String)

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@AddObjectRpc addRpc)
                                        throws DuplicatePhysicalObjectException,
                                               NoSuchPhysicalObjectException
Handle an RPC request to add a PhysicalObject to the database.

Overrides:
processLocationRpc in class LocationService
Throws:
DuplicatePhysicalObjectException
NoSuchPhysicalObjectException
See Also:
PhysicalObjectDatabase.add(PhysicalObject)

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@AddObjectWithStateRpc addRpc)
                                        throws DuplicatePhysicalObjectException,
                                               NoSuchPhysicalObjectException
Handle an RPC request to add a PhysicalObject to the database and initialize its State.

Overrides:
processLocationRpc in class LocationService
Throws:
DuplicatePhysicalObjectException
NoSuchPhysicalObjectException
See Also:
PhysicalObjectDatabase.add(PhysicalObject), PhysicalObjectDatabase.getTracker(String), Tracker.initLocation(LocationReport)

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@LinkObjectRpc linkObjectRpc)
                                        throws NoSuchPhysicalObjectException
Handle an RPC request to hierarchically link two existing PhysicalObjects in the database.

Overrides:
processLocationRpc in class LocationService
Throws:
NoSuchPhysicalObjectException
See Also:
PhysicalObjectDatabase.link(String,String)

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@UnlinkObjectRpc unlinkObjectRpc)
                                        throws NoSuchPhysicalObjectException
Handle an RPC request to unlink an existing PhysicalObjects from any grouping parents in the database.

Overrides:
processLocationRpc in class LocationService
Throws:
NoSuchPhysicalObjectException
See Also:
PhysicalObjectDatabase.unlink(String)

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@RemoveObjectGroupRpc removeObjectGroupRpc)
                                        throws NoSuchPhysicalObjectException
Handle an RPC request to remove from the database a PhysicalObject and all child objects in its hierarchical group.

Overrides:
processLocationRpc in class LocationService
Throws:
NoSuchPhysicalObjectException
See Also:
PhysicalObjectDatabase.removeGroup(String)

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@RemoveObjectRpc removeObjectRpc)
                                        throws NoSuchPhysicalObjectException
Handle an RPC request to remove a PhysicalObject from the database.

Overrides:
processLocationRpc in class LocationService
Throws:
NoSuchPhysicalObjectException
See Also:
PhysicalObjectDatabase.remove(String)

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@WorldMapQuery query)
                                        throws NoSuchPhysicalObjectException
Respond to a query request for the world map.

Overrides:
processLocationRpc in class LocationService
Throws:
NoSuchPhysicalObjectException
See Also:
PhysicalObjectDatabase.getObject(String)

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@PhysicalObjectQuery query)
                                        throws NoSuchPhysicalObjectException
Respond to a query request for a PhysicalObject.

Overrides:
processLocationRpc in class LocationService
Throws:
NoSuchPhysicalObjectException
See Also:
PhysicalObjectDatabase.getObject(String)

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@PhysicalObjectRootQuery query)
                                        throws NoSuchPhysicalObjectException
Respond to a query request for a root PhysicalObject.

Overrides:
processLocationRpc in class LocationService
Throws:
NoSuchPhysicalObjectException
See Also:
PhysicalObjectDatabase.getObject(String)

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@LocationQuery query)
Respond to a query request for the locations of objects.

Overrides:
processLocationRpc in class LocationService
See Also:
LocationReport, PhysicalObjectDatabase.getTracker(String), Tracker.createLocationReport()

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@TypeLocationQuery query)
                                        throws ClassNotFoundException
Respond to a query request for the locations of all objects of a certain type.

Overrides:
processLocationRpc in class LocationService
Throws:
ClassNotFoundException
See Also:
LocationReport, PhysicalObjectDatabase.getTracker(String), Tracker.createLocationReport()

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@NameSubscriptionReq nameSubReq)
Request a subscription to the named object.

Overrides:
processLocationRpc in class LocationService

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@TypeSubscriptionReq typeSubReq)
                                        throws ClassNotFoundException
Request a subscription to all objects of a given type.

Overrides:
processLocationRpc in class LocationService
Throws:
ClassNotFoundException

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@SubscriptionRenewalReq req)
                                        throws NoSuchSubscriptionException
Handle a request to renew an existing subscription.

Overrides:
processLocationRpc in class LocationService
Throws:
NoSuchSubscriptionException

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@SubscriptionExpirationReq req)
                                        throws NoSuchSubscriptionException
Handle a request to expire an existing subscription.

Overrides:
processLocationRpc in class LocationService
Throws:
NoSuchSubscriptionException

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@SubscriptionCancellationReq req)
                                        throws NoSuchSubscriptionException
Handle a request to cancel an existing subscription.

Overrides:
processLocationRpc in class LocationService
Throws:
NoSuchSubscriptionException

processLocationRpc

protected LocationRpcResult processLocationRpc(ServiceID from,
                                               LocationRpc@ObjectNameQuery query)
Respond to a request to query the database for the names of objects.

Overrides:
processLocationRpc in class LocationService
See Also:
PhysicalObjectDatabase.queryNames(), PhysicalObjectDatabase.queryNamesByType(String), PhysicalObjectDatabase.queryNamesByGroup(String), PhysicalObjectDatabase.queryNamesByTypeAndGroup(String,String)

withdraw

protected void withdraw()
Supplement the inherited behavior to gracefully shutdown the thread groups and possibly save a database snapshot when withdrawing from Rain.

Overrides:
withdraw in class LocationService
See Also:
FusionService#FusionService(String), FusionService(String,String), FusionService#FusionService(String,String,String), PhysicalObjectDatabase.save(File)

showVisualization

public void showVisualization()
Display the visualization window.


hideVisualization

public void hideVisualization()
Hide the visualization window.


handleTerminalCommand

protected void handleTerminalCommand(String cmd)
Process fusion terminal command strings captured by runTerminalCommandLoop.

Overrides:
handleTerminalCommand in class LocationService
See Also:
#runTerminalCommandLoop()

printUsageAndExit

protected static void printUsageAndExit()
Show the program argument usage and then exit.


main

public static void main(String[] argv)


This documentation is for the Location Stack v0.8. The latest distribution, the documentation, and the list of contributors to the Location Stack can always be found at http://portolano.cs.washington.edu/projects/location/

© Copyright 2004 University of Washington CSE