40 #ifndef __OPENFLUID_MACHINE_WAREREGISTRYSERIALIZER_HPP__
41 #define __OPENFLUID_MACHINE_WAREREGISTRYSERIALIZER_HPP__
50 #include <openfluid/config.hpp>
60 template<
class SignatureType>
73 for (
auto Auth: Authors)
90 static std::string getIndentedText(
const unsigned int Level,
91 const std::string& Title,
const std::string& Content =
"")
110 if (!Content.empty())
112 Text +=
": "+Content;
118 void writeListToStreamAsText(std::ostream& OutStm,
bool WithErrors)
const;
127 std::ostream& OutStm)
const;
130 std::ostream& OutStm)
const;
133 const std::string& CatStr, std::ostream& OutStm)
const;
143 void writeToStreamAsText(std::ostream& OutStm,
bool WithErrors)
const;
149 void writeListToStreamAsJSON(std::ostream& OutStm,
bool WithErrors)
const;
155 void writeToStreamAsJSON(std::ostream& OutStm,
bool WithErrors)
const;
166 void writeToStream(std::ostream& OutStm,
const std::string& Format,
bool Detailed,
bool WithErrors)
const;
175 template<
class SignatureType>
176 void WareRegistrySerializer<SignatureType>::writeListToStreamAsText(std::ostream& OutStm,
177 bool WithErrors)
const
179 for (
auto& C : m_Registry->availableWares())
181 if (C.second.isValid() && C.second.hasSignature())
183 OutStm << C.second.signature()->ID <<
"\n";
187 if (WithErrors && ! m_Registry->erroredWares().empty())
189 for (
auto& C : m_Registry->erroredWares())
191 OutStm <<
"Error on file " << C.first <<
": " << C.second.getMessage() <<
"\n";
201 template<
class SignatureType>
202 void WareRegistrySerializer<SignatureType>::addWareMetaForText(
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");
210 openfluid::config::CHAR_TAG_SEPARATOR),
211 "(unknown)")) <<
"\n";
213 openfluid::config::CHAR_TAG_SEPARATOR),
214 "(unknown)")) <<
"\n";
216 openfluid::config::CHAR_TAG_SEPARATOR),
217 "(unknown)")) <<
"\n";
225 template<
class SignatureType>
226 void WareRegistrySerializer<SignatureType>::addWareMetaForText(
237 template<
class SignatureType>
238 void WareRegistrySerializer<SignatureType>::addSchedulingDetailsForText(
241 std::ostringstream oss;
245 oss <<
"fixed to default deltaT";
260 OutStm << getIndentedText(2,
"Time scheduling",oss.str()) <<
"\n";
268 template<
class SignatureType>
269 void WareRegistrySerializer<SignatureType>::addDataForText(
272 std::ostringstream oss;
277 UnitStr =
" ("+Item.
SIUnit+
")";
280 oss << CatStr <<
". " << Item.
Description << UnitStr;
281 OutStm << getIndentedText(3,Item.
Name,oss.str()) <<
"\n";
289 template<
class SignatureType>
290 void WareRegistrySerializer<SignatureType>::addSpatialDataForText(
293 std::ostringstream oss;
298 UnitStr =
" ("+Item.
SIUnit+
")";
301 oss << CatStr <<
". " << Item.
Description << UnitStr;
302 OutStm << getIndentedText(3,Item.
Name+
" {"+Item.
UnitsClass+
"}",oss.str()) <<
"\n";
310 template<
class SignatureType>
311 void WareRegistrySerializer<SignatureType>::addTypedSpatialDataForText(
314 std::ostringstream oss;
319 UnitStr =
" ("+Item.
SIUnit+
")";
328 oss << CatStr <<
". " << Item.
Description << UnitStr;
329 OutStm << getIndentedText(3,Item.
Name+
" {"+Item.
UnitsClass+
"}"+TypeStr,oss.str()) <<
"\n";
337 template<
class SignatureType>
338 void WareRegistrySerializer<SignatureType>::addDataDetailsForText(
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())
351 OutStm << getIndentedText(2,
"Handled data") <<
"\n";
356 for (
const auto& Item : Data.RequiredParams)
358 addDataForText(Item,
"required parameter",OutStm);
361 for (
const auto& Item : Data.UsedParams)
363 addDataForText(Item,
"used parameter",OutStm);
369 for (
const auto& Item : Data.RequiredAttributes)
371 addSpatialDataForText(Item,
"required attribute",OutStm);
374 for (
const auto& Item : Data.UsedAttributes)
376 addSpatialDataForText(Item,
"used attribute",OutStm);
379 for (
const auto& Item : SimData.ProducedAttributes)
381 addSpatialDataForText(Item,
"produced attribute",OutStm);
387 for (
const auto& Item : Data.RequiredVars)
389 addTypedSpatialDataForText(Item,
"required variable",OutStm);
392 for (
const auto& Item : Data.UsedVars)
394 addTypedSpatialDataForText(Item,
"used variable",OutStm);
397 for (
const auto& Item : SimData.UpdatedVars)
399 addTypedSpatialDataForText(Item,
"updated variable",OutStm);
402 for (
const auto& Item : SimData.ProducedVars)
404 addTypedSpatialDataForText(Item,
"produced variable",OutStm);
409 if (!SimData.UsedEventsOnUnits.empty())
412 std::string EventsStr;
414 for (
const auto& Item : SimData.UsedEventsOnUnits)
423 OutStm << getIndentedText(3,
"Events handled on",EventsStr) <<
"\n";
429 for (
const auto& Item : Data.RequiredExtraFiles)
431 OutStm << getIndentedText(3,
"Required extra file",Item) <<
"\n";
434 for (
const auto& Item : Data.UsedExtraFiles)
436 OutStm << getIndentedText(3,
"Used extra file",Item) <<
"\n";
447 template<
class SignatureType>
448 void WareRegistrySerializer<SignatureType>::addGraphDetailsForText(
453 OutStm << getIndentedText(2,
"Handled units graph") <<
"\n";
463 OutStm << getIndentedText(3,
"Units graph update on class "+UC.UnitsClass,UC.Description) <<
"\n";
473 template<
class SignatureType>
474 void WareRegistrySerializer<SignatureType>::addWareDynaForText(
477 addSchedulingDetailsForText(Sign,OutStm);
478 addDataDetailsForText(Sign,OutStm);
479 addGraphDetailsForText(Sign,OutStm);
487 template<
class SignatureType>
488 void WareRegistrySerializer<SignatureType>::addWareDynaForText(
499 template<
class SignatureType>
500 void WareRegistrySerializer<SignatureType>::writeToStreamAsText(std::ostream& OutStm,
bool WithErrors)
const
504 for (
auto& C : m_Registry->availableWares())
506 if (C.second.isValid() && C.second.hasSignature())
510 OutStm <<
"================================================================================\n";
514 const auto Sign = C.second.signature().get();
516 OutStm << getIndentedText(1,Sign->
ID) <<
"\n";
518 OutStm << getIndentedText(2,
"File",C.second.getPath()) <<
"\n";
519 addWareMetaForText(Sign,OutStm);
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";
532 getIndentedText(3,
"Compiler version",
536 getIndentedText(3,
"Compilation flags",
541 OutStm << getIndentedText(2,
"Author(s)",getAuthorsAsString(Sign->
Authors)) <<
"\n";
542 addWareDynaForText(Sign,OutStm);
546 if (WithErrors && !m_Registry->erroredWares().empty())
550 OutStm <<
"================================================================================\n";
554 for (
auto& EFile : m_Registry->erroredWares())
557 OutStm <<
"Error on file " << EFile.first <<
": " << EFile.second.getMessage() <<
"\n";
567 template<
class SignatureType>
568 void WareRegistrySerializer<SignatureType>::
573 for (
auto& EFile : m_Registry->erroredWares())
576 EObj[
"file_path"] = EFile.first;
577 EObj[
"message"] = EFile.second.getMessage();
578 Errors.push_back(EObj);
581 Doc[
"errors"] = Errors;
589 template<
class SignatureType>
600 template<
class SignatureType>
601 void WareRegistrySerializer<SignatureType>::writeListToStreamAsJSON(std::ostream& OutStm,
bool WithErrors)
const
607 for (
auto& C : m_Registry->availableWares())
609 if (C.second.isValid() && C.second.hasSignature())
611 Available.push_back(C.second.signature()->ID);
615 JSON[
"available"] = Available;
619 addErrorsToJSONDoc(JSON);
623 OutStm << getJSONAsString(JSON) <<
"\n";
631 template<
class SignatureType>
643 template<
class SignatureType>
655 template<
class SignatureType>
656 void WareRegistrySerializer<SignatureType>::writeToStreamAsJSON(std::ostream& OutStm,
657 bool WithErrors)
const
663 for (
auto& C : m_Registry->availableWares())
665 if (C.second.isValid() && C.second.hasSignature())
667 const auto Sign = C.second.signature().get();
670 WareObj[
"file_path"] = C.second.getPath();
678 WareObj[
"build_info"] = BuildObj;
680 Available.push_back(WareObj);
684 JSON[
"available"] = Available;
689 addErrorsToJSONDoc(JSON);
693 OutStm << getJSONAsString(JSON) <<
"\n";
701 template<
class SignatureType>
703 const std::string& Format,
704 bool Detailed,
bool WithErrors)
const
706 if (Format ==
"text")
710 writeToStreamAsText(OutStm,WithErrors);
714 writeListToStreamAsText(OutStm,WithErrors);
717 else if (Format ==
"json")
721 writeToStreamAsJSON(OutStm,WithErrors);
725 writeListToStreamAsJSON(OutStm,WithErrors);
731 "Wrong format for available wares reporting");
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
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