Loading EtsiServerGen/conanfile.txt +1 −1 Original line number Diff line number Diff line [requires] boost/1.78.0 boost/1.84.0 restbed/4.8 [generators] Loading EtsiServerGen/patches/applyPatches.sh +3 −9 Original line number Diff line number Diff line #!/bin/bash patch -u ../api/DefaultApi.h -i fixHeaderModelIssue.patch patch -u ../api/DefaultApi.cpp -i fixCppModelIssue.patch patch -u ../api/TrackablesApi.cpp -i fixCppTrackable.patch patch -u ../api/RelocalizationInformationApi.cpp -i fixCppRelocalizationInformation.patch patch -u ../api/WorldAnchorsApi.cpp -i fixCppWorldAnchors.patch patch -u ../model/WorldAnchor.cpp -i fixCppWorldAnchorModel.patch patch -u ../api/WorldLinksApi.cpp -i fixCppWorldLinks.patch patch -u ../api/RelocalizationInformationApi.cpp -i fixCppRelocalizationInformation.patch patch -u ../model/WorldLink.cpp -i fixCppWorldLinksModel.patch patch -u ../model/WorldAnchor.cpp -i fixCppWorldAnchorModel.patch patch -u ../model/Trackable.cpp -i fixCppTrackableModel.patch patch -u ../model/helpers.h -i fixHelperHeader.patch patch -u ../model/RelocalizationInformation.cpp -i fixCppRelocalizationInformationModel.patch patch -u ../model/RelocalizationInformationParam.cpp -i fixCppRelocalizationInformationParamModel.patch patch -u ../model/GetRelocalizationInformation_200_response.cpp -i fixCppGetRelocResponse.patch patch -u ../model/Capability.cpp -i fixCppCapabilityModel.patch EtsiServerGen/patches/fixCppRelocalizationInformation.patch +12 −73 Original line number Diff line number Diff line diff --git a/EtsiServerGen/api/RelocalizationInformationApi.cpp b/../../world-storage-cpp-server/EtsiServerGen/api/RelocalizationInformationApi.cpp index f332ad2..6ba51b8 100644 --- a/EtsiServerGen/api/RelocalizationInformationApi.cpp +++ b/../../world-storage-cpp-server/EtsiServerGen/api/RelocalizationInformationApi.cpp @@ -22,7 +22,7 @@ #include <boost/algorithm/string.hpp> #include "RelocalizationInformationApi.h" - +#include <iostream> namespace org { namespace openapitools { namespace server { @@ -155,21 +155,28 @@ void RelocalizationInformationResource::defaultSessionClose(const std::shared_pt void RelocalizationInformationResource::handler_GET_internal(const std::shared_ptr<restbed::Session> session) { + const auto request = session->get_request(); // Getting the query params - std::string uuids_raw = request->get_query_parameter("uuids"); + std::multimap<std::string, std::string> uuids_raw = request->get_query_parameters("uuids"); std::vector<RelocalizationInformationParam> uuids; - std::vector<std::string> uuids_temp; - boost::split(uuids_temp, uuids_raw, boost::is_any_of(",")); - std::transform(uuids_temp.begin(), uuids_temp.end(), std::back_inserter(uuids), [](const auto& i){ RelocalizationInformationParam ret; ret.fromString(i); return ret;}); - std::string capabilities_raw = request->get_query_parameter("capabilities"); + for (auto it = uuids_raw.begin(); it != uuids_raw.end(); it++) + { + RelocalizationInformationParam relocInformationParam; + relocInformationParam.fromJsonString(it->second); + uuids.push_back(relocInformationParam); + } + std::multimap<std::string, std::string> capabilities_raw = request->get_query_parameters("capabilities"); --- RelocalizationInformationApi.cpp 2024-08-30 10:10:07.846664769 +0200 +++ RelocalizationInformationApi_corrected.cpp 2024-08-30 10:05:55.896662600 +0200 @@ -161,12 +161,12 @@ std::vector<GetRelocalizationInformation_uuids_parameter_inner> uuids; std::vector<std::string> uuids_temp; boost::split(uuids_temp, uuids_raw, boost::is_any_of(",")); - std::transform(uuids_temp.begin(), uuids_temp.end(), std::back_inserter(uuids), [](const auto& i){ GetRelocalizationInformation_uuids_parameter_inner ret; ret.fromString(i); return ret;}); + std::transform(uuids_temp.begin(), uuids_temp.end(), std::back_inserter(uuids), [](const auto& i){ GetRelocalizationInformation_uuids_parameter_inner ret; ret.setUuid(i); return ret;}); std::string capabilities_raw = request->get_query_parameter("capabilities"); std::vector<Capability> capabilities; - std::vector<std::string> capabilities_temp; - boost::split(capabilities_temp, capabilities_raw, boost::is_any_of(",")); std::vector<std::string> capabilities_temp; boost::split(capabilities_temp, capabilities_raw, boost::is_any_of(",")); - std::transform(capabilities_temp.begin(), capabilities_temp.end(), std::back_inserter(capabilities), [](const auto& i){ Capability ret; ret.fromString(i); return ret;}); + for (auto it = capabilities_raw.begin(); it != capabilities_raw.end(); it++) + { + Capability capability; + capability.fromJsonString(it->second); + capabilities.push_back(capability); + } + std::transform(capabilities_temp.begin(), capabilities_temp.end(), std::back_inserter(capabilities), [](const auto& i){ Capability ret; ret.fromJsonString(i); return ret;}); // Getting the headers std::string token = request->get_header("token", ""); - + int status_code = 500; GetRelocalizationInformation_200_response resultObject = GetRelocalizationInformation_200_response{}; std::string result = ""; @@ -202,22 +209,22 @@ void RelocalizationInformationResource::handler_GET_internal(const std::shared_p } result = resultObject.toJsonString(); - returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders); + returnResponse(session, 200, result.empty() ? "empty" : result, responseHeaders); return; } if (status_code == 400) { responseHeaders.insert(std::make_pair("Content-Type", "text/plain")); result = "Invalid UUID supplied."; - result = resultObject; + result = resultObject.toJsonString(); returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders); return; } if (status_code == 404) { responseHeaders.insert(std::make_pair("Content-Type", "text/plain")); - result = "Not found, could not find UUID in database."; + result = "Not found, could not find UUID or Supported content in database."; - result = resultObject; + returnResponse(session, 404, result.empty() ? "{}" : result, responseHeaders); return; } EtsiServerGen/patches/fixCppTrackableModel.patch +5 −43 Original line number Diff line number Diff line diff --git a/EtsiServerGen/model/Trackable.cpp b/../../world-storage-cpp-server/EtsiServerGen/model/Trackable.cpp index de65bd0..26bc26d 100644 --- a/EtsiServerGen/model/Trackable.cpp +++ b/../../world-storage-cpp-server/EtsiServerGen/model/Trackable.cpp @@ -41,6 +41,7 @@ Trackable::Trackable(boost::property_tree::ptree const& pt) } + std::string Trackable::toJsonString(bool prettyJson /* = false */) const { std::stringstream ss; @@ -48,9 +49,12 @@ std::string Trackable::toJsonString(bool prettyJson /* = false */) const --- Trackable.cpp 2024-08-30 11:59:56.122059845 +0200 +++ Trackable_corrected.cpp 2024-08-30 15:24:54.948427783 +0200 @@ -48,6 +48,8 @@ // workaround inspired by: https://stackoverflow.com/a/56395440 std::regex reg("\\\"([0-9]+\\.{0,1}[0-9]*)\\\""); std::string result = std::regex_replace(ss.str(), reg, "$1"); Loading @@ -19,22 +9,7 @@ index de65bd0..26bc26d 100644 return result; } + void Trackable::fromJsonString(std::string const& jsonString) { std::stringstream ss(jsonString); @@ -65,7 +69,10 @@ ptree Trackable::toPropertyTree() const ptree tmp_node; pt.put("UUID", m_UUID); pt.put("name", m_Name); + pt.put("trackablePayload", "|" + m_TrackablePayload + "|" ); pt.put("creatorUUID", m_CreatorUUID); + pt.put("trackableType", m_TrackableType.getEnumValue()); + pt.put("unit", m_Unit.getEnumValue()); pt.add_child("trackableEncodingInformation", m_TrackableEncodingInformation.toPropertyTree()); // generate tree for LocalCRS tmp_node.clear(); @@ -83,9 +90,22 @@ ptree Trackable::toPropertyTree() const @@ -85,8 +87,19 @@ } // generate tree for KeyvalueTags if (!m_KeyvalueTags.empty()) { Loading @@ -54,27 +29,14 @@ index de65bd0..26bc26d 100644 + } + pt.add_child("keyvalueTags", keyvalueTags); } + + tmp_node.clear(); pt.put("confidence", m_Confidence); return pt; @@ -96,6 +116,8 @@ void Trackable::fromPropertyTree(ptree const &pt) ptree tmp_node; m_UUID = pt.get("UUID", ""); m_Name = pt.get("name", ""); + m_TrackableType.setEnumValue(pt.get("trackableType","")); + m_Unit.setEnumValue(pt.get("unit","")); m_CreatorUUID = pt.get("creatorUUID", ""); if (pt.get_child_optional("trackableEncodingInformation")) { m_TrackableEncodingInformation = fromPt<EncodingInformationStructure>(pt.get_child("trackableEncodingInformation")); @@ -111,6 +133,9 @@ void Trackable::fromPropertyTree(ptree const &pt) @@ -115,6 +128,8 @@ if (pt.get_child_optional("keyvalueTags")) { m_KeyvalueTags = fromPt<std::map<std::string, std::vector<std::string>>>(pt.get_child("keyvalueTags")); } + if (pt.get_child_optional("trackablePayload")) { + m_TrackablePayload = fromPt<std::string>(pt.get_child("trackablePayload")); + } m_Confidence = pt.get("confidence", 0.0); } EtsiServerGen/patches/fixCppWorldAnchorModel.patch +5 −31 Original line number Diff line number Diff line diff --git a/EtsiServerGen/model/WorldAnchor.cpp b/../../world-storage-cpp-server/EtsiServerGen/model/WorldAnchor.cpp index a26966d..9bf2ac1 100644 --- a/EtsiServerGen/model/WorldAnchor.cpp +++ b/../../world-storage-cpp-server/EtsiServerGen/model/WorldAnchor.cpp @@ -48,6 +48,8 @@ std::string WorldAnchor::toJsonString(bool prettyJson /* = false */) const // workaround inspired by: https://stackoverflow.com/a/56395440 std::regex reg("\\\"([0-9]+\\.{0,1}[0-9]*)\\\""); std::string result = std::regex_replace(ss.str(), reg, "$1"); + result.erase(std::remove(result.begin(), result.end(), '|'), result.end()); + return result; } @@ -66,6 +68,7 @@ ptree WorldAnchor::toPropertyTree() const pt.put("UUID", m_UUID); pt.put("name", m_Name); pt.put("creatorUUID", m_CreatorUUID); + pt.put("unit", m_Unit.getEnumValue()); // generate tree for LocalCRS tmp_node.clear(); if (!m_LocalCRS.empty()) { @@ -82,8 +85,19 @@ ptree WorldAnchor::toPropertyTree() const --- WorldAnchor.cpp 2024-08-30 16:07:36.273085120 +0200 +++ WorldAnchor_corrected.cpp 2024-08-30 16:10:28.143238251 +0200 @@ -83,8 +83,20 @@ } // generate tree for KeyvalueTags if (!m_KeyvalueTags.empty()) { Loading @@ -38,14 +19,7 @@ index a26966d..9bf2ac1 100644 + + } + pt.add_child("keyvalueTags", keyvalueTags); + } tmp_node.clear(); return pt; @@ -95,6 +109,7 @@ void WorldAnchor::fromPropertyTree(ptree const &pt) m_UUID = pt.get("UUID", ""); m_Name = pt.get("name", ""); m_CreatorUUID = pt.get("creatorUUID", ""); + m_Unit.setEnumValue(pt.get("unit","")); // push all items of LocalCRS into member if (pt.get_child_optional("localCRS")) { m_LocalCRS = fromPt<std::vector<float>>(pt.get_child("localCRS")); Loading
EtsiServerGen/conanfile.txt +1 −1 Original line number Diff line number Diff line [requires] boost/1.78.0 boost/1.84.0 restbed/4.8 [generators] Loading
EtsiServerGen/patches/applyPatches.sh +3 −9 Original line number Diff line number Diff line #!/bin/bash patch -u ../api/DefaultApi.h -i fixHeaderModelIssue.patch patch -u ../api/DefaultApi.cpp -i fixCppModelIssue.patch patch -u ../api/TrackablesApi.cpp -i fixCppTrackable.patch patch -u ../api/RelocalizationInformationApi.cpp -i fixCppRelocalizationInformation.patch patch -u ../api/WorldAnchorsApi.cpp -i fixCppWorldAnchors.patch patch -u ../model/WorldAnchor.cpp -i fixCppWorldAnchorModel.patch patch -u ../api/WorldLinksApi.cpp -i fixCppWorldLinks.patch patch -u ../api/RelocalizationInformationApi.cpp -i fixCppRelocalizationInformation.patch patch -u ../model/WorldLink.cpp -i fixCppWorldLinksModel.patch patch -u ../model/WorldAnchor.cpp -i fixCppWorldAnchorModel.patch patch -u ../model/Trackable.cpp -i fixCppTrackableModel.patch patch -u ../model/helpers.h -i fixHelperHeader.patch patch -u ../model/RelocalizationInformation.cpp -i fixCppRelocalizationInformationModel.patch patch -u ../model/RelocalizationInformationParam.cpp -i fixCppRelocalizationInformationParamModel.patch patch -u ../model/GetRelocalizationInformation_200_response.cpp -i fixCppGetRelocResponse.patch patch -u ../model/Capability.cpp -i fixCppCapabilityModel.patch
EtsiServerGen/patches/fixCppRelocalizationInformation.patch +12 −73 Original line number Diff line number Diff line diff --git a/EtsiServerGen/api/RelocalizationInformationApi.cpp b/../../world-storage-cpp-server/EtsiServerGen/api/RelocalizationInformationApi.cpp index f332ad2..6ba51b8 100644 --- a/EtsiServerGen/api/RelocalizationInformationApi.cpp +++ b/../../world-storage-cpp-server/EtsiServerGen/api/RelocalizationInformationApi.cpp @@ -22,7 +22,7 @@ #include <boost/algorithm/string.hpp> #include "RelocalizationInformationApi.h" - +#include <iostream> namespace org { namespace openapitools { namespace server { @@ -155,21 +155,28 @@ void RelocalizationInformationResource::defaultSessionClose(const std::shared_pt void RelocalizationInformationResource::handler_GET_internal(const std::shared_ptr<restbed::Session> session) { + const auto request = session->get_request(); // Getting the query params - std::string uuids_raw = request->get_query_parameter("uuids"); + std::multimap<std::string, std::string> uuids_raw = request->get_query_parameters("uuids"); std::vector<RelocalizationInformationParam> uuids; - std::vector<std::string> uuids_temp; - boost::split(uuids_temp, uuids_raw, boost::is_any_of(",")); - std::transform(uuids_temp.begin(), uuids_temp.end(), std::back_inserter(uuids), [](const auto& i){ RelocalizationInformationParam ret; ret.fromString(i); return ret;}); - std::string capabilities_raw = request->get_query_parameter("capabilities"); + for (auto it = uuids_raw.begin(); it != uuids_raw.end(); it++) + { + RelocalizationInformationParam relocInformationParam; + relocInformationParam.fromJsonString(it->second); + uuids.push_back(relocInformationParam); + } + std::multimap<std::string, std::string> capabilities_raw = request->get_query_parameters("capabilities"); --- RelocalizationInformationApi.cpp 2024-08-30 10:10:07.846664769 +0200 +++ RelocalizationInformationApi_corrected.cpp 2024-08-30 10:05:55.896662600 +0200 @@ -161,12 +161,12 @@ std::vector<GetRelocalizationInformation_uuids_parameter_inner> uuids; std::vector<std::string> uuids_temp; boost::split(uuids_temp, uuids_raw, boost::is_any_of(",")); - std::transform(uuids_temp.begin(), uuids_temp.end(), std::back_inserter(uuids), [](const auto& i){ GetRelocalizationInformation_uuids_parameter_inner ret; ret.fromString(i); return ret;}); + std::transform(uuids_temp.begin(), uuids_temp.end(), std::back_inserter(uuids), [](const auto& i){ GetRelocalizationInformation_uuids_parameter_inner ret; ret.setUuid(i); return ret;}); std::string capabilities_raw = request->get_query_parameter("capabilities"); std::vector<Capability> capabilities; - std::vector<std::string> capabilities_temp; - boost::split(capabilities_temp, capabilities_raw, boost::is_any_of(",")); std::vector<std::string> capabilities_temp; boost::split(capabilities_temp, capabilities_raw, boost::is_any_of(",")); - std::transform(capabilities_temp.begin(), capabilities_temp.end(), std::back_inserter(capabilities), [](const auto& i){ Capability ret; ret.fromString(i); return ret;}); + for (auto it = capabilities_raw.begin(); it != capabilities_raw.end(); it++) + { + Capability capability; + capability.fromJsonString(it->second); + capabilities.push_back(capability); + } + std::transform(capabilities_temp.begin(), capabilities_temp.end(), std::back_inserter(capabilities), [](const auto& i){ Capability ret; ret.fromJsonString(i); return ret;}); // Getting the headers std::string token = request->get_header("token", ""); - + int status_code = 500; GetRelocalizationInformation_200_response resultObject = GetRelocalizationInformation_200_response{}; std::string result = ""; @@ -202,22 +209,22 @@ void RelocalizationInformationResource::handler_GET_internal(const std::shared_p } result = resultObject.toJsonString(); - returnResponse(session, 200, result.empty() ? "{}" : result, responseHeaders); + returnResponse(session, 200, result.empty() ? "empty" : result, responseHeaders); return; } if (status_code == 400) { responseHeaders.insert(std::make_pair("Content-Type", "text/plain")); result = "Invalid UUID supplied."; - result = resultObject; + result = resultObject.toJsonString(); returnResponse(session, 400, result.empty() ? "{}" : result, responseHeaders); return; } if (status_code == 404) { responseHeaders.insert(std::make_pair("Content-Type", "text/plain")); - result = "Not found, could not find UUID in database."; + result = "Not found, could not find UUID or Supported content in database."; - result = resultObject; + returnResponse(session, 404, result.empty() ? "{}" : result, responseHeaders); return; }
EtsiServerGen/patches/fixCppTrackableModel.patch +5 −43 Original line number Diff line number Diff line diff --git a/EtsiServerGen/model/Trackable.cpp b/../../world-storage-cpp-server/EtsiServerGen/model/Trackable.cpp index de65bd0..26bc26d 100644 --- a/EtsiServerGen/model/Trackable.cpp +++ b/../../world-storage-cpp-server/EtsiServerGen/model/Trackable.cpp @@ -41,6 +41,7 @@ Trackable::Trackable(boost::property_tree::ptree const& pt) } + std::string Trackable::toJsonString(bool prettyJson /* = false */) const { std::stringstream ss; @@ -48,9 +49,12 @@ std::string Trackable::toJsonString(bool prettyJson /* = false */) const --- Trackable.cpp 2024-08-30 11:59:56.122059845 +0200 +++ Trackable_corrected.cpp 2024-08-30 15:24:54.948427783 +0200 @@ -48,6 +48,8 @@ // workaround inspired by: https://stackoverflow.com/a/56395440 std::regex reg("\\\"([0-9]+\\.{0,1}[0-9]*)\\\""); std::string result = std::regex_replace(ss.str(), reg, "$1"); Loading @@ -19,22 +9,7 @@ index de65bd0..26bc26d 100644 return result; } + void Trackable::fromJsonString(std::string const& jsonString) { std::stringstream ss(jsonString); @@ -65,7 +69,10 @@ ptree Trackable::toPropertyTree() const ptree tmp_node; pt.put("UUID", m_UUID); pt.put("name", m_Name); + pt.put("trackablePayload", "|" + m_TrackablePayload + "|" ); pt.put("creatorUUID", m_CreatorUUID); + pt.put("trackableType", m_TrackableType.getEnumValue()); + pt.put("unit", m_Unit.getEnumValue()); pt.add_child("trackableEncodingInformation", m_TrackableEncodingInformation.toPropertyTree()); // generate tree for LocalCRS tmp_node.clear(); @@ -83,9 +90,22 @@ ptree Trackable::toPropertyTree() const @@ -85,8 +87,19 @@ } // generate tree for KeyvalueTags if (!m_KeyvalueTags.empty()) { Loading @@ -54,27 +29,14 @@ index de65bd0..26bc26d 100644 + } + pt.add_child("keyvalueTags", keyvalueTags); } + + tmp_node.clear(); pt.put("confidence", m_Confidence); return pt; @@ -96,6 +116,8 @@ void Trackable::fromPropertyTree(ptree const &pt) ptree tmp_node; m_UUID = pt.get("UUID", ""); m_Name = pt.get("name", ""); + m_TrackableType.setEnumValue(pt.get("trackableType","")); + m_Unit.setEnumValue(pt.get("unit","")); m_CreatorUUID = pt.get("creatorUUID", ""); if (pt.get_child_optional("trackableEncodingInformation")) { m_TrackableEncodingInformation = fromPt<EncodingInformationStructure>(pt.get_child("trackableEncodingInformation")); @@ -111,6 +133,9 @@ void Trackable::fromPropertyTree(ptree const &pt) @@ -115,6 +128,8 @@ if (pt.get_child_optional("keyvalueTags")) { m_KeyvalueTags = fromPt<std::map<std::string, std::vector<std::string>>>(pt.get_child("keyvalueTags")); } + if (pt.get_child_optional("trackablePayload")) { + m_TrackablePayload = fromPt<std::string>(pt.get_child("trackablePayload")); + } m_Confidence = pt.get("confidence", 0.0); }
EtsiServerGen/patches/fixCppWorldAnchorModel.patch +5 −31 Original line number Diff line number Diff line diff --git a/EtsiServerGen/model/WorldAnchor.cpp b/../../world-storage-cpp-server/EtsiServerGen/model/WorldAnchor.cpp index a26966d..9bf2ac1 100644 --- a/EtsiServerGen/model/WorldAnchor.cpp +++ b/../../world-storage-cpp-server/EtsiServerGen/model/WorldAnchor.cpp @@ -48,6 +48,8 @@ std::string WorldAnchor::toJsonString(bool prettyJson /* = false */) const // workaround inspired by: https://stackoverflow.com/a/56395440 std::regex reg("\\\"([0-9]+\\.{0,1}[0-9]*)\\\""); std::string result = std::regex_replace(ss.str(), reg, "$1"); + result.erase(std::remove(result.begin(), result.end(), '|'), result.end()); + return result; } @@ -66,6 +68,7 @@ ptree WorldAnchor::toPropertyTree() const pt.put("UUID", m_UUID); pt.put("name", m_Name); pt.put("creatorUUID", m_CreatorUUID); + pt.put("unit", m_Unit.getEnumValue()); // generate tree for LocalCRS tmp_node.clear(); if (!m_LocalCRS.empty()) { @@ -82,8 +85,19 @@ ptree WorldAnchor::toPropertyTree() const --- WorldAnchor.cpp 2024-08-30 16:07:36.273085120 +0200 +++ WorldAnchor_corrected.cpp 2024-08-30 16:10:28.143238251 +0200 @@ -83,8 +83,20 @@ } // generate tree for KeyvalueTags if (!m_KeyvalueTags.empty()) { Loading @@ -38,14 +19,7 @@ index a26966d..9bf2ac1 100644 + + } + pt.add_child("keyvalueTags", keyvalueTags); + } tmp_node.clear(); return pt; @@ -95,6 +109,7 @@ void WorldAnchor::fromPropertyTree(ptree const &pt) m_UUID = pt.get("UUID", ""); m_Name = pt.get("name", ""); m_CreatorUUID = pt.get("creatorUUID", ""); + m_Unit.setEnumValue(pt.get("unit","")); // push all items of LocalCRS into member if (pt.get_child_optional("localCRS")) { m_LocalCRS = fromPt<std::vector<float>>(pt.get_child("localCRS"));