Commit ccd2f9d2 authored by Jerome Royan's avatar Jerome Royan
Browse files

Update for supporting last OpenAPI ARF specification adapted to Rest-Bed

parent 2879534b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
[requires]
boost/1.78.0
boost/1.84.0
restbed/4.8

[generators]
+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
+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;
     }
+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");
@@ -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()) {
@@ -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);
 }
 
+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()) {
@@ -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