Documentation for OpenFLUID 2.2.0
WareRegistrySerializer.hpp
Go to the documentation of this file.
1 /*
2 
3  This file is part of OpenFLUID software
4  Copyright(c) 2007, INRA - Montpellier SupAgro
5 
6 
7  == GNU General Public License Usage ==
8 
9  OpenFLUID is free software: you can redistribute it and/or modify
10  it under the terms of the GNU General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  (at your option) any later version.
13 
14  OpenFLUID is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  GNU General Public License for more details.
18 
19  You should have received a copy of the GNU General Public License
20  along with OpenFLUID. If not, see <http://www.gnu.org/licenses/>.
21 
22 
23  == Other Usage ==
24 
25  Other Usage means a use of OpenFLUID that is inconsistent with the GPL
26  license, and requires a written agreement between You and INRA.
27  Licensees for Other Usage of OpenFLUID may use this file in accordance
28  with the terms contained in the written agreement between You and INRA.
29 
30 */
31 
32 
33 /**
34  @file WareRegistrySerializer.hpp
35 
36  @author Jean-Christophe FABRE <jean-christophe.fabre@inrae.fr>
37  */
38 
39 
40 #ifndef __OPENFLUID_MACHINE_WAREREGISTRYSERIALIZER_HPP__
41 #define __OPENFLUID_MACHINE_WAREREGISTRYSERIALIZER_HPP__
42 
43 
44 #include <sstream>
45 
50 #include <openfluid/config.hpp>
51 
52 
53 namespace openfluid { namespace machine {
54 
55 
56 /**
57  Class for serialization fo wares registries
58  @tparam SignatureType class defining the container for ware signature only
59 */
60 template<class SignatureType>
62 {
63  private:
64 
65  const WareRegistry<SignatureType>* m_Registry;
66 
67 
68  static std::string getAuthorsAsString(const openfluid::ware::WareSignature::PeopleList_t& Authors)
69  {
70  std::string Str = "";
71  bool First = true;
72 
73  for (auto Auth: Authors)
74  {
75  if (!First)
76  {
77  Str+= ", ";
78  }
79  First = false;
80 
81  Str += openfluid::tools::replaceEmptyString(Auth.first,("(unknown author)"));
82  Str += " <";
83  Str += openfluid::tools::replaceEmptyString(Auth.second,("(unknown author email)"));
84  Str += ">";
85  }
86 
87  return Str;
88  }
89 
90  static std::string getIndentedText(const unsigned int Level,
91  const std::string& Title, const std::string& Content = "")
92  {
93  std::string Text;
94 
95  if (Level == 1)
96  {
97  Text += "* ";
98  }
99  else if (Level == 2)
100  {
101  Text += " - ";
102  }
103  else if (Level == 3)
104  {
105  Text += " . ";
106  }
107 
108  Text += Title;
109 
110  if (!Content.empty())
111  {
112  Text += ": "+Content;
113  }
114 
115  return Text;
116  }
117 
118  void writeListToStreamAsText(std::ostream& OutStm,bool WithErrors) const;
119 
120  void addWareMetaForText(const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const;
121 
122  void addWareMetaForText(const openfluid::ware::ObserverSignature* Sign, std::ostream& OutStm) const;
123 
124  void addSchedulingDetailsForText(const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const;
125 
126  void addDataForText(const openfluid::ware::SignatureDataItem& Item, const std::string& CatStr,
127  std::ostream& OutStm) const;
128 
129  void addSpatialDataForText(const openfluid::ware::SignatureSpatialDataItem& Item, const std::string& CatStr,
130  std::ostream& OutStm) const;
131 
132  void addTypedSpatialDataForText(const openfluid::ware::SignatureSpatialDataItem& Item,
133  const std::string& CatStr, std::ostream& OutStm) const;
134 
135  void addDataDetailsForText(const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const;
136 
137  void addGraphDetailsForText(const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const;
138 
139  void addWareDynaForText(const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const;
140 
141  void addWareDynaForText(const openfluid::ware::ObserverSignature* Sign, std::ostream& OutStm) const;
142 
143  void writeToStreamAsText(std::ostream& OutStm,bool WithErrors) const;
144 
145  void addErrorsToJSONDoc(openfluid::thirdparty::json& Doc) const;
146 
147  static std::string getJSONAsString(openfluid::thirdparty::json& Doc);
148 
149  void writeListToStreamAsJSON(std::ostream& OutStm,bool WithErrors) const;
150 
151  openfluid::thirdparty::json initWareObjectForJSON(const openfluid::ware::SimulatorSignature* Sign) const;
152 
153  openfluid::thirdparty::json initWareObjectForJSON(const openfluid::ware::ObserverSignature* Sign) const;
154 
155  void writeToStreamAsJSON(std::ostream& OutStm,bool WithErrors) const;
156 
157 
158  public:
159 
161  m_Registry(Registry)
162  {
163 
164  }
165 
166  void writeToStream(std::ostream& OutStm,const std::string& Format,bool Detailed, bool WithErrors) const;
167 
168 };
169 
170 
171 // =====================================================================
172 // =====================================================================
173 
174 
175 template<class SignatureType>
176 void WareRegistrySerializer<SignatureType>::writeListToStreamAsText(std::ostream& OutStm,
177  bool WithErrors) const
178 {
179  for (auto& C : m_Registry->availableWares())
180  {
181  if (C.second.isValid() && C.second.hasSignature())
182  {
183  OutStm << C.second.signature()->ID << "\n";
184  }
185  }
186 
187  if (WithErrors && ! m_Registry->erroredWares().empty())
188  {
189  for (auto& C : m_Registry->erroredWares())
190  {
191  OutStm << "Error on file " << C.first << ": " << C.second.getMessage() << "\n";
192  }
193  }
194 }
195 
196 
197 // =====================================================================
198 // =====================================================================
199 
200 
201 template<class SignatureType>
202 void WareRegistrySerializer<SignatureType>::addWareMetaForText(
203  const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const
204 {
205  std::vector<std::string> DomainTags = Sign->getTagsByType("domain");
206  std::vector<std::string> ProcessTags = Sign->getTagsByType("process");
207  std::vector<std::string> MethodTags = Sign->getTagsByType("method");
208 
209  OutStm << getIndentedText(2,"Domain",openfluid::tools::replaceEmptyString(openfluid::tools::join(DomainTags,
210  openfluid::config::CHAR_TAG_SEPARATOR),
211  "(unknown)")) << "\n";
212  OutStm << getIndentedText(2,"Process",openfluid::tools::replaceEmptyString(openfluid::tools::join(ProcessTags,
213  openfluid::config::CHAR_TAG_SEPARATOR),
214  "(unknown)")) << "\n";
215  OutStm << getIndentedText(2,"Method",openfluid::tools::replaceEmptyString(openfluid::tools::join(MethodTags,
216  openfluid::config::CHAR_TAG_SEPARATOR),
217  "(unknown)")) << "\n";
218 }
219 
220 
221 // =====================================================================
222 // =====================================================================
223 
224 
225 template<class SignatureType>
226 void WareRegistrySerializer<SignatureType>::addWareMetaForText(
227  const openfluid::ware::ObserverSignature* /*Sign*/, std::ostream& /*OutStm*/) const
228 {
229  // nothing to be done
230 }
231 
232 
233 // =====================================================================
234 // =====================================================================
235 
236 
237 template<class SignatureType>
238 void WareRegistrySerializer<SignatureType>::addSchedulingDetailsForText(
239  const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const
240 {
241  std::ostringstream oss;
242 
244  {
245  oss << "fixed to default deltaT";
246  }
248  {
249  oss << "fixed to " << Sign->TimeScheduling.Min << " seconds";
250  }
252  {
253  oss << "range between " << Sign->TimeScheduling.Min << " and " << Sign->TimeScheduling.Max << " seconds";
254  }
255  else
256  {
257  oss << "undefined";
258  }
259 
260  OutStm << getIndentedText(2,"Time scheduling",oss.str()) << "\n";
261 }
262 
263 
264 // =====================================================================
265 // =====================================================================
266 
267 
268 template<class SignatureType>
269 void WareRegistrySerializer<SignatureType>::addDataForText(
270  const openfluid::ware::SignatureDataItem& Item, const std::string& CatStr, std::ostream& OutStm) const
271 {
272  std::ostringstream oss;
273 
274  std::string UnitStr;
275  if (!Item.SIUnit.empty())
276  {
277  UnitStr = " ("+Item.SIUnit+")";
278  }
279 
280  oss << CatStr << ". " << Item.Description << UnitStr;
281  OutStm << getIndentedText(3,Item.Name,oss.str()) << "\n";
282 }
283 
284 
285 // =====================================================================
286 // =====================================================================
287 
288 
289 template<class SignatureType>
290 void WareRegistrySerializer<SignatureType>::addSpatialDataForText(
291  const openfluid::ware::SignatureSpatialDataItem& Item, const std::string& CatStr, std::ostream& OutStm) const
292 {
293  std::ostringstream oss;
294 
295  std::string UnitStr;
296  if (!Item.SIUnit.empty())
297  {
298  UnitStr = " ("+Item.SIUnit+")";
299  }
300 
301  oss << CatStr << ". " << Item.Description << UnitStr;
302  OutStm << getIndentedText(3,Item.Name+" {"+Item.UnitsClass+"}",oss.str()) << "\n";
303 }
304 
305 
306 // =====================================================================
307 // =====================================================================
308 
309 
310 template<class SignatureType>
311 void WareRegistrySerializer<SignatureType>::addTypedSpatialDataForText(
312  const openfluid::ware::SignatureSpatialDataItem& Item, const std::string& CatStr, std::ostream& OutStm) const
313 {
314  std::ostringstream oss;
315 
316  std::string UnitStr;
317  if (!Item.SIUnit.empty())
318  {
319  UnitStr = " ("+Item.SIUnit+")";
320  }
321 
322  std::string TypeStr;
324  {
326  }
327 
328  oss << CatStr << ". " << Item.Description << UnitStr;
329  OutStm << getIndentedText(3,Item.Name+" {"+Item.UnitsClass+"}"+TypeStr,oss.str()) << "\n";
330 }
331 
332 
333 // =====================================================================
334 // =====================================================================
335 
336 
337 template<class SignatureType>
338 void WareRegistrySerializer<SignatureType>::addDataDetailsForText(
339  const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const
340 {
341  const auto& Data = Sign->HandledData;
342  const auto& SimData = Sign->SimulatorHandledData;
343 
344  if (!Data.UsedParams.empty() || !Data.RequiredParams.empty() ||
345  !SimData.ProducedVars.empty() || !SimData.UpdatedVars.empty() ||
346  !Data.RequiredVars.empty() || !Data.UsedVars.empty() ||
347  !SimData.ProducedAttributes.empty() || !Data.RequiredAttributes.empty() || !Data.UsedAttributes.empty() ||
348  !Data.RequiredExtraFiles.empty() || !Data.UsedExtraFiles.empty() ||
349  !SimData.UsedEventsOnUnits.empty())
350  {
351  OutStm << getIndentedText(2,"Handled data") << "\n";
352 
353 
354  // ------ Parameters
355 
356  for (const auto& Item : Data.RequiredParams)
357  {
358  addDataForText(Item,"required parameter",OutStm);
359  }
360 
361  for (const auto& Item : Data.UsedParams)
362  {
363  addDataForText(Item,"used parameter",OutStm);
364  }
365 
366 
367  // ------ Attributes
368 
369  for (const auto& Item : Data.RequiredAttributes)
370  {
371  addSpatialDataForText(Item,"required attribute",OutStm);
372  }
373 
374  for (const auto& Item : Data.UsedAttributes)
375  {
376  addSpatialDataForText(Item,"used attribute",OutStm);
377  }
378 
379  for (const auto& Item : SimData.ProducedAttributes)
380  {
381  addSpatialDataForText(Item,"produced attribute",OutStm);
382  }
383 
384 
385  // ------ Variables
386 
387  for (const auto& Item : Data.RequiredVars)
388  {
389  addTypedSpatialDataForText(Item,"required variable",OutStm);
390  }
391 
392  for (const auto& Item : Data.UsedVars)
393  {
394  addTypedSpatialDataForText(Item,"used variable",OutStm);
395  }
396 
397  for (const auto& Item : SimData.UpdatedVars)
398  {
399  addTypedSpatialDataForText(Item,"updated variable",OutStm);
400  }
401 
402  for (const auto& Item : SimData.ProducedVars)
403  {
404  addTypedSpatialDataForText(Item,"produced variable",OutStm);
405  }
406 
407 
408  // ------ Events
409  if (!SimData.UsedEventsOnUnits.empty())
410  {
411  bool First = true;
412  std::string EventsStr;
413 
414  for (const auto& Item : SimData.UsedEventsOnUnits)
415  {
416  if (!First)
417  {
418  EventsStr += ", ";
419  }
420  First = false;
421  EventsStr += Item;
422  }
423  OutStm << getIndentedText(3,"Events handled on",EventsStr) << "\n";
424  }
425 
426 
427  // ------ Extrafiles
428 
429  for (const auto& Item : Data.RequiredExtraFiles)
430  {
431  OutStm << getIndentedText(3,"Required extra file",Item) << "\n";
432  }
433 
434  for (const auto& Item : Data.UsedExtraFiles)
435  {
436  OutStm << getIndentedText(3,"Used extra file",Item) << "\n";
437  }
438 
439  }
440 }
441 
442 
443 // =====================================================================
444 // =====================================================================
445 
446 
447 template<class SignatureType>
448 void WareRegistrySerializer<SignatureType>::addGraphDetailsForText(
449  const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const
450 {
451  if (!Sign->HandledUnitsGraph.UpdatedUnitsGraph.empty() || !Sign->HandledUnitsGraph.UpdatedUnitsClasses.empty())
452  {
453  OutStm << getIndentedText(2,"Handled units graph") << "\n";
454 
455 
456  if (!Sign->HandledUnitsGraph.UpdatedUnitsGraph.empty())
457  {
458  OutStm << getIndentedText(3,"Global units graph updates",Sign->HandledUnitsGraph.UpdatedUnitsGraph) << "\n";
459  }
460 
461  for (auto& UC : Sign->HandledUnitsGraph.UpdatedUnitsClasses)
462  {
463  OutStm << getIndentedText(3,"Units graph update on class "+UC.UnitsClass,UC.Description) << "\n";
464  }
465  }
466 }
467 
468 
469 // =====================================================================
470 // =====================================================================
471 
472 
473 template<class SignatureType>
474 void WareRegistrySerializer<SignatureType>::addWareDynaForText(
475  const openfluid::ware::SimulatorSignature* Sign, std::ostream& OutStm) const
476 {
477  addSchedulingDetailsForText(Sign,OutStm);
478  addDataDetailsForText(Sign,OutStm);
479  addGraphDetailsForText(Sign,OutStm);
480 }
481 
482 
483 // =====================================================================
484 // =====================================================================
485 
486 
487 template<class SignatureType>
488 void WareRegistrySerializer<SignatureType>::addWareDynaForText(
489  const openfluid::ware::ObserverSignature* /*Sign*/, std::ostream& /*OutStm*/) const
490 {
491  // nothing to be done
492 }
493 
494 
495 // =====================================================================
496 // =====================================================================
497 
498 
499 template<class SignatureType>
500 void WareRegistrySerializer<SignatureType>::writeToStreamAsText(std::ostream& OutStm,bool WithErrors) const
501 {
502  bool First = true;
503 
504  for (auto& C : m_Registry->availableWares())
505  {
506  if (C.second.isValid() && C.second.hasSignature())
507  {
508  if (!First)
509  {
510  OutStm << "================================================================================\n";
511  }
512  First = false;
513 
514  const auto Sign = C.second.signature().get();
515 
516  OutStm << getIndentedText(1,Sign->ID) << "\n";
517  OutStm << getIndentedText(2,"Name",openfluid::tools::replaceEmptyString(Sign->Name,"(none)")) << "\n";
518  OutStm << getIndentedText(2,"File",C.second.getPath()) << "\n";
519  addWareMetaForText(Sign,OutStm);
520  OutStm <<
521  getIndentedText(2,"Description",openfluid::tools::replaceEmptyString(Sign->Description,"(none)")) << "\n";
522  OutStm << getIndentedText(2,"Version",Sign->Version) << "\n";
523  OutStm << getIndentedText(2,"SDK version used at build time",Sign->BuildInfo.SDKVersion) << "\n";
524  OutStm << getIndentedText(2,"Build information") << "\n";
525  OutStm <<
526  getIndentedText(3,"Build type",openfluid::tools::replaceEmptyString(Sign->BuildInfo.BuildType,"(unknown)")) <<
527  "\n";
528  OutStm <<
529  getIndentedText(3,"Compiler ID",openfluid::tools::replaceEmptyString(Sign->BuildInfo.CompilerID,"(unknown)")) <<
530  "\n";
531  OutStm <<
532  getIndentedText(3,"Compiler version",
534  "\n";
535  OutStm <<
536  getIndentedText(3,"Compilation flags",
538  "\n";
539  OutStm <<
540  getIndentedText(2,"Development status",Sign->getStatusAsString()) << "\n";
541  OutStm << getIndentedText(2,"Author(s)",getAuthorsAsString(Sign->Authors)) << "\n";
542  addWareDynaForText(Sign,OutStm);
543  }
544  }
545 
546  if (WithErrors && !m_Registry->erroredWares().empty())
547  {
548  if (!First)
549  {
550  OutStm << "================================================================================\n";
551  }
552  First = false;
553 
554  for (auto& EFile : m_Registry->erroredWares())
555  {
556 
557  OutStm << "Error on file " << EFile.first << ": " << EFile.second.getMessage() << "\n";
558  }
559  }
560 }
561 
562 
563 // =====================================================================
564 // =====================================================================
565 
566 
567 template<class SignatureType>
568 void WareRegistrySerializer<SignatureType>::
569  addErrorsToJSONDoc(openfluid::thirdparty::json& Doc) const
570 {
571  openfluid::thirdparty::json Errors(openfluid::thirdparty::json::value_t::array);
572 
573  for (auto& EFile : m_Registry->erroredWares())
574  {
575  openfluid::thirdparty::json EObj(openfluid::thirdparty::json::value_t::object);
576  EObj["file_path"] = EFile.first;
577  EObj["message"] = EFile.second.getMessage();
578  Errors.push_back(EObj);
579  }
580 
581  Doc["errors"] = Errors;
582 }
583 
584 
585 // =====================================================================
586 // =====================================================================
587 
588 
589 template<class SignatureType>
590 std::string WareRegistrySerializer<SignatureType>::getJSONAsString(openfluid::thirdparty::json& Doc)
591 {
592  return Doc.dump(2);
593 }
594 
595 
596 // =====================================================================
597 // =====================================================================
598 
599 
600 template<class SignatureType>
601 void WareRegistrySerializer<SignatureType>::writeListToStreamAsJSON(std::ostream& OutStm, bool WithErrors) const
602 {
603  openfluid::thirdparty::json JSON(openfluid::thirdparty::json::value_t::object);
604 
605  openfluid::thirdparty::json Available(openfluid::thirdparty::json::value_t::array);
606 
607  for (auto& C : m_Registry->availableWares())
608  {
609  if (C.second.isValid() && C.second.hasSignature())
610  {
611  Available.push_back(C.second.signature()->ID);
612  }
613  }
614 
615  JSON["available"] = Available;
616 
617  if (WithErrors)
618  {
619  addErrorsToJSONDoc(JSON);
620  }
621 
622 
623  OutStm << getJSONAsString(JSON) << "\n";
624 }
625 
626 
627 // =====================================================================
628 // =====================================================================
629 
630 
631 template<class SignatureType>
632 openfluid::thirdparty::json WareRegistrySerializer<SignatureType>::initWareObjectForJSON(
633  const openfluid::ware::SimulatorSignature* Sign) const
634 {
636 }
637 
638 
639 // =====================================================================
640 // =====================================================================
641 
642 
643 template<class SignatureType>
644 openfluid::thirdparty::json WareRegistrySerializer<SignatureType>::initWareObjectForJSON(
645  const openfluid::ware::ObserverSignature* Sign) const
646 {
648 }
649 
650 
651 // =====================================================================
652 // =====================================================================
653 
654 
655 template<class SignatureType>
656 void WareRegistrySerializer<SignatureType>::writeToStreamAsJSON(std::ostream& OutStm,
657  bool WithErrors) const
658 {
659  openfluid::thirdparty::json JSON(openfluid::thirdparty::json::value_t::object);
660 
661  openfluid::thirdparty::json Available(openfluid::thirdparty::json::value_t::array);
662 
663  for (auto& C : m_Registry->availableWares())
664  {
665  if (C.second.isValid() && C.second.hasSignature())
666  {
667  const auto Sign = C.second.signature().get();
668 
669  openfluid::thirdparty::json WareObj = initWareObjectForJSON(Sign);
670  WareObj["file_path"] = C.second.getPath();
671  WareObj["sdk_version"] = Sign->BuildInfo.SDKVersion;
672 
673  openfluid::thirdparty::json BuildObj(openfluid::thirdparty::json::value_t::object);
674  BuildObj["type"] = Sign->BuildInfo.BuildType;
675  BuildObj["compiler_id"] = Sign->BuildInfo.CompilerID;
676  BuildObj["compiler_version"] = Sign->BuildInfo.CompilerVersion;
677  BuildObj["compilation_flags"] = Sign->BuildInfo.CompilationFlags;
678  WareObj["build_info"] = BuildObj;
679 
680  Available.push_back(WareObj);
681  }
682  }
683 
684  JSON["available"] = Available;
685 
686 
687  if (WithErrors)
688  {
689  addErrorsToJSONDoc(JSON);
690  }
691 
692 
693  OutStm << getJSONAsString(JSON) << "\n";
694 }
695 
696 
697 // =====================================================================
698 // =====================================================================
699 
700 
701 template<class SignatureType>
703  const std::string& Format,
704  bool Detailed, bool WithErrors) const
705 {
706  if (Format == "text")
707  {
708  if (Detailed)
709  {
710  writeToStreamAsText(OutStm,WithErrors);
711  }
712  else
713  {
714  writeListToStreamAsText(OutStm,WithErrors);
715  }
716  }
717  else if (Format == "json")
718  {
719  if (Detailed)
720  {
721  writeToStreamAsJSON(OutStm,WithErrors);
722  }
723  else
724  {
725  writeListToStreamAsJSON(OutStm,WithErrors);
726  }
727  }
728  else
729  {
730  throw openfluid::base::FrameworkException(OPENFLUID_CODE_LOCATION,
731  "Wrong format for available wares reporting");
732  }
733 }
734 
735 
736 } } // namespaces
737 
738 
739 #endif /* __OPENFLUID_MACHINE_WAREREGISTRYSERIALIZER_HPP__ */
Definition: FrameworkException.hpp:51
@ NONE
Definition: Value.hpp:66
static std::string getStringFromValueType(const Value::Type ValueType)
Definition: WareRegistrySerializer.hpp:62
WareRegistrySerializer(const WareRegistry< SignatureType > *Registry)
Definition: WareRegistrySerializer.hpp:160
void writeToStream(std::ostream &OutStm, const std::string &Format, bool Detailed, bool WithErrors) const
Definition: WareRegistrySerializer.hpp:702
Definition: WareRegistry.hpp:51
SignatureHandledData HandledData
Definition: WareSignature.hpp:336
Definition: ObserverSignature.hpp:54
Definition: WareSignature.hpp:233
openfluid::core::Value::Type DataType
Definition: WareSignature.hpp:239
std::string SIUnit
Definition: WareSignature.hpp:238
std::string Name
Definition: WareSignature.hpp:236
std::string Description
Definition: WareSignature.hpp:237
Definition: WareSignature.hpp:259
openfluid::core::UnitsClass_t UnitsClass
Definition: WareSignature.hpp:262
openfluid::core::Duration_t Min
Definition: SimulatorSignature.hpp:153
openfluid::core::Duration_t Max
Definition: SimulatorSignature.hpp:155
SchedulingType Type
Definition: SimulatorSignature.hpp:151
std::string UpdatedUnitsGraph
Definition: SimulatorSignature.hpp:122
std::vector< SignatureUnitsClassItem > UpdatedUnitsClasses
Definition: SimulatorSignature.hpp:124
Definition: SimulatorSignature.hpp:237
SignatureTimeScheduling TimeScheduling
Definition: SimulatorSignature.hpp:256
SimulatorSignatureHandledData SimulatorHandledData
Definition: SimulatorSignature.hpp:241
SignatureUnitsGraph HandledUnitsGraph
Definition: SimulatorSignature.hpp:251
WareID_t ID
Definition: WareSignature.hpp:77
PeopleList_t Authors
Definition: WareSignature.hpp:96
std::string Description
Definition: WareSignature.hpp:81
std::string getStatusAsString() const
Definition: WareSignature.hpp:189
SignatureBuildInfo BuildInfo
Definition: WareSignature.hpp:75
WareName_t Name
Definition: WareSignature.hpp:79
std::vector< Person_t > PeopleList_t
Definition: WareSignature.hpp:65
WareVersion_t Version
Definition: WareSignature.hpp:86
std::vector< std::string > getTagsByType(const std::string &Type) const
Definition: WareSignature.hpp:148
Definition: ObserverSignatureSerializer.hpp:55
openfluid::thirdparty::json toJSON(const openfluid::ware::ObserverSignature &Sign) const
Definition: SimulatorSignatureSerializer.hpp:56
openfluid::thirdparty::json toJSON(const openfluid::ware::SimulatorSignature &Sign) const
#define OPENFLUID_API
Definition: dllexport.hpp:86
nlohmann::ordered_json json
Definition: JSON.hpp:52
std::string OPENFLUID_API replaceEmptyString(std::string SourceStr, const std::string &ReplaceStr)
std::string OPENFLUID_API join(const std::vector< std::string > &Vect, const std::string &Sep)
Definition: ApplicationException.hpp:47
WareVersion_t SDKVersion
Definition: TypeDefs.hpp:126
std::string BuildType
Definition: TypeDefs.hpp:128
std::string CompilerID
Definition: TypeDefs.hpp:130
std::string CompilationFlags
Definition: TypeDefs.hpp:134
std::string CompilerVersion
Definition: TypeDefs.hpp:132