00001 #ifndef _ots_XDAQContextConfiguration_h_
00002 #define _ots_XDAQContextConfiguration_h_
00003
00004 #include "otsdaq-core/ConfigurationDataFormats/ConfigurationBase.h"
00005 #include "otsdaq-core/ConfigurationInterface/ConfigurationManager.h"
00006 #include <string>
00007
00008 namespace ots
00009 {
00010
00011 class XDAQContextConfiguration : public ConfigurationBase
00012 {
00013 public:
00014
00015 struct XDAQApplicationProperty
00016 {
00017 bool status_;
00018 std::string name_, type_, value_;
00019 };
00020
00021 struct XDAQApplication
00022 {
00023 std::string applicationGroupID_;
00024 std::string applicationUID_;
00025 bool status_;
00026 std::string class_;
00027 unsigned int id_;
00028 unsigned int instance_;
00029 std::string network_;
00030 std::string group_;
00031 std::string module_;
00032 std::string sourceConfig_;
00033 std::map<std::string , uint8_t > stateMachineCommandPriority_;
00034
00035 std::vector<XDAQApplicationProperty> properties_;
00036 };
00037
00038 struct XDAQContext
00039 {
00040 std::string contextUID_;
00041 std::string sourceConfig_;
00042 bool status_;
00043 unsigned int id_;
00044 std::string address_;
00045 unsigned int port_;
00046 std::vector<XDAQApplication> applications_;
00047 };
00048
00049 XDAQContextConfiguration (void);
00050 virtual ~XDAQContextConfiguration (void);
00051
00052
00053 void init (ConfigurationManager *configManager);
00054 void extractContexts (ConfigurationManager *configManager);
00055 void outputXDAQXML (std::ostream &out);
00056
00057
00058
00059
00060 std::string getContextUID (const std::string &url) const;
00061 std::string getApplicationUID (const std::string &url, unsigned int id) const;
00062
00063
00064 const std::vector<XDAQContext> & getContexts () const { return contexts_; }
00065
00066 ConfigurationTree getContextNode (const ConfigurationManager *configManager, const std::string &contextUID) const;
00067 ConfigurationTree getApplicationNode (const ConfigurationManager *configManager, const std::string &contextUID, const std::string &appUID) const;
00068 ConfigurationTree getSupervisorConfigNode (const ConfigurationManager *configManager, const std::string &contextUID, const std::string &appUID) const;
00069
00070
00071 std::vector<const XDAQContext *> getBoardReaderContexts () const;
00072 std::vector<const XDAQContext *> getEventBuilderContexts () const;
00073 std::vector<const XDAQContext *> getAggregatorContexts () const;
00074 unsigned int getARTDAQAppRank (const std::string &contextUID = "X") const;
00075 std::string getContextAddress (const std::string &contextUID = "X", bool wantHttp = false) const;
00076 unsigned int getARTDAQDataPort (const ConfigurationManager *configManager, const std::string &contextUID = "X") const;
00077 static bool isARTDAQContext (const std::string &contextUID);
00078
00079 private:
00080
00081 std::vector<XDAQContext> contexts_;
00082
00083
00084 std::vector<unsigned int> artdaqBoardReaders_;
00085 std::vector<unsigned int> artdaqEventBuilders_;
00086 std::vector<unsigned int> artdaqAggregators_;
00087
00088 public:
00089
00090
00091 struct ColContext
00092 {
00093 std::string const colContextUID_ = "ContextUID";
00094 std::string const colLinkToApplicationConfiguration_ = "LinkToApplicationConfiguration";
00095 std::string const colLinkToApplicationGroupID_ = "LinkToApplicationGroupID";
00096 std::string const colStatus_ = ViewColumnInfo::COL_NAME_STATUS;
00097 std::string const colId_ = "Id";
00098 std::string const colAddress_ = "Address";
00099 std::string const colPort_ = "Port";
00100
00101 } colContext_;
00102
00103
00104 struct ColApplication
00105 {
00106 std::string const colApplicationGroupID_ = "ApplicationGroupID";
00107 std::string const colApplicationUID_ = "ApplicationUID";
00108 std::string const colLinkToSupervisorConfiguration_ = "LinkToSupervisorConfiguration";
00109 std::string const colLinkToSupervisorUID_ = "LinkToSupervisorUID";
00110 std::string const colStatus_ = ViewColumnInfo::COL_NAME_STATUS;
00111 std::string const colClass_ = "Class";
00112 std::string const colId_ = "Id";
00113 std::string const colInstance_ = "Instance";
00114 std::string const colNetwork_ = "Network";
00115 std::string const colGroup_ = "Group";
00116 std::string const colModule_ = "Module";
00117 std::string const colConfigurePriority_ = "ConfigurePriority";
00118 std::string const colStartPriority_ = "StartPriority";
00119 std::string const colStopPriority_ = "StopPriority";
00120 std::string const colLinkToPropertyConfiguration_ = "LinkToPropertyConfiguration";
00121 std::string const colLinkToPropertyGroupID_ = "LinkToPropertyGroupID";
00122
00123 } colApplication_;
00124
00125
00126 struct ColApplicationProperty
00127 {
00128 std::string const colPropertyGroupID_ = "PropertyGroupID";
00129 std::string const colPropertyUID_ = "UID";
00130 std::string const colStatus_ = ViewColumnInfo::COL_NAME_STATUS;
00131 std::string const colPropertyName_ = "PropertyName";
00132 std::string const colPropertyType_ = "PropertyType";
00133 std::string const colPropertyValue_ = "PropertyValue";
00134
00135 } colAppProperty_;
00136
00137 static const std::string ARTDAQ_OFFSET_PORT;
00138
00139 public:
00140 static const std::set<std::string> FETypeClassNames_, DMTypeClassNames_, LogbookTypeClassNames_, MacroMakerTypeClassNames_, ChatTypeClassNames_, ConsoleTypeClassNames_, ConfigurationGUITypeClassNames_;
00141 static const std::string GATEWAY_SUPERVISOR_CLASS, WIZARD_SUPERVISOR_CLASS, DEPRECATED_SUPERVISOR_CLASS;
00142 };
00143 }
00144 #endif