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 struct XDAQApplication
00015 {
00016 std::string applicationGroupID_;
00017 std::string applicationUID_;
00018 bool status_;
00019 std::string class_;
00020 unsigned int id_;
00021 unsigned int instance_;
00022 std::string network_;
00023 std::string group_;
00024 std::string module_;
00025 std::string sourceConfig_;
00026 };
00027
00028 struct XDAQContext
00029 {
00030 std::string contextUID_;
00031 std::string sourceConfig_;
00032 bool status_;
00033 unsigned int id_;
00034 std::string address_;
00035 unsigned int port_;
00036 std::vector<XDAQApplication> applications_;
00037 };
00038
00039 XDAQContextConfiguration(void);
00040 virtual ~XDAQContextConfiguration(void);
00041
00042
00043 void init (ConfigurationManager *configManager);
00044 void extractContexts (ConfigurationManager *configManager);
00045 void outputXDAQXML (std::ostream &out);
00046
00047
00048
00049 std::string getContextUID (const std::string &url) const;
00050 std::string getApplicationUID (const std::string &url, unsigned int id) const;
00051
00052
00053 const std::vector<XDAQContext> & getContexts () { return contexts_; }
00054
00055
00056 ConfigurationTree getSupervisorConfigNode (ConfigurationManager *configManager, const std::string &contextUID, const std::string &appUID) const;
00057
00058
00059 std::vector<const XDAQContext *> getBoardReaderContexts () const;
00060 std::vector<const XDAQContext *> getEventBuilderContexts () const;
00061 std::vector<const XDAQContext *> getAggregatorContexts () const;
00062 unsigned int getARTDAQAppRank (const std::string &contextUID = "X") const;
00063 static bool isARTDAQContext (const std::string &contextUID);
00064
00065 private:
00066
00067 std::vector<XDAQContext> contexts_;
00068 std::vector<unsigned int> artdaqContexts_;
00069
00070 std::vector<unsigned int> artdaqBoardReaders_;
00071 std::vector<unsigned int> artdaqEventBuilders_;
00072 std::vector<unsigned int> artdaqAggregators_;
00073
00074 public:
00075
00076
00077 struct ColContext
00078 {
00079 std::string const colContextUID_ = "ContextUID";
00080 std::string const colLinkToApplicationConfiguration_ = "LinkToApplicationConfiguration";
00081 std::string const colLinkToApplicationGroupID_ = "LinkToApplicationGroupID";
00082 std::string const colStatus_ = "Status";
00083 std::string const colId_ = "Id";
00084 std::string const colAddress_ = "Address";
00085 std::string const colPort_ = "Port";
00086 } colContext_;
00087
00088
00089 struct ColApplication
00090 {
00091 std::string const colApplicationGroupID_ = "ApplicationGroupID";
00092 std::string const colApplicationUID_ = "ApplicationUID";
00093 std::string const colLinkToSupervisorConfiguration_ = "LinkToSupervisorConfiguration";
00094 std::string const colLinkToSupervisorUID_ = "LinkToSupervisorUID";
00095 std::string const colStatus_ = "Status";
00096 std::string const colClass_ = "Class";
00097 std::string const colId_ = "Id";
00098 std::string const colInstance_ = "Instance";
00099 std::string const colNetwork_ = "Network";
00100 std::string const colGroup_ = "Group";
00101 std::string const colModule_ = "Module";
00102 } colApplication_;
00103 };
00104 }
00105 #endif