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 #ifndef BESDataHandlerInterface_h_
00034 #define BESDataHandlerInterface_h_ 1
00035
00036 #include <string>
00037 #include <list>
00038 #include <map>
00039 #include <iostream>
00040
00041 using std::string ;
00042 using std::list ;
00043 using std::map ;
00044 using std::ostream ;
00045
00046 class BESResponseHandler ;
00047 class BESInfo ;
00048
00049 #include "BESContainer.h"
00050 #include "BESException.h"
00051
00058 typedef struct _BESDataHandlerInterface
00059 {
00060 private:
00061 ostream *output_stream ;
00062 public:
00063 _BESDataHandlerInterface()
00064 : output_stream( 0 ),
00065 response_handler( 0 ),
00066 container( 0 ),
00067 error_info( 0 ) {}
00068
00069
00070 void set_output_stream( ostream *strm )
00071 {
00072 if( output_stream )
00073 throw BESException( "output stream has already been set", __FILE__, __LINE__ ) ;
00074 output_stream = strm ;
00075 }
00076 ostream &get_output_stream()
00077 {
00078 if( !output_stream )
00079 throw BESException( "output stream has not yet been set, cannot use", __FILE__, __LINE__ ) ;
00080 return *output_stream ;
00081 }
00082
00083 BESResponseHandler *response_handler ;
00084
00085 list<BESContainer *> containers ;
00086 list<BESContainer *>::iterator containers_iterator ;
00087
00090 BESContainer *container ;
00091
00094 void first_container()
00095 {
00096 containers_iterator = containers.begin();
00097 if( containers_iterator != containers.end() )
00098 container = (*containers_iterator) ;
00099 else
00100 container = NULL ;
00101 }
00102
00105 void next_container()
00106 {
00107 containers_iterator++ ;
00108 if( containers_iterator != containers.end() )
00109 container = (*containers_iterator) ;
00110 else
00111 container = NULL ;
00112 }
00113
00116 string action ;
00117 string action_name ;
00118
00121 string transmit_protocol ;
00122
00126 map<string, string> data ;
00127 const map<string, string> &data_c() const { return data ; }
00128 typedef map<string, string>::const_iterator data_citer ;
00129
00132 BESInfo *error_info ;
00133
00134 void dump( ostream &strm ) const ;
00135
00136 } BESDataHandlerInterface ;
00137
00156 inline ostream &
00157 operator<<( ostream &strm, const BESDataHandlerInterface &dhi )
00158 {
00159 dhi.dump( strm ) ;
00160 return strm ;
00161 }
00162
00163 #endif // BESDataHandlerInterface_h_
00164