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 #ifdef __GNUG__
00034 #pragma implementation
00035 #endif
00036
00037 #include "BESVersionInfo.h"
00038 #include "BESInfoList.h"
00039 #include "BESInternalError.h"
00040
00047 BESVersionInfo::BESVersionInfo()
00048 : BESInfo(),
00049 _inbes( false ),
00050 _inhandler( false ),
00051 _info( 0 )
00052 {
00053 _info = BESInfoList::TheList()->build_info() ;
00054 }
00055
00056 BESVersionInfo::~BESVersionInfo()
00057 {
00058 if( _info ) delete _info ;
00059 }
00060
00061 void
00062 BESVersionInfo::beginBESVersion( )
00063 {
00064 if( _inbes || _inhandler )
00065 {
00066 throw BESInternalError( "Attempting to begin BES version information while already adding BES or Handler info", __FILE__, __LINE__ ) ;
00067 }
00068 _inbes = true ;
00069 _info->begin_tag( "BES" ) ;
00070 }
00071
00072 void
00073 BESVersionInfo::addBESVersion( const string &n, const string &v )
00074 {
00075 if( !_inbes )
00076 {
00077 throw BESInternalError( "Attempting to add BES version information while not in BES tag", __FILE__, __LINE__ ) ;
00078 }
00079 _info->begin_tag( "lib" ) ;
00080 _info->add_tag( "name", n ) ;
00081 _info->add_tag( "version", v ) ;
00082 _info->end_tag( "lib" ) ;
00083 }
00084
00085 void
00086 BESVersionInfo::endBESVersion( )
00087 {
00088 if( !_inbes )
00089 {
00090 throw BESInternalError( "Attempting to end BES version information while not in BES tag", __FILE__, __LINE__ ) ;
00091 }
00092 _inbes = false ;
00093 _info->end_tag( "BES" ) ;
00094 }
00095
00096 void
00097 BESVersionInfo::beginHandlerVersion( )
00098 {
00099 if( _inbes || _inhandler )
00100 {
00101 throw BESInternalError( "Attempting to begin Handler version information while already adding BES or Handler info", __FILE__, __LINE__ ) ;
00102 }
00103 _inhandler = true ;
00104 _info->begin_tag( "Handlers" ) ;
00105 }
00106
00107 void
00108 BESVersionInfo::addHandlerVersion( const string &n, const string &v )
00109 {
00110 if( !_inhandler )
00111 {
00112 throw BESInternalError( "Attempting to add Handler version information while not in Handler tag", __FILE__, __LINE__ ) ;
00113 }
00114 _info->begin_tag( "lib" ) ;
00115 _info->add_tag( "name", n ) ;
00116 _info->add_tag( "version", v ) ;
00117 _info->end_tag( "lib" ) ;
00118 }
00119
00120 void
00121 BESVersionInfo::endHandlerVersion( )
00122 {
00123 if( !_inhandler )
00124 {
00125 throw BESInternalError( "Attempting to end Handler version information while not in Handler tag", __FILE__, __LINE__ ) ;
00126 }
00127 _inhandler = true ;
00128 _info->end_tag( "Handlers" ) ;
00129 }
00130
00138 void
00139 BESVersionInfo::dump( ostream &strm ) const
00140 {
00141 strm << BESIndent::LMarg << "BESVersionInfo::dump - ("
00142 << (void *)this << ")" << endl ;
00143 BESIndent::Indent() ;
00144 strm << BESIndent::LMarg << "in BES version? " << _inbes << endl ;
00145 strm << BESIndent::LMarg << "in Handler version? " << _inhandler << endl ;
00146 if( _info )
00147 {
00148 strm << BESIndent::LMarg << "redirection info object:" << endl ;
00149 BESIndent::Indent() ;
00150 _info->dump( strm ) ;
00151 BESIndent::UnIndent() ;
00152 }
00153 else
00154 {
00155 strm << BESIndent::LMarg << "redirection info object: null" << endl ;
00156 }
00157 BESInfo::dump( strm ) ;
00158 BESIndent::UnIndent() ;
00159 }
00160