00001 #ifndef _ots_FiniteStateMachine_h
00002 #define _ots_FiniteStateMachine_h
00003
00004 #include <toolbox/fsm/FiniteStateMachine.h>
00005 #include <xoap/MessageReference.h>
00006
00007
00008 namespace ots
00009 {
00010
00011 class FiniteStateMachine : public toolbox::fsm::FiniteStateMachine
00012 {
00013 public:
00014 FiniteStateMachine (void);
00015 ~FiniteStateMachine(void);
00016
00017 using toolbox::fsm::FiniteStateMachine::addStateTransition;
00018 template <class OBJECT>
00019 void addStateTransition(toolbox::fsm::State from,
00020 toolbox::fsm::State to,
00021 const std::string& input,
00022 const std::string& transitionName,
00023 OBJECT * obj,
00024 void (OBJECT::*func)(toolbox::Event::Reference) )
00025 throw (toolbox::fsm::exception::Exception)
00026 {
00027 stateTransitionNameTable_[from][input] = transitionName;
00028 toolbox::fsm::FiniteStateMachine::addStateTransition(from, to, input, obj, func);
00029 }
00030
00031 template <class OBJECT>
00032 void addStateTransition(toolbox::fsm::State from,
00033 toolbox::fsm::State to,
00034 const std::string &input,
00035 const std::string &transitionName,
00036 const std::string &transitionParameter,
00037 OBJECT * obj,
00038 void (OBJECT::*func)(toolbox::Event::Reference) )
00039 throw (toolbox::fsm::exception::Exception)
00040 {
00041 stateTransitionParameterTable_[from][input] = transitionParameter;
00042 addStateTransition(from, to, input, transitionName, obj, func);
00043 }
00044
00045 toolbox::fsm::State getProvenanceState (void);
00046 toolbox::fsm::State getTransitionFinalState(const std::string &transition) throw (toolbox::fsm::exception::Exception);
00047
00048 std::string getProvenanceStateName (void);
00049 std::string getCurrentStateName (void);
00050 time_t getTimeInState (void);
00051 std::string getCurrentTransitionName (const std::string &transition) throw (toolbox::fsm::exception::Exception);
00052 std::string getTransitionName (const toolbox::fsm::State from, const std::string &transition) throw (toolbox::fsm::exception::Exception);
00053 std::string getTransitionParameter (const toolbox::fsm::State from, const std::string &transition) throw (toolbox::fsm::exception::Exception);
00054 std::string getTransitionFinalStateName(const std::string &transition) throw (toolbox::fsm::exception::Exception);
00055 const std::string &getErrorMessage() const;
00056
00057 const xoap::MessageReference& getCurrentMessage(void);
00058
00059 bool execTransition (const std::string &transition) throw (toolbox::fsm::exception::Exception);
00060 bool execTransition (const std::string &transition, const xoap::MessageReference& message) throw (toolbox::fsm::exception::Exception);
00061 bool isInTransition (void);
00062 void setInitialState(toolbox::fsm::State state);
00063 void setErrorMessage(const std::string &errMessage);
00064
00065 protected:
00066
00067 time_t stateEntranceTime_;
00068
00069
00070
00071
00072
00073
00074
00075
00076 volatile bool inTransition_;
00077 toolbox::fsm::State provenanceState_;
00078 std::map<toolbox::fsm::State, std::map<std::string, std::string, std::less<std::string> > > stateTransitionNameTable_;
00079 std::map<toolbox::fsm::State, std::map<std::string, std::string, std::less<std::string> > > stateTransitionParameterTable_;
00080
00081 xoap::MessageReference theMessage_;
00082 std::string theErrorMessage_;
00083
00084 private:
00085 };
00086
00087 }
00088
00089 #endif