SampleSayXMLCommand.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 "SampleSayXMLCommand.h"
00034 #include "BESXMLUtils.h"
00035 #include "BESUtil.h"
00036 #include "BESSyntaxUserError.h"
00037 #include "BESDebug.h"
00038 #include "SampleResponseNames.h"
00039
00040 SampleSayXMLCommand::SampleSayXMLCommand( const BESDataHandlerInterface &base_dhi )
00041 : BESXMLCommand( base_dhi )
00042 {
00043 }
00044
00051 void
00052 SampleSayXMLCommand::parse_request( xmlNode *node )
00053 {
00054 string name ;
00055 string value ;
00056 map<string, string> props ;
00057 BESXMLUtils::GetNodeInfo( node, name, value, props ) ;
00058 if( name != SAY_RESPONSE )
00059 {
00060 string err = "The specified command " + name
00061 + " is not a say command" ;
00062 throw BESSyntaxUserError( err, __FILE__, __LINE__ ) ;
00063 }
00064
00065 if( !value.empty() )
00066 {
00067 string err = name + " command: should not have xml element values" ;
00068 throw BESSyntaxUserError( err, __FILE__, __LINE__ ) ;
00069 }
00070
00071 string child_name ;
00072 string child_value ;
00073 map<string,string> child_props ;
00074 xmlNode *child_node =
00075 BESXMLUtils::GetFirstChild( node, child_name, child_value, child_props);
00076 if( child_node )
00077 {
00078 string err = name + " command: should not have child elements" ;
00079 throw BESSyntaxUserError( err, __FILE__, __LINE__ ) ;
00080 }
00081
00082 _dhi.data[SAY_WHAT] = props["what"] ;
00083 if( _dhi.data[SAY_WHAT].empty() )
00084 {
00085 string err = name + " command: Must specify to whom to say" ;
00086 throw BESSyntaxUserError( err, __FILE__, __LINE__ ) ;
00087 }
00088
00089 _dhi.data[SAY_TO] = props["to"] ;
00090 if( _dhi.data[SAY_WHAT].empty() )
00091 {
00092 string err = name + " command: Must specify what to say" ;
00093 throw BESSyntaxUserError( err, __FILE__, __LINE__ ) ;
00094 }
00095
00096 _dhi.action = SAY_RESPONSE ;
00097
00098
00099
00100 BESXMLCommand::set_response() ;
00101 }
00102
00103 void
00104 SampleSayXMLCommand::prep_request()
00105 {
00106 }
00107
00114 void
00115 SampleSayXMLCommand::dump( ostream &strm ) const
00116 {
00117 strm << BESIndent::LMarg << "SampleSayXMLCommand::dump - ("
00118 << (void *)this << ")" << endl ;
00119 BESIndent::Indent() ;
00120 BESXMLCommand::dump( strm ) ;
00121 BESIndent::UnIndent() ;
00122 }
00123
00124 BESXMLCommand *
00125 SampleSayXMLCommand::CommandBuilder( const BESDataHandlerInterface &base_dhi )
00126 {
00127 return new SampleSayXMLCommand( base_dhi ) ;
00128 }
00129