BESSetContainerResponseHandler.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 "BESSetContainerResponseHandler.h"
00034 #include "BESSilentInfo.h"
00035 #include "BESContainerStorageList.h"
00036 #include "BESContainerStorage.h"
00037 #include "BESDataNames.h"
00038 #include "BESSyntaxUserError.h"
00039 #include "BESResponseNames.h"
00040
00041 BESSetContainerResponseHandler::BESSetContainerResponseHandler( const string &name )
00042 : BESResponseHandler( name )
00043 {
00044 }
00045
00046 BESSetContainerResponseHandler::~BESSetContainerResponseHandler( )
00047 {
00048 }
00049
00084 void
00085 BESSetContainerResponseHandler::execute( BESDataHandlerInterface &dhi )
00086 {
00087 dhi.action_name = SETCONTAINER_STR ;
00088 BESInfo *info = new BESSilentInfo() ;
00089 _response = info ;
00090
00091 string store_name = dhi.data[STORE_NAME] ;
00092 string symbolic_name = dhi.data[SYMBOLIC_NAME] ;
00093 string real_name = dhi.data[REAL_NAME] ;
00094 string container_type = dhi.data[CONTAINER_TYPE] ;
00095 BESContainerStorage *cp =
00096 BESContainerStorageList::TheList()->find_persistence( store_name );
00097 if( cp )
00098 {
00099 cp->del_container( symbolic_name ) ;
00100 cp->add_container( symbolic_name, real_name, container_type ) ;
00101 }
00102 else
00103 {
00104 string ret = (string)"Unable to add container \""
00105 + symbolic_name + "\" to container storage \""
00106 + store_name + "\". Store does not exist." ;
00107 throw BESSyntaxUserError( ret, __FILE__, __LINE__ ) ;
00108 }
00109 }
00110
00123 void
00124 BESSetContainerResponseHandler::transmit( BESTransmitter *transmitter,
00125 BESDataHandlerInterface &dhi )
00126 {
00127 if( _response )
00128 {
00129 BESInfo *info = dynamic_cast<BESInfo *>(_response) ;
00130 if( !info )
00131 throw BESInternalError( "cast error", __FILE__, __LINE__ ) ;
00132 info->transmit( transmitter, dhi ) ;
00133 }
00134 }
00135
00142 void
00143 BESSetContainerResponseHandler::dump( ostream &strm ) const
00144 {
00145 strm << BESIndent::LMarg << "BESSetContainerResponseHandler::dump - ("
00146 << (void *)this << ")" << endl ;
00147 BESIndent::Indent() ;
00148 BESResponseHandler::dump( strm ) ;
00149 BESIndent::UnIndent() ;
00150 }
00151
00152 BESResponseHandler *
00153 BESSetContainerResponseHandler::SetContainerResponseBuilder( const string &name)
00154 {
00155 return new BESSetContainerResponseHandler( name ) ;
00156 }
00157