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 "BESDelDefResponseHandler.h"
00034 #include "BESSilentInfo.h"
00035 #include "BESDefinitionStorageList.h"
00036 #include "BESDefinitionStorage.h"
00037 #include "BESDefine.h"
00038 #include "BESContainerStorageList.h"
00039 #include "BESContainerStorage.h"
00040 #include "BESContainer.h"
00041 #include "BESDataNames.h"
00042 #include "BESSyntaxUserError.h"
00043 #include "BESResponseNames.h"
00044
00045 BESDelDefResponseHandler::BESDelDefResponseHandler( const string &name )
00046 : BESResponseHandler( name )
00047 {
00048 }
00049
00050 BESDelDefResponseHandler::~BESDelDefResponseHandler( )
00051 {
00052 }
00053
00074 void
00075 BESDelDefResponseHandler::execute( BESDataHandlerInterface &dhi )
00076 {
00077 dhi.action_name = DELETE_DEFINITION_STR ;
00078 BESInfo *info = new BESSilentInfo() ;
00079 _response = info ;
00080
00081 string def_name = dhi.data[DEF_NAME] ;
00082 string store_name = dhi.data[STORE_NAME] ;
00083 if( def_name != "" )
00084 {
00085 if( store_name == "" )
00086 store_name = PERSISTENCE_VOLATILE ;
00087 BESDefinitionStorage *store =
00088 BESDefinitionStorageList::TheList()->find_persistence( store_name ) ;
00089 if( store )
00090 {
00091 bool deleted = store->del_definition( dhi.data[DEF_NAME] ) ;
00092 if( !deleted )
00093 {
00094 string line = (string)"Definition \""
00095 + dhi.data[DEF_NAME]
00096 + "\" does not exist. Unable to delete." ;
00097 throw BESSyntaxUserError( line, __FILE__, __LINE__ ) ;
00098 }
00099 }
00100 else
00101 {
00102 string line = (string)"Definition store \""
00103 + store_name
00104 + "\" does not exist. Unable to delete." ;
00105 throw BESSyntaxUserError( line, __FILE__, __LINE__ ) ;
00106 }
00107 }
00108 else
00109 {
00110 string line = (string)"No definition specified. "
00111 + "Unable to complete request." ;
00112 throw BESSyntaxUserError( line, __FILE__, __LINE__ ) ;
00113 }
00114 }
00115
00128 void
00129 BESDelDefResponseHandler::transmit( BESTransmitter *transmitter,
00130 BESDataHandlerInterface &dhi )
00131 {
00132 if( _response )
00133 {
00134 BESInfo *info = dynamic_cast<BESInfo *>(_response) ;
00135 if( !info )
00136 throw BESInternalError( "cast error", __FILE__, __LINE__ ) ;
00137 info->transmit( transmitter, dhi ) ;
00138 }
00139 }
00140
00147 void
00148 BESDelDefResponseHandler::dump( ostream &strm ) const
00149 {
00150 strm << BESIndent::LMarg << "BESDelDefResponseHandler::dump - ("
00151 << (void *)this << ")" << endl ;
00152 BESIndent::Indent() ;
00153 BESResponseHandler::dump( strm ) ;
00154 BESIndent::UnIndent() ;
00155 }
00156
00157 BESResponseHandler *
00158 BESDelDefResponseHandler::DelDefResponseBuilder( const string &name )
00159 {
00160 return new BESDelDefResponseHandler( name ) ;
00161 }
00162