00001 #ifndef _ots_CoreSupervisorBase_h_
00002 #define _ots_CoreSupervisorBase_h_
00003
00004 #include "otsdaq-core/WorkLoopManager/WorkLoopManager.h"
00005 #include "otsdaq-core/FiniteStateMachine/RunControlStateMachine.h"
00006 #include "otsdaq-core/SOAPUtilities/SOAPMessenger.h"
00007
00008 #include "otsdaq-core/XmlUtilities/HttpXmlDocument.h"
00009 #include "otsdaq-core/SOAPUtilities/SOAPUtilities.h"
00010 #include "otsdaq-core/SOAPUtilities/SOAPCommand.h"
00011 #include "otsdaq-core/CgiDataUtilities/CgiDataUtilities.h"
00012
00013 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationGroupKey.h"
00014 #include "otsdaq-core/ConfigurationInterface/ConfigurationManager.h"
00015 #include "otsdaq-core/ConfigurationInterface/ConfigurationTree.h"
00016 #include "otsdaq-core/ConfigurationPluginDataFormats/XDAQContextConfiguration.h"
00017 #include "otsdaq-core/MessageFacility/MessageFacility.h"
00018 #include "otsdaq-core/Macros/CoutMacros.h"
00019 #include "otsdaq-core/FiniteStateMachine/VStateMachine.h"
00020
00021 #include "otsdaq-core/CoreSupervisors/CorePropertySupervisorBase.h"
00022 #include "otsdaq-core/WebUsersUtilities/RemoteWebUsers.h"
00023
00024 #pragma GCC diagnostic push
00025 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
00026 #include <xdaq/Application.h>
00027 #pragma GCC diagnostic pop
00028 #include "otsdaq-core/Macros/XDAQApplicationMacros.h"
00029 #include "xgi/Method.h"
00030
00031 #include <toolbox/fsm/FailedEvent.h>
00032
00033 #include <xdaq/NamespaceURI.h>
00034 #include <xoap/Method.h>
00035
00036 #include <string>
00037 #include <vector>
00038 #include <map>
00039 #include <memory>
00040
00041
00042
00043 namespace ots
00044 {
00045
00046
00047
00048
00049
00050
00051 class CoreSupervisorBase: public xdaq::Application, public SOAPMessenger,
00052 public CorePropertySupervisorBase, public RunControlStateMachine
00053 {
00054
00055 public:
00056
00057 CoreSupervisorBase (xdaq::ApplicationStub * s);
00058 virtual ~CoreSupervisorBase (void);
00059
00060 void destroy (void);
00061
00062
00063
00064
00065
00066
00067 virtual void defaultPage (xgi::Input* in, xgi::Output* out) ;
00068 virtual void request (const std::string& requestType, cgicc::Cgicc& cgiIn, HttpXmlDocument& xmlOut, const WebUsers::RequestUserInfo& userInfo) ;
00069 virtual void nonXmlRequest (const std::string& requestType, cgicc::Cgicc& cgiIn, std::ostream& out, const WebUsers::RequestUserInfo& userInfo) ;
00070
00071 private:
00072 xoap::MessageReference workLoopStatusRequestWrapper (xoap::MessageReference message ) ;
00073 void defaultPageWrapper (xgi::Input* in, xgi::Output* out) ;
00074 void requestWrapper (xgi::Input* in, xgi::Output* out) ;
00075
00076 public:
00077
00078
00079
00080
00081 void stateMachineXgiHandler (xgi::Input* in, xgi::Output* out ) ;
00082 void stateMachineResultXgiHandler (xgi::Input* in, xgi::Output* out ) ;
00083 xoap::MessageReference stateMachineXoapHandler (xoap::MessageReference message ) ;
00084 xoap::MessageReference stateMachineResultXoapHandler (xoap::MessageReference message ) ;
00085
00086 xoap::MessageReference stateMachineStateRequest (xoap::MessageReference message ) ;
00087 xoap::MessageReference stateMachineErrorMessageRequest (xoap::MessageReference message ) ;
00088
00089 virtual xoap::MessageReference workLoopStatusRequest (xoap::MessageReference message ) ;
00090
00091 bool stateMachineThread (toolbox::task::WorkLoop* workLoop);
00092
00093 virtual void stateInitial (toolbox::fsm::FiniteStateMachine& fsm) ;
00094 virtual void statePaused (toolbox::fsm::FiniteStateMachine& fsm) ;
00095 virtual void stateRunning (toolbox::fsm::FiniteStateMachine& fsm) ;
00096 virtual void stateHalted (toolbox::fsm::FiniteStateMachine& fsm) ;
00097 virtual void stateConfigured (toolbox::fsm::FiniteStateMachine& fsm) ;
00098 virtual void inError (toolbox::fsm::FiniteStateMachine& fsm) ;
00099
00100 virtual void transitionConfiguring (toolbox::Event::Reference e) ;
00101 virtual void transitionHalting (toolbox::Event::Reference e) ;
00102 virtual void transitionInitializing (toolbox::Event::Reference e) ;
00103 virtual void transitionPausing (toolbox::Event::Reference e) ;
00104 virtual void transitionResuming (toolbox::Event::Reference e) ;
00105 virtual void transitionStarting (toolbox::Event::Reference e) ;
00106 virtual void transitionStopping (toolbox::Event::Reference e) ;
00107 virtual void enteringError (toolbox::Event::Reference e) ;
00108
00109
00110 static const std::string WORK_LOOP_DONE, WORK_LOOP_WORKING;
00111
00112 protected:
00113
00114 WorkLoopManager stateMachineWorkLoopManager_;
00115 toolbox::BSem stateMachineSemaphore_;
00116 std::vector<VStateMachine*> theStateMachineImplementation_;
00117
00118
00119 RemoteWebUsers theRemoteWebUsers_;
00120 };
00121
00122 }
00123
00124 #endif