BESCgiInterface Class Reference

Represents the classic CGI interface into OPeNDAP. More...

#include <BESCgiInterface.h>

Inheritance diagram for BESCgiInterface:

Inheritance graph
[legend]
Collaboration diagram for BESCgiInterface:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 BESCgiInterface (const string &type, DODSFilter &df)
 Instantiate an instance of the BESCgiInterface interface.
virtual ~BESCgiInterface ()
virtual void dump (ostream &strm) const
 dumps information about this object
virtual int execute_request (const string &from)
 Executes the given request to generate a specified response object.

Static Public Member Functions

static void add_init_callback (p_bes_init init)
static void add_end_callback (p_bes_end end)

Protected Member Functions

virtual void build_data_request_plan ()
 Build the data request plan using the given DODSFilter.
virtual int exception_manager (BESException &e)
 Manage any exceptions thrown during the whole process.
virtual void initialize ()
 Initialize the BES object.
virtual void validate_data_request ()
 Validate the incoming request information.
virtual void execute_data_request_plan ()
 Execute the data request plan.
virtual void invoke_aggregation ()
 Aggregate the resulting response object.
virtual void transmit_data ()
 Transmit the resulting response object.
virtual void log_status ()
 Log the status of the request.
virtual void report_request ()
 Report the request and status of the request to BESReporterList::TheList().
virtual void end_request ()
 End the BES request.
virtual void clean ()
 Clean up after the request.

Protected Attributes

BESDataHandlerInterface _dhi
BESTransmitter_transmitter

Detailed Description

Represents the classic CGI interface into OPeNDAP.

OPeNDAP data handlers have been mainly accessed through a CGI interface. A person goes to a website with an OPeNDAP server and makes a certain request of that server for files available to that site.

This class provides an interface into the BES framework for the CGI interface. It greatly simplifies server coding for developers using the CGI interface.

Information from the DODSFilter class is placed in the BESDataHandlerInterface and a BESContainer is built from this information so that BES can handle the request, building the proper response using the appropriate data handler. BESCgiInterface also creates a Transmitter that interacts with the DODSFilter object for sending the response back to the user.

For example, a server to handle requests for the cedar data type would look something like this:

    CedarFilter df(argc, argv);
    BESCgiInterface d( "cedar", df ) ;
    d.execute_request() ;
    

And that's it!

See also:
BESInterface

BESContainer

_BESDataHandlerInterface

DODSFilter

BESFilterTransmitter


Constructor & Destructor Documentation

BESCgiInterface::BESCgiInterface ( const string &  type,
DODSFilter &  df 
)

Instantiate an instance of the BESCgiInterface interface.

Creates a BESFilterTransmitter to transmit the response back to the caller. Only the build_data_request_plan method is implemented in this class. All other methods are inherited from BESInterface.

Parameters:
type data type handled by this OPeNDAP CGI server
df DODSFilter object built from command line arguments
See also:
DODSFilter

BESFilterTransmitter

BESCgiInterface::~BESCgiInterface (  )  [virtual]


Member Function Documentation

void BESInterface::add_end_callback ( p_bes_end  end  )  [static, inherited]

void BESInterface::add_init_callback ( p_bes_init  init  )  [static, inherited]

void BESCgiInterface::build_data_request_plan (  )  [protected, virtual]

Build the data request plan using the given DODSFilter.

The BESDSDataHandlerInterace is built using information from the DODSFilter object passed to the constructor of this object. The constraint, data type, dataset, and action are retrieved from the DODSFilter to build the request plan.

See also:
_BESDataHandlerInterface

BESContainer

DODSFilter

Reimplemented from BESInterface.

void BESInterface::clean (  )  [protected, virtual, inherited]

Clean up after the request.

Reimplemented in BESCmdInterface.

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

dumps information about this object

Displays the pointer value of this instance along with information about the DODSFilter and the type of data handled by this interface.

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

Reimplemented from BESInterface.

void BESInterface::end_request (  )  [protected, virtual, inherited]

End the BES request.

This method allows developers to add callbacks at the end of a request, to do any cleanup or do any extra work at the end of a request

int BESInterface::exception_manager ( BESException e  )  [protected, virtual, inherited]

Manage any exceptions thrown during the whole process.

Specific responses are generated given a specific Exception caught. If additional exceptions are thrown within derived systems then implement those in the derived exception_manager methods. This is a catch-all manager and should be called once derived methods have caught their exceptions.

Parameters:
e BESException to be managed
Returns:
status after exception is handled
See also:
BESException

Reimplemented in BESApacheInterface.

void BESInterface::execute_data_request_plan (  )  [protected, virtual, inherited]

Execute the data request plan.

Given the information in the BESDataHandlerInterface, execute the request. To do this we simply find the response handler given the action in the BESDataHandlerInterface and tell it to execute.

If no BESResponseHandler can be found given the action then an exception is thrown.

See also:
_BESDataHandlerInterface

BESResponseHandler

BESResponseObject

Reimplemented in BESCmdInterface.

int BESInterface::execute_request ( const string &  from  )  [virtual, inherited]

Executes the given request to generate a specified response object.

Execute the request by: 1. initializing BES 2. validating the request, make sure all elements are present 3. build the request plan (ie filling in the BESDataHandlerInterface) 4. execute the request plan using the BESDataHandlerInterface 5. transmit the resulting response object 6. log the status of the execution 7. notify the reporters of the request 8. end the request, which allows developers to add callbacks to notify them of the end of the request

If an exception is thrown in any of these steps the exception is handed over to the exception manager in order to generate the proper response.

Returns:
status of the execution of the request, 0 if okay, !0 otherwise
See also:
initialize

validate_data_request

build_data_request_plan

execute_data_request_plan

transmit_data

log_status

report_request

end_request

exception_manager

Reimplemented in BESCmdInterface.

void BESInterface::initialize (  )  [protected, virtual, inherited]

Initialize the BES object.

This method must be called by all derived classes as it will initialize the environment

Reimplemented in BESApacheInterface, and BESCmdInterface.

void BESInterface::invoke_aggregation (  )  [protected, virtual, inherited]

Aggregate the resulting response object.

Reimplemented in BESCmdInterface.

void BESInterface::log_status (  )  [protected, virtual, inherited]

Log the status of the request.

Reimplemented in BESCmdInterface.

void BESInterface::report_request (  )  [protected, virtual, inherited]

Report the request and status of the request to BESReporterList::TheList().

If interested in reporting the request and status of the request then one must register a BESReporter with BESReporterList::TheList().

If no BESReporter objects are registered then nothing happens.

See also:
BESReporterList

BESReporter

void BESInterface::transmit_data (  )  [protected, virtual, inherited]

Transmit the resulting response object.

The derived classes are responsible for specifying a transmitter object for use in transmitting the response object. Again, the BESResponseHandler knows how to transmit itself.

If no response handler or no response object or no transmitter is specified then do nothing here.

See also:
BESResponseHandler

BESResponseObject

BESTransmitter

Reimplemented in BESCmdInterface.

void BESInterface::validate_data_request (  )  [protected, virtual, inherited]

Validate the incoming request information.

Reimplemented in BESApacheInterface, and BESCmdInterface.


Member Data Documentation

BESDataHandlerInterface BESInterface::_dhi [protected, inherited]

BESTransmitter* BESInterface::_transmitter [protected, inherited]


The documentation for this class was generated from the following files:
Generated on Wed Nov 21 12:19:49 2007 for OPeNDAP Back End Server (BES) by  doxygen 1.4.7