41 #ifndef __OPENFLUID_WARESDEV_WARESIGNATURESERIALIZER_HPP__
42 #define __OPENFLUID_WARESDEV_WARESIGNATURESERIALIZER_HPP__
52 #include <openfluid/ware/TypeDefs.hpp>
59 #include <openfluid/config.hpp>
63 namespace openfluid {
namespace waresdev {
68 if (Json.contains(
"simulator"))
72 else if (Json.contains(
"observer"))
76 else if (Json.contains(
"builderext"))
91 std::ifstream InFile(
Path,std::ifstream::in);
95 auto Json = openfluid::thirdparty::json::parse(InFile);
99 catch (openfluid::thirdparty::json::exception& E)
118 std::ifstream InFile(
Path,std::ifstream::in);
122 auto Json = openfluid::thirdparty::json::parse(InFile);
126 const std::string TmpID = Json.value(
"id",
"");
132 catch (openfluid::thirdparty::json::exception& E)
146 template<
class SignatureType>
174 virtual std::string
toWareCPP(
const SignatureType& Sign)
const = 0;
176 virtual std::string
toWareCMake(
const SignatureType& Sign)
const = 0;
202 template<
class SignatureType>
207 Sign.ID = Json.value(
"id",
"");
214 Sign.Name = Json.value(
"name",
"");
215 Sign.Description = Json.value(
"description",
"");
216 Sign.Version = Json.value(
"version",
"");
222 if (PeopleArr.is_array())
224 for (
const auto& P : PeopleArr)
226 if (P.is_object() && P.contains(
"name"))
228 Sign.Authors.push_back({P[
"name"],P.value(
"email",
"")});
237 if (PeopleArr.is_array())
239 for (
const auto& P : PeopleArr)
241 if (P.is_object() && P.contains(
"name"))
243 Sign.Contacts.push_back({P[
"name"],P.value(
"email",
"")});
254 openfluid::thirdparty::json::array_t LinksArr = Json.value(
"links",openfluid::thirdparty::json::array());
255 for (
const auto& L : LinksArr)
257 if (L.is_object() && L.contains(
"url"))
259 Sign.Links.push_back({L.value(
"label",
""),L[
"url"]});
267 if (TagsArr.is_array())
269 for (
const auto& T : TagsArr)
273 Sign.Tags.push_back(T.get<std::string>());
282 if (IssuesArr.is_array())
284 for (
const auto& I : IssuesArr)
286 if (I.is_object() && I.contains(
"id"))
291 Sign.Issues.insert(Issue,Issue.
ID);
293 catch (std::exception& E)
305 if (DependenciesMap.is_object())
307 for (
const auto& D : DependenciesMap.items())
309 Sign.Dependencies.insert({D.key(), D.value()});
322 template<
class SignatureType>
327 Json[
"id"] = Sign.ID;
328 Json[
"name"] = Sign.Name;
329 Json[
"description"] = Sign.Description;
330 Json[
"version"] = Sign.Version;
331 Json[
"status"] = Sign.getStatusAsString();
335 auto PeopleArr = openfluid::thirdparty::json::array();
336 for (
const auto& P : Sign.Authors)
338 auto PersonObj = openfluid::thirdparty::json::object();
339 PersonObj[
"name"] = P.first;
340 PersonObj[
"email"] = P.second;
341 PeopleArr.push_back(PersonObj);
343 Json[
"authors"] = PeopleArr;
348 auto PeopleArr = openfluid::thirdparty::json::array();
349 for (
const auto& P : Sign.Contacts)
351 auto PersonObj = openfluid::thirdparty::json::object();
352 PersonObj[
"name"] = P.first;
353 PersonObj[
"email"] = P.second;
354 PeopleArr.push_back(PersonObj);
356 Json[
"contacts"] = PeopleArr;
360 Json[
"license"] = Sign.License;
363 Json[
"tags"] = Sign.Tags;
367 auto LnkArr = openfluid::thirdparty::json::array();
368 for (
const auto& L : Sign.Links)
370 auto LnkObj = openfluid::thirdparty::json::object();
371 LnkObj[
"label"] = L.first;
372 LnkObj[
"url"] = L.second;
373 LnkArr.push_back(LnkObj);
375 Json[
"links"] = LnkArr;
380 auto IssArr = openfluid::thirdparty::json::array();
381 for (
const auto& I : Sign.Issues.getAll())
383 auto IObj = I.second.toJSON(I.first);
384 IssArr.push_back(IObj);
386 Json[
"issues"] = IssArr;
390 auto Deps = openfluid::thirdparty::json::object();
391 for (
const auto& D : Sign.Dependencies)
393 Deps[D.first] = D.second;
395 Json[
"dependencies"] = Deps;
406 template<
class SignatureType>
427 std::vector<std::string> AuthorsStrVect;
428 for (
const auto& A : Sign.Authors)
435 std::vector<std::string> ContactsStrVect;
436 for (
const auto& C : Sign.Contacts)
449 std::vector<std::string> LinksStrVect;
450 for (
const auto& L : Sign.Links)
457 for (
const auto& I : Sign.Issues())
459 std::vector<std::string> IssData;
460 IssData.push_back(std::to_string(I.first));
469 IssData.push_back(
"true");
473 IssData.push_back(
"false");
487 template<
class SignatureType>
492 CMake +=
"SET(WARE_ID \""+Sign.ID+
"\")\n";
493 CMake +=
"SET(WARE_LINKUID \""+m_LinkUID+
"\")\n";
503 template<
class SignatureType>
506 std::ifstream InFile(
Path,std::ifstream::in);
510 auto FullJson = openfluid::thirdparty::json::parse(InFile);
511 auto Sign = fromJSON(FullJson);
514 catch (openfluid::thirdparty::json::exception& E)
517 " ("+std::string(E.what())+
")");
526 template<
class SignatureType>
528 const std::string& FilePath)
const
530 auto Json = toJSON(Sign);
532 std::ofstream OutFile(FilePath,std::ofstream::out);
533 OutFile << Json.dump(2);
541 template<
class SignatureType>
543 const std::string& FilePath)
const
545 std::ofstream OutFile(FilePath,std::ofstream::out);
547 OutFile << toWareCPP(Sign);
558 template<
class SignatureType>
560 const std::string& FilePath)
const
562 std::ofstream OutFile(FilePath,std::ofstream::out);
565 "openfluid::builderext::BuilderExtensionSignature");
587 template<
class SignatureType>
589 const std::string& FilePath)
const
591 std::ofstream OutFile(FilePath,std::ofstream::out);
593 OutFile << toWareCMake(Sign);
602 template<
class SignatureType>
604 const std::string& FilePath)
const
606 std::ofstream OutFile(FilePath,std::ofstream::out);
609 OutFile <<
"SET(WARE_ID \""+Sign.ID+openfluid::config::WARESDEV_PARAMSUI_IDSUFFIX+
"\")\n";
610 OutFile <<
"SET(WARE_LINKUID \""+m_LinkUID+
"\")\n";
611 OutFile <<
"SET(WARE_TYPE \"builderext\")\n";
612 OutFile <<
"SET(WARE_IS_BUILDEREXT TRUE)\n";
613 OutFile <<
"SET(WARE_IS_PARAMSUI TRUE)\n";
Definition: FrameworkException.hpp:51
Definition: WareIssues.hpp:60
unsigned int ID
Definition: WareIssues.hpp:63
static WareIssue fromJSON(const openfluid::thirdparty::json &IssueJson)
Definition: WareIssues.hpp:98
Definition: WareSignatureSerializer.hpp:148
WareSignatureSerializer()
Definition: WareSignatureSerializer.hpp:160
SignatureType readFromJSONFile(const std::string &FilePath) const
Definition: WareSignatureSerializer.hpp:504
virtual SignatureType fromJSON(const openfluid::thirdparty::json &Json) const =0
void writeToParamsUICPPFile(const SignatureType &Sign, const std::string &FilePath) const
Definition: WareSignatureSerializer.hpp:559
void writeToParamsUICMakeFile(const SignatureType &Sign, const std::string &FilePath) const
Definition: WareSignatureSerializer.hpp:603
std::string toWareCPPBase(const SignatureType &Sign) const
Definition: WareSignatureSerializer.hpp:407
virtual std::string toWareCPP(const SignatureType &Sign) const =0
void writeToWareCPPFile(const SignatureType &Sign, const std::string &FilePath) const
Definition: WareSignatureSerializer.hpp:542
virtual void writeToBuildFiles(const SignatureType &Sign, const std::string &Path) const =0
void writeToWareCMakeFile(const SignatureType &Sign, const std::string &FilePath) const
Definition: WareSignatureSerializer.hpp:588
static openfluid::thirdparty::json toJSONBase(const SignatureType &Sign)
Definition: WareSignatureSerializer.hpp:323
std::string toWareCMakeBase(const SignatureType &Sign) const
Definition: WareSignatureSerializer.hpp:488
void writeToJSONFile(const SignatureType &Sign, const std::string &FilePath) const
Definition: WareSignatureSerializer.hpp:527
const std::string m_LinkUID
Definition: WareSignatureSerializer.hpp:151
virtual openfluid::thirdparty::json toJSON(const SignatureType &Sign) const =0
static SignatureType fromJSONBase(const openfluid::thirdparty::json &Json)
Definition: WareSignatureSerializer.hpp:203
~WareSignatureSerializer()
Definition: WareSignatureSerializer.hpp:167
virtual std::string toWareCMake(const SignatureType &Sign) const =0
#define OPENFLUID_API
Definition: dllexport.hpp:86
nlohmann::ordered_json json
Definition: JSON.hpp:52
void OPENFLUID_API error(const std::string &Context, const std::string &Msg)
WareType
Definition: TypeDefs.hpp:61
std::string WareID_t
Definition: TypeDefs.hpp:49
openfluid::ware::WareType detectWareType(const std::string &Path)
Definition: WareSignatureSerializer.hpp:89
openfluid::ware::WareType detectWareTypeFromJson(const openfluid::thirdparty::json &Json)
Definition: WareSignatureSerializer.hpp:66
std::pair< openfluid::ware::WareType, openfluid::ware::WareID_t > detectWareTypeAndID(const std::string &Path)
Definition: WareSignatureSerializer.hpp:113
Definition: ApplicationException.hpp:47
static std::string getCPPTail()
Definition: WareCppWriterHelpers.hpp:249
static std::string getHead(const std::string CommentChar)
Definition: WareCppWriterHelpers.hpp:60
static std::string getCPPVectorString(const std::vector< std::string > &StrVect, bool AutoQuote=false)
Definition: WareCppWriterHelpers.hpp:123
static std::string getCPPDateTimeString(const openfluid::core::DateTime &DT)
Definition: WareCppWriterHelpers.hpp:104
static std::string getQuotedString(const std::string &Str)
Definition: WareCppWriterHelpers.hpp:94
static std::string getCPPHead(const std::string &WareIncludeStr, const std::string &WareTypeStr)
Definition: WareCppWriterHelpers.hpp:75
static std::string getCPPLinkUIDProc(const std::string LinkUID)
Definition: WareCppWriterHelpers.hpp:210
static std::string getCPPAssignment(const std::string &Member, const std::string &Value, bool AutoQuote=false)
Definition: WareCppWriterHelpers.hpp:165
static std::string getCPPMethod(const std::string &Member, const std::string &Method, const std::vector< std::string > &Args, const std::string &Access=".")
Definition: WareCppWriterHelpers.hpp:182