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
00034 std::vector<XDAQApplicationProperty> properties_;
00035 };
00036
00037 struct XDAQContext
00038 {
00039 std::string contextUID_;
00040 std::string sourceConfig_;
00041 bool status_;
00042 unsigned int id_;
00043 std::string address_;
00044 unsigned int port_;
00045 std::vector<XDAQApplication> applications_;
00046 };
00047
00048 XDAQContextConfiguration(void);
00049 virtual ~XDAQContextConfiguration(void);
00050
00051
00052 void init (ConfigurationManager *configManager);
00053 void extractContexts (ConfigurationManager *configManager);
00054 void outputXDAQXML (std::ostream &out);
00055
00056
00057
00058 std::string getContextUID (const std::string &url) const;
00059 std::string getApplicationUID (const std::string &url, unsigned int id) const;
00060
00061
00062 const std::vector<XDAQContext> & getContexts () const { return contexts_; }
00063
00064
00065 ConfigurationTree getSupervisorConfigNode (ConfigurationManager *configManager, const std::string &contextUID, const std::string &appUID) const;
00066
00067
00068 std::vector<const XDAQContext *> getBoardReaderContexts () const;
00069 std::vector<const XDAQContext *> getEventBuilderContexts () const;
00070 std::vector<const XDAQContext *> getAggregatorContexts () const;
00071 unsigned int getARTDAQAppRank (const std::string &contextUID = "X") const;
00072 static bool isARTDAQContext (const std::string &contextUID);
00073
00074 private:
00075
00076 std::vector<XDAQContext> contexts_;
00077 std::vector<unsigned int> artdaqContexts_;
00078
00079 std::vector<unsigned int> artdaqBoardReaders_;
00080 std::vector<unsigned int> artdaqEventBuilders_;
00081 std::vector<unsigned int> artdaqAggregators_;
00082
00083 public:
00084
00085
00086 struct ColContext
00087 {
00088 std::string const colContextUID_ = "ContextUID";
00089 std::string const colLinkToApplicationConfiguration_ = "LinkToApplicationConfiguration";
00090 std::string const colLinkToApplicationGroupID_ = "LinkToApplicationGroupID";
00091 std::string const colStatus_ = ViewColumnInfo::COL_NAME_STATUS;
00092 std::string const colId_ = "Id";
00093 std::string const colAddress_ = "Address";
00094 std::string const colPort_ = "Port";
00095 } colContext_;
00096
00097
00098 struct ColApplication
00099 {
00100 std::string const colApplicationGroupID_ = "ApplicationGroupID";
00101 std::string const colApplicationUID_ = "ApplicationUID";
00102 std::string const colLinkToSupervisorConfiguration_ = "LinkToSupervisorConfiguration";
00103 std::string const colLinkToSupervisorUID_ = "LinkToSupervisorUID";
00104 std::string const colStatus_ = ViewColumnInfo::COL_NAME_STATUS;
00105 std::string const colClass_ = "Class";
00106 std::string const colId_ = "Id";
00107 std::string const colInstance_ = "Instance";
00108 std::string const colNetwork_ = "Network";
00109 std::string const colGroup_ = "Group";
00110 std::string const colModule_ = "Module";
00111 std::string const colLinkToPropertyConfiguration_ = "LinkToPropertyConfiguration";
00112 std::string const colLinkToPropertyGroupID_ = "LinkToPropertyGroupID";
00113
00114 } colApplication_;
00115
00116
00117 struct ColApplicationProperty
00118 {
00119 std::string const colPropertyGroupID_ = "PropertyGroupID";
00120 std::string const colPropertyUID_ = "UID";
00121 std::string const colStatus_ = ViewColumnInfo::COL_NAME_STATUS;
00122 std::string const colPropertyName_ = "PropertyName";
00123 std::string const colPropertyType_ = "PropertyType";
00124 std::string const colPropertyValue_ = "PropertyValue";
00125
00126 } colAppProperty_;
00127
00128 };
00129 }
00130 #endif