otsdaq_utilities  v2_04_02
ConfigurationGUISupervisor.h
1 #ifndef _ots_ConfigurationGUISupervisor_h_
2 #define _ots_ConfigurationGUISupervisor_h_
3 
4 #include "otsdaq/ConfigurationInterface/ConfigurationManagerRW.h"
5 #include "otsdaq/CoreSupervisors/CoreSupervisorBase.h"
6 
7 namespace ots
8 {
9 // ConfigurationGUISupervisor
10 // This class handles the user requests to read and write the Configuration Tree.
11 class ConfigurationGUISupervisor : public CoreSupervisorBase
12 {
13  public:
14  static xdaq::Application* instantiate(xdaq::ApplicationStub* s);
15 
16  ConfigurationGUISupervisor(xdaq::ApplicationStub* s);
17  virtual ~ConfigurationGUISupervisor(void);
18 
19  void init(void);
20  void destroy(void);
21 
22  virtual void defaultPage(xgi::Input* in, xgi::Output* out) override;
23  virtual void request(const std::string& requestType,
24  cgicc::Cgicc& cgiIn,
25  HttpXmlDocument& xmlOut,
26  const WebUsers::RequestUserInfo& userInfo) override;
27 
28  virtual void setSupervisorPropertyDefaults(void) override;
29  virtual void forceSupervisorPropertyValues(void) override; // override to force
30  // supervisor property
31  // values (and ignore user
32  // settings)
33 
34  private:
35  void handleSaveTableInfoXML(HttpXmlDocument& xmldoc,
36  ConfigurationManagerRW* cfgMgr,
37  std::string& tableName,
38  const std::string& columnCSV,
39  const std::string& tableDescription,
40  const std::string& columnChoicesCSV,
41  bool allowOverwrite = false);
42  void handleDeleteTableInfoXML(HttpXmlDocument& xmldoc,
43  ConfigurationManagerRW* cfgMgr,
44  std::string& tableName);
45 
46  void handleGroupAliasesXML(HttpXmlDocument& xmldoc, ConfigurationManagerRW* cfgMgr);
47  void handleSetGroupAliasInBackboneXML(HttpXmlDocument& xmldoc,
48  ConfigurationManagerRW* cfgMgr,
49  const std::string& groupAlias,
50  const std::string& groupName,
51  TableGroupKey groupKey,
52  const std::string& author);
53  void handleSetVersionAliasInBackboneXML(HttpXmlDocument& xmldoc,
54  ConfigurationManagerRW* cfgMgr,
55  const std::string& versionAlias,
56  const std::string& tableName,
57  TableVersion version,
58  const std::string& author);
59  void handleAliasGroupMembersInBackboneXML(HttpXmlDocument& xmldoc,
60  ConfigurationManagerRW* cfgMgr,
61  const std::string& versionAlias,
62  const std::string& groupName,
63  TableGroupKey groupKey,
64  const std::string& author);
65  void handleVersionAliasesXML(HttpXmlDocument& xmldoc, ConfigurationManagerRW* cfgMgr);
66  void handleTableGroupsXML(HttpXmlDocument& xmldoc,
67  ConfigurationManagerRW* cfgMgr,
68  bool returnMembers);
69  void handleGetTableGroupTypeXML(HttpXmlDocument& xmldoc,
70  ConfigurationManagerRW* cfgMgr,
71  const std::string& configList);
72 
73  void handleTablesXML(HttpXmlDocument& xmldoc,
74  ConfigurationManagerRW* cfgMgr,
75  bool allowIllegalColumns);
76  void handleGetTableXML(HttpXmlDocument& xmldoc,
77  ConfigurationManagerRW* cfgMgr,
78  const std::string& tableName,
79  TableVersion version,
80  bool allowIllegalColumns = false);
81 
82  void setupActiveTablesXML(
83  HttpXmlDocument& xmldoc,
84  ConfigurationManagerRW* cfgMgr,
85  const std::string& groupName,
86  const TableGroupKey& groupKey,
87  const std::string& modifiedTables,
88  bool refreshAll = true,
89  bool getGroupInfo = false,
90  std::map<std::string /*name*/, TableVersion /*version*/>* returnMemberMap = 0,
91  bool outputActiveTables = true,
92  std::string* accumulatedErrors = 0);
93  void handleFillTreeViewXML(HttpXmlDocument& xmldoc,
94  ConfigurationManagerRW* cfgMgr,
95  const std::string& groupName,
96  const TableGroupKey& groupKey,
97  const std::string& startPath,
98  unsigned int depth,
99  bool hideStatusFalse,
100  const std::string& modifiedTables,
101  const std::string& filterList);
102  static void recursiveTreeToXML(const ConfigurationTree& t,
103  unsigned int depth,
104  HttpXmlDocument& xmldoc,
105  DOMElement* parentEl,
106  bool hideStatusFalse);
107  void handleFillTreeNodeCommonFieldsXML(HttpXmlDocument& xmldoc,
108  ConfigurationManagerRW* cfgMgr,
109  const std::string& groupName,
110  const TableGroupKey& groupKey,
111  const std::string& startPath,
112  unsigned int depth,
113  const std::string& modifiedTables,
114  const std::string& recordList,
115  const std::string& fieldList);
116  void handleFillUniqueFieldValuesForRecordsXML(HttpXmlDocument& xmldoc,
117  ConfigurationManagerRW* cfgMgr,
118  const std::string& groupName,
119  const TableGroupKey& groupKey,
120  const std::string& startPath,
121  const std::string& modifiedTables,
122  const std::string& recordList,
123  const std::string& fieldList);
124  void handleFillGetTreeNodeFieldValuesXML(HttpXmlDocument& xmldoc,
125  ConfigurationManagerRW* cfgMgr,
126  const std::string& groupName,
127  const TableGroupKey& groupKey,
128  const std::string& startPath,
129  const std::string& modifiedTables,
130  const std::string& recordList,
131  const std::string& fieldList);
132  void handleFillSetTreeNodeFieldValuesXML(HttpXmlDocument& xmldoc,
133  ConfigurationManagerRW* cfgMgr,
134  const std::string& groupName,
135  const TableGroupKey& groupKey,
136  const std::string& startPath,
137  const std::string& modifiedTables,
138  const std::string& recordList,
139  const std::string& fieldList,
140  const std::string& valueList,
141  const std::string& author);
142  void handleFillCreateTreeNodeRecordsXML(HttpXmlDocument& xmldoc,
143  ConfigurationManagerRW* cfgMgr,
144  const std::string& groupName,
145  const TableGroupKey& groupKey,
146  const std::string& startPath,
147  const std::string& modifiedTables,
148  const std::string& recordList,
149  const std::string& author);
150  void handleFillDeleteTreeNodeRecordsXML(HttpXmlDocument& xmldoc,
151  ConfigurationManagerRW* cfgMgr,
152  const std::string& groupName,
153  const TableGroupKey& groupKey,
154  const std::string& startPath,
155  const std::string& modifiedTables,
156  const std::string& recordList);
157  void handleFillModifiedTablesXML(HttpXmlDocument& xmldoc,
158  ConfigurationManagerRW* cfgMgr);
159 
160  void handleSaveTreeNodeEditXML(HttpXmlDocument& xmldoc,
161  ConfigurationManagerRW* cfgMgr,
162  const std::string& tableName,
163  TableVersion version,
164  const std::string& type,
165  const std::string& uid,
166  const std::string& column,
167  const std::string& newValue,
168  const std::string& author);
169  void handleGetAffectedGroupsXML(HttpXmlDocument& xmldoc,
170  ConfigurationManagerRW* cfgMgr,
171  const std::string& rootGroupName,
172  const TableGroupKey& rootGroupKey,
173  const std::string& modifiedTables);
174  void handleGetLinkToChoicesXML(HttpXmlDocument& xmldoc,
175  ConfigurationManagerRW* cfgMgr,
176  const std::string& linkToTableName,
177  const TableVersion& linkToTableVersion,
178  const std::string& linkIdType,
179  const std::string& linkIndex,
180  const std::string& linkInitId);
181 
182  void handleSavePlanCommandSequenceXML(HttpXmlDocument& xmldoc,
183  ConfigurationManagerRW* cfgMgr,
184  const std::string& groupName,
185  const TableGroupKey& groupKey,
186  const std::string& modifiedTables,
187  const std::string& author,
188  const std::string& planName,
189  const std::string& commandString);
190 
191  void handleMergeGroupsXML(HttpXmlDocument& xmlOut,
192  ConfigurationManagerRW* cfgMgr,
193  const std::string& groupANameContext,
194  const TableGroupKey& groupAKeyContext,
195  const std::string& groupBNameContext,
196  const TableGroupKey& groupBKeyContext,
197  const std::string& groupANameConfig,
198  const TableGroupKey& groupAKeyConfig,
199  const std::string& groupBNameConfig,
200  const TableGroupKey& groupBKeyConfig,
201  const std::string& author,
202  const std::string& mergeApproach);
203 
204  // Moved to GatewaySupervisor::
205  // TableVersion saveModifiedVersionXML(HttpXmlDocument& xmldoc,
206  // ConfigurationManagerRW* cfgMgr,
207  // const std::string& tableName,
208  // TableVersion originalVersion,
209  // bool makeTemporary,
210  // TableBase* config,
211  // TableVersion temporaryModifiedVersion,
212  // bool ignoreDuplicates =
213  //false, bool lookForEquivalent
214  //= false);
215 
216  void handleGetArtdaqNodeRecordsXML(HttpXmlDocument& xmlOut,
217  ConfigurationManagerRW* cfgMgr,
218  const std::string& modifiedTables);
219  void handleLoadArtdaqNodeLayoutXML(
220  HttpXmlDocument& xmlOut,
221  ConfigurationManagerRW* cfgMgr,
222  const std::string& contextGroupName = "",
223  const TableGroupKey& contextGroupKey = TableGroupKey());
224  void handleSaveArtdaqNodeLayoutXML(
225  HttpXmlDocument& xmlOut,
226  ConfigurationManagerRW* cfgMgr,
227  const std::string& layoutString,
228  const std::string& contextGroupName = "",
229  const TableGroupKey& contextGroupKey = TableGroupKey());
230 
231  void testXDAQContext(void);
232 
233  enum
234  {
235  CONFIGURATION_MANAGER_EXPIRATION_TIME = 60 * 60 * 1, // 1 hour, in seconds
236  CONFIGURATION_MANAGER_REFRESH_THRESHOLD = 60 * 15, // 15 minutes, in seconds
237  };
238 
239  ConfigurationManagerRW* refreshUserSession(std::string username,
240  uint64_t activeSessionIndex,
241  bool refresh);
242  std::map<std::string, ConfigurationManagerRW*> userConfigurationManagers_;
243  std::map<std::string, time_t> userLastUseTime_;
244 };
245 
246 } // end ots namespace
247 
248 #endif
static xdaq::Application * instantiate(xdaq::ApplicationStub *s)