HOPS
HOPS class reference
MHO_OperatorBuilder.hh
Go to the documentation of this file.
1 #ifndef MHO_OperatorBuilder_HH__
2 #define MHO_OperatorBuilder_HH__
3 
4 #include <string>
5 #include <utility>
6 
7 #include "MHO_ContainerStore.hh"
9 #include "MHO_Message.hh"
10 #include "MHO_Operator.hh"
11 #include "MHO_OperatorToolbox.hh"
12 #include "MHO_ParameterStore.hh"
13 #include "MHO_FringeData.hh"
14 
15 namespace hops
16 {
17 
27 {
28 
29  public:
30 
32  : fOperatorToolbox(toolbox),
33  fFringeData(fdata),
34  fContainerStore(fdata->GetContainerStore()),
35  fParameterStore(fdata->GetParameterStore()){};
36 
37 
39  MHO_ContainerStore* cstore = nullptr,
40  MHO_ParameterStore* pstore = nullptr)
41  : fOperatorToolbox(toolbox),
42  fFringeData(nullptr), //ptr to fringe data object not provided
43  fContainerStore(cstore),
44  fParameterStore(pstore){};
45 
46  virtual ~MHO_OperatorBuilder(){}; //delegate memory management to toolbox
47 
54  virtual void SetToolbox(MHO_OperatorToolbox* toolbox) { fOperatorToolbox = toolbox; }
55 
62  virtual void SetFringeData(MHO_FringeData* fdata) { fFringeData = fdata; }
63 
70  virtual void SetParameterStore(MHO_ParameterStore* pstore) { fParameterStore = pstore; }
71 
78  virtual void SetContainerStore(MHO_ContainerStore* cstore) { fContainerStore = cstore; }
79 
80  //json config for this operator (parsed from the control file and format directives)
87  virtual void SetFormat(const mho_json& format) { fFormat = format; } //operator format
88 
95  virtual void SetConditions(const mho_json& cond) { fConditions = cond; } //conditional statements
96 
103  virtual void SetAttributes(const mho_json& attr) { fAttributes = attr; } //configuration parameters
104 
111  virtual bool Build() = 0;
112 
113  protected:
114 
115 
123  virtual bool IsConfigurationOk()
124  {
125  TODO_FIXME_MSG("TODO FIXME -- improve checks on operator attributes in IsConfigurationOk)")
126  bool ok = true;
127  //for compound statements, check that the fields are present
128  if(fFormat["statement_type"] == "operator")
129  {
130  if(fFormat.contains("type") && fFormat["type"].get< std::string >() == "compound")
131  {
132 
133  for(auto it = fFormat["fields"].begin(); it != fFormat["fields"].end(); it++)
134  {
135  if(!fAttributes["value"].contains(*it))
136  {
137  msg_error("initialization", "missing attribute called " << *it << " in parameters of operator: "
138  << fFormat["name"].get< std::string >()
139  << ", will not build " << eom);
140  return false;
141  }
142  }
143  }
144  }
145 
146  return ok;
147  }
148 
149  //constructed operator gets stashed here
151 
152  //fringe data object (holds both container/parameter store, along with plot data)
154 
155  //data container and parameters stores
158 
159  //provided for the configuration of the operator that is to be built
160  mho_json fFormat; //optional
161  mho_json fConditions; //optional
162  mho_json fAttributes; //required
163 };
164 
165 } // namespace hops
166 
167 #endif
nlohmann::json mho_json
Definition: MHO_JSONHeaderWrapper.hh:5
#define msg_error(xKEY, xCONTENT)
Definition: MHO_Message.hh:244
#define TODO_FIXME_MSG(x)
Definition: MHO_Message.hh:35
Class MHO_ContainerStore.
Definition: MHO_ContainerStore.hh:32
Class MHO_FringeData.
Definition: MHO_FringeData.hh:30
Abtract base class for a builder object (creates an operator for later use)
Definition: MHO_OperatorBuilder.hh:27
mho_json fConditions
Definition: MHO_OperatorBuilder.hh:161
virtual void SetParameterStore(MHO_ParameterStore *pstore)
Setter for parameter store.
Definition: MHO_OperatorBuilder.hh:70
virtual ~MHO_OperatorBuilder()
Definition: MHO_OperatorBuilder.hh:46
virtual void SetConditions(const mho_json &cond)
Setter for applicability conditions.
Definition: MHO_OperatorBuilder.hh:95
virtual void SetFormat(const mho_json &format)
Setter for format.
Definition: MHO_OperatorBuilder.hh:87
virtual void SetAttributes(const mho_json &attr)
Setter for attributes.
Definition: MHO_OperatorBuilder.hh:103
MHO_ParameterStore * fParameterStore
Definition: MHO_OperatorBuilder.hh:157
virtual void SetFringeData(MHO_FringeData *fdata)
Setter for fringe data.
Definition: MHO_OperatorBuilder.hh:62
MHO_OperatorToolbox * fOperatorToolbox
Definition: MHO_OperatorBuilder.hh:150
MHO_ContainerStore * fContainerStore
Definition: MHO_OperatorBuilder.hh:156
MHO_OperatorBuilder(MHO_OperatorToolbox *toolbox, MHO_FringeData *fdata)
Definition: MHO_OperatorBuilder.hh:31
virtual void SetContainerStore(MHO_ContainerStore *cstore)
Setter for container store.
Definition: MHO_OperatorBuilder.hh:78
virtual void SetToolbox(MHO_OperatorToolbox *toolbox)
Setter for toolbox.
Definition: MHO_OperatorBuilder.hh:54
virtual bool IsConfigurationOk()
Function IsConfigurationOk provided for derived class to validate fAttributes against fFormat and/or ...
Definition: MHO_OperatorBuilder.hh:123
mho_json fFormat
Definition: MHO_OperatorBuilder.hh:160
MHO_OperatorBuilder(MHO_OperatorToolbox *toolbox, MHO_ContainerStore *cstore=nullptr, MHO_ParameterStore *pstore=nullptr)
Definition: MHO_OperatorBuilder.hh:38
MHO_FringeData * fFringeData
Definition: MHO_OperatorBuilder.hh:153
virtual bool Build()=0
Builds the object and passes it to toolbox if successful, otherwise returns false.
mho_json fAttributes
Definition: MHO_OperatorBuilder.hh:162
Class MHO_OperatorToolbox.
Definition: MHO_OperatorToolbox.hh:26
Class MHO_ParameterStore.
Definition: MHO_ParameterStore.hh:52
Definition: MHO_ChannelLabeler.hh:17