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(
00020 toolbox::fsm::State from,
00021 toolbox::fsm::State to,
00022 const std::string& input,
00023 const std::string& transitionName,
00024 OBJECT * obj,
00025 void (OBJECT::*func)(toolbox::Event::Reference) )
00026
00027 {
00028 stateTransitionNameTable_[from][input] = transitionName;
00029 toolbox::fsm::FiniteStateMachine::addStateTransition(from, to, input, obj, func);
00030 }
00031
00032 template <class OBJECT>
00033 void addStateTransition(
00034 toolbox::fsm::State from,
00035 toolbox::fsm::State to,
00036 const std::string &input,
00037 const std::string &transitionName,
00038 const std::string &transitionParameter,
00039 OBJECT * obj,
00040 void (OBJECT::*func)(toolbox::Event::Reference) )
00041
00042 {
00043 stateTransitionParameterTable_[from][input] = transitionParameter;
00044 addStateTransition(from, to, input, transitionName, obj, func);
00045 }
00046
00047 toolbox::fsm::State getProvenanceState (void);
00048 toolbox::fsm::State getTransitionFinalState(const std::string &transition) ;
00049
00050 std::string getProvenanceStateName (void);
00051 std::string getCurrentStateName (void);
00052 time_t getTimeInState (void);
00053 std::string getCurrentTransitionName (const std::string &transition) ;
00054 std::string getTransitionName (const toolbox::fsm::State from, const std::string &transition) ;
00055 std::string getTransitionParameter (const toolbox::fsm::State from, const std::string &transition) ;
00056 std::string getTransitionFinalStateName(const std::string &transition) ;
00057 const std::string &getErrorMessage() const;
00058
00059 const xoap::MessageReference& getCurrentMessage(void);
00060
00061 bool execTransition (const std::string &transition) ;
00062 bool execTransition (const std::string &transition, const xoap::MessageReference& message) ;
00063 bool isInTransition (void);
00064 void setInitialState(toolbox::fsm::State state);
00065 void setErrorMessage(const std::string &errMessage);
00066
00067 protected:
00068
00069 time_t stateEntranceTime_;
00070
00071
00072
00073
00074
00075
00076
00077
00078 volatile bool inTransition_;
00079 toolbox::fsm::State provenanceState_;
00080 std::map<toolbox::fsm::State, std::map<std::string, std::string, std::less<std::string> > > stateTransitionNameTable_;
00081 std::map<toolbox::fsm::State, std::map<std::string, std::string, std::less<std::string> > > stateTransitionParameterTable_;
00082
00083 xoap::MessageReference theMessage_;
00084 std::string theErrorMessage_;
00085
00086 private:
00087 };
00088
00089 }
00090
00091 #endif