BESDelContainerResponseHandler.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 "BESDelContainerResponseHandler.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 BESDelContainerResponseHandler::BESDelContainerResponseHandler( const string &name )
00046 : BESResponseHandler( name )
00047 {
00048 }
00049
00050 BESDelContainerResponseHandler::~BESDelContainerResponseHandler( )
00051 {
00052 }
00053
00072 void
00073 BESDelContainerResponseHandler::execute( BESDataHandlerInterface &dhi )
00074 {
00075 dhi.action_name = DELETE_CONTAINER_STR ;
00076 BESInfo *info = new BESSilentInfo() ;
00077 _response = info ;
00078
00079 string container_name = dhi.data[CONTAINER_NAME] ;
00080 string store_name = dhi.data[STORE_NAME] ;
00081 if( container_name != "" )
00082 {
00083 if( store_name == "" )
00084 store_name = PERSISTENCE_VOLATILE ;
00085 BESContainerStorage *cp =
00086 BESContainerStorageList::TheList()->find_persistence( store_name ) ;
00087 if( cp )
00088 {
00089 bool deleted = cp->del_container( dhi.data[CONTAINER_NAME] ) ;
00090 if( !deleted )
00091 {
00092 string err_str = (string)"Unable to delete container. "
00093 + "The container \""
00094 + dhi.data[CONTAINER_NAME]
00095 + "\" does not exist in container storage \""
00096 + dhi.data[STORE_NAME] + "\"" ;
00097 throw BESSyntaxUserError( err_str, __FILE__, __LINE__ ) ;
00098 }
00099 }
00100 else
00101 {
00102 string err_str = (string)"Container storage \""
00103 + dhi.data[STORE_NAME]
00104 + "\" does not exist. "
00105 + "Unable to delete container \""
00106 + dhi.data[CONTAINER_NAME] + "\"" ;
00107 throw BESSyntaxUserError( err_str, __FILE__, __LINE__ ) ;
00108 }
00109 }
00110 else
00111 {
00112 string err_str = (string)"No container is specified. "
00113 + "Unable to complete request." ;
00114 throw BESSyntaxUserError( err_str, __FILE__, __LINE__ ) ;
00115 }
00116 }
00117
00130 void
00131 BESDelContainerResponseHandler::transmit( BESTransmitter *transmitter,
00132 BESDataHandlerInterface &dhi )
00133 {
00134 if( _response )
00135 {
00136 BESInfo *info = dynamic_cast<BESInfo *>(_response) ;
00137 if( !info )
00138 throw BESInternalError( "cast error", __FILE__, __LINE__ ) ;
00139 info->transmit( transmitter, dhi ) ;
00140 }
00141 }
00142
00149 void
00150 BESDelContainerResponseHandler::dump( ostream &strm ) const
00151 {
00152 strm << BESIndent::LMarg << "BESDelContainerResponseHandler::dump - ("
00153 << (void *)this << ")" << endl ;
00154 BESIndent::Indent() ;
00155 BESResponseHandler::dump( strm ) ;
00156 BESIndent::UnIndent() ;
00157 }
00158
00159 BESResponseHandler *
00160 BESDelContainerResponseHandler::DelContainerResponseBuilder( const string &name)
00161 {
00162 return new BESDelContainerResponseHandler( name ) ;
00163 }
00164