BESCgiInterface.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "BESCgiInterface.h"
00034 #include "DODSFilter.h"
00035 #include "BESFileContainer.h"
00036 #include "BESFilterTransmitter.h"
00037 #include "BESSyntaxUserError.h"
00038 #include "BESResponseHandlerList.h"
00039 #include "cgi_util.h"
00040 #include "BESDataNames.h"
00041 #include "BESDebug.h"
00042
00054 BESCgiInterface::BESCgiInterface( const string &type, DODSFilter &df )
00055 : BESInterface( &cout ),
00056 _type( type ),
00057 _df( &df )
00058 {
00059 _dhi = &_cgi_dhi ;
00060 _dhi->transmit_protocol = "HTTP" ;
00061 _transmitter = new BESFilterTransmitter( df ) ;
00062 }
00063
00064 BESCgiInterface::~BESCgiInterface()
00065 {
00066 clean() ;
00067 if( _transmitter ) delete _transmitter ;
00068 _transmitter = 0 ;
00069 }
00070
00082 void
00083 BESCgiInterface::build_data_request_plan()
00084 {
00085 BESDEBUG( "bes", "Building data request plan ... " << endl )
00086 string symbolic_name = name_path( _df->get_dataset_name() ) ;
00087 BESDEBUG( "bes", " symbolic name = " << symbolic_name << endl )
00088 BESDEBUG( "bes", " constraint = " << _df->get_ce() << endl )
00089 BESDEBUG( "bes", " dataset name = " << _df->get_dataset_name() << endl )
00090 BESDEBUG( "bes", " type = " << _type << endl )
00091 BESContainer *d = new BESFileContainer( symbolic_name,
00092 _df->get_dataset_name(),
00093 _type ) ;
00094 d->set_constraint( _df->get_ce() ) ;
00095
00096 _dhi->containers.push_back( d ) ;
00097 string myaction = (string)"get." + _df->get_action() ;
00098 _dhi->action = myaction ;
00099 _dhi->response_handler =
00100 BESResponseHandlerList::TheList()->find_handler( myaction ) ;
00101 if( !_dhi->response_handler )
00102 {
00103 BESDEBUG( "bes", "Building data request plan ... FAILED" << endl )
00104 string s = (string)"Improper command " + myaction ;
00105 throw BESSyntaxUserError( s, __FILE__, __LINE__ ) ;
00106 }
00107 BESDEBUG( "bes", "Building data request plan ... OK" << endl )
00108 }
00109
00117 void
00118 BESCgiInterface::dump( ostream &strm ) const
00119 {
00120 strm << BESIndent::LMarg << "BESCgiInterface::dump - ("
00121 << (void *)this << ")" << endl ;
00122 BESIndent::Indent() ;
00123 strm << BESIndent::LMarg << "data type: " << _type << endl ;
00124 strm << BESIndent::LMarg << "action: get." << _df->get_action() << endl ;
00125 strm << BESIndent::LMarg << "dataset name: "
00126 << _df->get_dataset_name() << endl ;
00127 strm << BESIndent::LMarg << "constraint expression: "
00128 << _df->get_ce() << endl ;
00129 BESIndent::UnIndent() ;
00130 }
00131