BESRequestHandlerList Class Reference

maintains the list of registered request handlers for this server More...

#include <BESRequestHandlerList.h>

Inheritance diagram for BESRequestHandlerList:

Inheritance graph
[legend]
Collaboration diagram for BESRequestHandlerList:

Collaboration graph
[legend]

List of all members.

Public Types

typedef map< string,
BESRequestHandler * >
::const_iterator 
Handler_citer
typedef map< string,
BESRequestHandler * >
::iterator 
Handler_iter

Public Member Functions

virtual ~BESRequestHandlerList (void)
virtual bool add_handler (const string &handler_name, BESRequestHandler *handler)
 add a request handler to the list of registered handlers for this server
virtual BESRequestHandlerremove_handler (const string &handler_name)
 remove and return the specified request handler
virtual BESRequestHandlerfind_handler (const string &handler_name)
 find and return the specified request handler
virtual Handler_citer get_first_handler ()
 return an iterator pointing to the first request handler in the list
virtual Handler_citer get_last_handler ()
 return a constant iterator pointing to the end of the list
virtual string get_handler_names ()
 Returns a comma separated string of request handlers registered with the server.
virtual void execute_each (BESDataHandlerInterface &dhi)
 for each container in the given data handler interface, execute the given request
virtual void execute_all (BESDataHandlerInterface &dhi)
 for all of the registered request handlers, execute the given request
virtual void execute_once (BESDataHandlerInterface &dhi)
 Execute a single method that will fill in the response object rather than iterating over the list of containers or request handlers.
virtual void execute_current (BESDataHandlerInterface &dhi)
 Execute a single method for the current container that will fill in the response object rather than iterating over the list of containers or request handlers.
virtual void dump (ostream &strm) const
 dumps information about this object

Static Public Member Functions

static BESRequestHandlerListTheList ()

Protected Member Functions

 BESRequestHandlerList (void)


Detailed Description

maintains the list of registered request handlers for this server

For a type of data to be handled by the BES the data type must registered a request handler with the server. This request handler knows how to fill in specific response objects, such as DAS, DDS, help, version, etc... The request handlers are registered with this request handler list.


Member Typedef Documentation

typedef map< string, BESRequestHandler * >::const_iterator BESRequestHandlerList::Handler_citer

typedef map< string, BESRequestHandler * >::iterator BESRequestHandlerList::Handler_iter


Constructor & Destructor Documentation

BESRequestHandlerList::BESRequestHandlerList ( void   )  [inline, protected]

virtual BESRequestHandlerList::~BESRequestHandlerList ( void   )  [inline, virtual]


Member Function Documentation

bool BESRequestHandlerList::add_handler ( const string &  handler_name,
BESRequestHandler handler_object 
) [virtual]

add a request handler to the list of registered handlers for this server

Parameters:
handler_name name of the data type handled by this request handler
handler_object the request handler object that knows how to fill in specific response objects
Returns:
true if successfully added, false if already exists
See also:
BESRequestHandler

References find_handler().

Referenced by BESDapModule::initialize().

Here is the call graph for this function:

void BESRequestHandlerList::dump ( ostream &  strm  )  const [virtual]

dumps information about this object

Displays the pointer value of this instance along with information about each of the registered request handlers.

Parameters:
strm C++ i/o stream to dump the information to

Implements BESObj.

References BESRequestHandler::dump(), BESIndent::Indent(), BESIndent::LMarg(), and BESIndent::UnIndent().

Here is the call graph for this function:

void BESRequestHandlerList::execute_all ( BESDataHandlerInterface dhi  )  [virtual]

for all of the registered request handlers, execute the given request

In some cases, such as a version or help request, it is necessary to iterate over all of the registered request handlers to fill in the response object. If a request handler does not know how to fill in the response object, i.e. doesn't handle the response type, then simply move on to the next. No exception is thrown in this case.

Parameters:
dhi data handler interface that contains the necessary information to fill in the response object.
See also:
_BESDataHandlerInterface

BESRequestHandler

BESResponseObject

References _BESDataHandlerInterface::action, BESRequestHandler::find_handler(), get_first_handler(), and get_last_handler().

Referenced by BESVersionResponseHandler::execute(), and BESHelpResponseHandler::execute().

Here is the call graph for this function:

void BESRequestHandlerList::execute_current ( BESDataHandlerInterface dhi  )  [virtual]

Execute a single method for the current container that will fill in the response object rather than iterating over the list of containers or request handlers.

The request is passed * off to the request handler for the current container in the data handler interface.

Parameters:
dhi data handler interface that contains the necessary information to fill in the response object
Exceptions:
BESInternalError if the request handler cannot be found for the current containers data type or if the request handler cannot fill in the specified response object.
See also:
_BESDataHandlerInterface

BESContainer

BESResponseObject

References _BESDataHandlerInterface::action, _BESDataHandlerInterface::container, _BESDataHandlerInterface::data, BESRequestHandler::find_handler(), find_handler(), BESContainer::get_container_type(), BESContainer::get_real_name(), and REAL_NAME_LIST.

Referenced by execute_each(), and execute_once().

Here is the call graph for this function:

void BESRequestHandlerList::execute_each ( BESDataHandlerInterface dhi  )  [virtual]

for each container in the given data handler interface, execute the given request

For some response objects it is necessary to iterate over all of the containers listed in the specified data handler interface. For each container, get the type of data represented by that container, find the request handler for that data type, find the method within that request handler that knows how to handle the response object to be filled in, and execute that method.

Parameters:
dhi the data handler interface that contains the list of containers to be iterated over
Exceptions:
BESInternalError if any one of the request handlers does not know how to fill in the specified response object or if any one of the request handlers does not exist.
See also:
_BESDataHandlerInterface

BESContainer

BESRequestHandler

BESResponseObject

References _BESDataHandlerInterface::container, execute_current(), _BESDataHandlerInterface::first_container(), and _BESDataHandlerInterface::next_container().

Referenced by BESDDXResponseHandler::execute(), BESDDSResponseHandler::execute(), BESDataResponseHandler::execute(), and BESDASResponseHandler::execute().

Here is the call graph for this function:

void BESRequestHandlerList::execute_once ( BESDataHandlerInterface dhi  )  [virtual]

Execute a single method that will fill in the response object rather than iterating over the list of containers or request handlers.

This method is for requests of a single type of data. The request is passed off to the request handler for the first container in the data handler interface. It is up to this request handlers method for the specified response object type to fill in the response object. It can iterate over the containers in the data handler interface, for example.

Parameters:
dhi data handler interface that contains the necessary information to fill in the response object
Exceptions:
BESInternalError if the request handler cannot be found for the first containers data type or if the request handler cannot fill in the specified response object.
See also:
_BESDataHandlerInterface

BESContainer

BESResponseObject

References execute_current(), and _BESDataHandlerInterface::first_container().

Here is the call graph for this function:

BESRequestHandler * BESRequestHandlerList::find_handler ( const string &  handler_name  )  [virtual]

find and return the specified request handler

Parameters:
handler_name name of the data type request handler
Returns:
the request handler for the specified data type, NULL if not found
See also:
BESRequestHandler

Referenced by add_handler(), and execute_current().

BESRequestHandlerList::Handler_citer BESRequestHandlerList::get_first_handler (  )  [virtual]

return an iterator pointing to the first request handler in the list

Returns:
a constant iterator pointing to the first request handler in the list
See also:
BESRequestHandler

Referenced by execute_all().

string BESRequestHandlerList::get_handler_names (  )  [virtual]

Returns a comma separated string of request handlers registered with the server.

Returns:
comma separated string of request handler names registered with the server.
See also:
BESRequestHandler

BESRequestHandlerList::Handler_citer BESRequestHandlerList::get_last_handler (  )  [virtual]

return a constant iterator pointing to the end of the list

Returns:
a constant iterator pointing to the end of the list
See also:
BESRequestHandler

Referenced by execute_all().

BESRequestHandler * BESRequestHandlerList::remove_handler ( const string &  handler_name  )  [virtual]

remove and return the specified request handler

Finds, removes and returns the specified request handler. if the handler exists then it is removed from the list, but not deleted. Deleting the request handler is the responsability of the caller. The request handler is then returned to the caller. If not found, NULL is returned

Parameters:
handler_name name of the data type request handler to be removed and returned
Returns:
returns the request handler if found, NULL otherwise
See also:
BESRequestHandler

Referenced by BESDapModule::terminate().

BESRequestHandlerList * BESRequestHandlerList::TheList (  )  [static]


The documentation for this class was generated from the following files:

Generated on Wed Mar 4 04:33:40 2009 for OPeNDAP Back End Server (BES) by  doxygen 1.5.8