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.transmit_protocol = "HTTP" ;
00060 _transmitter = new BESFilterTransmitter( df ) ;
00061 }
00062
00063 BESCgiInterface::~BESCgiInterface()
00064 {
00065 clean() ;
00066 if( _transmitter ) delete _transmitter ;
00067 _transmitter = 0 ;
00068 }
00069
00081 void
00082 BESCgiInterface::build_data_request_plan()
00083 {
00084 BESDEBUG( "bes", "Building data request plan ... " << endl )
00085 string symbolic_name = name_path( _df->get_dataset_name() ) ;
00086 BESDEBUG( "bes", " symbolic name = " << symbolic_name << endl )
00087 BESDEBUG( "bes", " constraint = " << _df->get_ce() << endl )
00088 BESDEBUG( "bes", " dataset name = " << _df->get_dataset_name() << endl )
00089 BESDEBUG( "bes", " type = " << _type << endl )
00090 BESContainer *d = new BESFileContainer( symbolic_name,
00091 _df->get_dataset_name(),
00092 _type ) ;
00093 d->set_constraint( _df->get_ce() ) ;
00094
00095 _dhi.containers.push_back( d ) ;
00096 string myaction = (string)"get." + _df->get_action() ;
00097 _dhi.action = myaction ;
00098 _dhi.response_handler =
00099 BESResponseHandlerList::TheList()->find_handler( myaction ) ;
00100 if( !_dhi.response_handler )
00101 {
00102 BESDEBUG( "bes", "Building data request plan ... FAILED" << endl )
00103 string s = (string)"Improper command " + myaction ;
00104 throw BESSyntaxUserError( s, __FILE__, __LINE__ ) ;
00105 }
00106 BESDEBUG( "bes", "Building data request plan ... OK" << endl )
00107 }
00108
00116 void
00117 BESCgiInterface::dump( ostream &strm ) const
00118 {
00119 strm << BESIndent::LMarg << "BESCgiInterface::dump - ("
00120 << (void *)this << ")" << endl ;
00121 BESIndent::Indent() ;
00122 strm << BESIndent::LMarg << "data type: " << _type << endl ;
00123 strm << BESIndent::LMarg << "action: get." << _df->get_action() << endl ;
00124 strm << BESIndent::LMarg << "dataset name: "
00125 << _df->get_dataset_name() << endl ;
00126 strm << BESIndent::LMarg << "constraint expression: "
00127 << _df->get_ce() << endl ;
00128 BESIndent::UnIndent() ;
00129 }
00130