BESFilterTransmitter.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 "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 if( !bdas )
00091 throw BESInternalError( "cast error", __FILE__, __LINE__ ) ;
00092 DAS *das = bdas->get_das();
00093 BESFilterTransmitter::Transmitter->get_filter()->send_das( dhi.get_output_stream(), *das ) ;
00094 }
00095
00096 void
00097 BESFilterTransmitter::send_basic_dds( BESResponseObject *obj,
00098 BESDataHandlerInterface &dhi )
00099 {
00100 BESDDSResponse *bdds = dynamic_cast < BESDDSResponse * >(obj);
00101 if( !bdds )
00102 throw BESInternalError( "cast error", __FILE__, __LINE__ ) ;
00103 DDS *dds = bdds->get_dds();
00104 ConstraintEvaluator & ce = bdds->get_ce();
00105 dhi.first_container();
00106 BESFilterTransmitter::Transmitter->get_filter()->set_ce( dhi.data[POST_CONSTRAINT] ) ;
00107 BESFilterTransmitter::Transmitter->get_filter()->send_dds( dhi.get_output_stream(), *dds, ce, true ) ;
00108 }
00109
00110 void
00111 BESFilterTransmitter::send_basic_data( BESResponseObject *obj,
00112 BESDataHandlerInterface &dhi )
00113 {
00114 BESDataDDSResponse *bdds = dynamic_cast < BESDataDDSResponse * >(obj);
00115 if( !bdds )
00116 throw BESInternalError( "cast error", __FILE__, __LINE__ ) ;
00117 DataDDS *dds = bdds->get_dds();
00118 ConstraintEvaluator & ce = bdds->get_ce();
00119 dhi.first_container();
00120 BESFilterTransmitter::Transmitter->get_filter()->set_ce( dhi.data[POST_CONSTRAINT] ) ;
00121 BESFilterTransmitter::Transmitter->get_filter()->send_data( *dds, ce, dhi.get_output_stream() ) ;
00122 }
00123
00124 void
00125 BESFilterTransmitter::send_basic_ddx( BESResponseObject *obj,
00126 BESDataHandlerInterface &dhi )
00127 {
00128 BESDDSResponse *bdds = dynamic_cast < BESDDSResponse * >(obj);
00129 if( !bdds )
00130 throw BESInternalError( "cast error", __FILE__, __LINE__ ) ;
00131 DDS *dds = bdds->get_dds();
00132 ConstraintEvaluator &ce = bdds->get_ce();
00133 dhi.first_container();
00134 BESFilterTransmitter::Transmitter->get_filter()->set_ce( dhi.data[POST_CONSTRAINT] ) ;
00135 BESFilterTransmitter::Transmitter->get_filter()->send_ddx( *dds, ce, dhi.get_output_stream() ) ;
00136 }
00137
00145 void
00146 BESFilterTransmitter::dump( ostream &strm ) const
00147 {
00148 strm << BESIndent::LMarg << "BESFilterTransmitter::dump - ("
00149 << (void *)this << ")" << endl ;
00150 BESIndent::Indent() ;
00151 BESTransmitter::dump( strm ) ;
00152 BESIndent::UnIndent() ;
00153 }
00154