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 "BESFilterTransmitter.h"
00034 #include "DODSFilter.h"
00035 #include "BESInfo.h"
00036 #include "BESDASResponse.h"
00037 #include "BESDDSResponse.h"
00038 #include "BESDataDDSResponse.h"
00039 #include "BESDataNames.h"
00040 #include "BESTransmitter.h"
00041 #include "BESReturnManager.h"
00042 #include "BESTransmitterNames.h"
00043 #include "cgi_util.h"
00044
00045 #define DAS_TRANSMITTER "das"
00046 #define DDS_TRANSMITTER "dds"
00047 #define DDX_TRANSMITTER "ddx"
00048 #define DATA_TRANSMITTER "data"
00049
00050 BESFilterTransmitter *BESFilterTransmitter::Transmitter = 0 ;
00051
00052 BESFilterTransmitter::BESFilterTransmitter( DODSFilter &df )
00053 : _df( &df )
00054 {
00055 BESFilterTransmitter::Transmitter = this ;
00056
00057 add_method( DAS_TRANSMITTER, BESFilterTransmitter::send_basic_das ) ;
00058 add_method( DDS_TRANSMITTER, BESFilterTransmitter::send_basic_dds ) ;
00059 add_method( DDX_TRANSMITTER, BESFilterTransmitter::send_basic_ddx ) ;
00060 add_method( DATA_TRANSMITTER, BESFilterTransmitter::send_basic_data);
00061 }
00062
00063 void
00064 BESFilterTransmitter::send_text( BESInfo &info,
00065 BESDataHandlerInterface &dhi )
00066 {
00067 if( info.is_buffered() )
00068 {
00069 set_mime_text( dhi.get_output_stream(), unknown_type ) ;
00070 info.print( dhi.get_output_stream() ) ;
00071 }
00072 }
00073
00074 void
00075 BESFilterTransmitter::send_html( BESInfo &info,
00076 BESDataHandlerInterface &dhi )
00077 {
00078 if( info.is_buffered() )
00079 {
00080 set_mime_html( dhi.get_output_stream(), unknown_type ) ;
00081 info.print( dhi.get_output_stream() ) ;
00082 }
00083 }
00084
00085 void
00086 BESFilterTransmitter::send_basic_das( BESResponseObject *obj,
00087 BESDataHandlerInterface &dhi )
00088 {
00089 BESDASResponse *bdas = dynamic_cast < BESDASResponse * >(obj);
00090 DAS *das = bdas->get_das();
00091 BESFilterTransmitter::Transmitter->get_filter()->send_das( dhi.get_output_stream(), *das ) ;
00092 }
00093
00094 void
00095 BESFilterTransmitter::send_basic_dds( BESResponseObject *obj,
00096 BESDataHandlerInterface &dhi )
00097 {
00098 BESDDSResponse *bdds = dynamic_cast < BESDDSResponse * >(obj);
00099 DDS *dds = bdds->get_dds();
00100 ConstraintEvaluator & ce = bdds->get_ce();
00101 dhi.first_container();
00102 BESFilterTransmitter::Transmitter->get_filter()->set_ce( dhi.data[POST_CONSTRAINT] ) ;
00103 BESFilterTransmitter::Transmitter->get_filter()->send_dds( dhi.get_output_stream(), *dds, ce, true ) ;
00104 }
00105
00106 void
00107 BESFilterTransmitter::send_basic_data( BESResponseObject *obj,
00108 BESDataHandlerInterface &dhi )
00109 {
00110 BESDataDDSResponse *bdds = dynamic_cast < BESDataDDSResponse * >(obj);
00111 DataDDS *dds = bdds->get_dds();
00112 ConstraintEvaluator & ce = bdds->get_ce();
00113 dhi.first_container();
00114 BESFilterTransmitter::Transmitter->get_filter()->set_ce( dhi.data[POST_CONSTRAINT] ) ;
00115 BESFilterTransmitter::Transmitter->get_filter()->send_data( *dds, ce, dhi.get_output_stream() ) ;
00116 }
00117
00118 void
00119 BESFilterTransmitter::send_basic_ddx( BESResponseObject *obj,
00120 BESDataHandlerInterface &dhi )
00121 {
00122 BESDDSResponse *bdds = dynamic_cast < BESDDSResponse * >(obj);
00123 DDS *dds = bdds->get_dds();
00124 ConstraintEvaluator &ce = bdds->get_ce();
00125 dhi.first_container();
00126 BESFilterTransmitter::Transmitter->get_filter()->set_ce( dhi.data[POST_CONSTRAINT] ) ;
00127 BESFilterTransmitter::Transmitter->get_filter()->send_ddx( *dds, ce, dhi.get_output_stream() ) ;
00128 }
00129
00137 void
00138 BESFilterTransmitter::dump( ostream &strm ) const
00139 {
00140 strm << BESIndent::LMarg << "BESFilterTransmitter::dump - ("
00141 << (void *)this << ")" << endl ;
00142 BESIndent::Indent() ;
00143 BESTransmitter::dump( strm ) ;
00144 BESIndent::UnIndent() ;
00145 }
00146