From f36b78ff890f2da8102278aedaea4ba595c4be75 Mon Sep 17 00:00:00 2001
From: Stephane Louis Dit Picard <stephane.louisditpicard@orange.com>
Date: Tue, 16 Jul 2024 18:00:11 +0200
Subject: [PATCH] refactor: add missing sync methods for trackables, world
 anchors and links requests

---
 Runtime/Scripts/REST/AdminRequest.cs          | 30 ++++++++--
 .../REST/RelocalizationInformationRequest.cs  | 11 +++-
 Runtime/Scripts/REST/TrackableRequest.cs      | 55 +++++++++++++++++--
 Runtime/Scripts/REST/WorldAnchorRequest.cs    | 55 +++++++++++++++++--
 Runtime/Scripts/REST/WorldLinkRequest.cs      | 55 +++++++++++++++++--
 5 files changed, 183 insertions(+), 23 deletions(-)

diff --git a/Runtime/Scripts/REST/AdminRequest.cs b/Runtime/Scripts/REST/AdminRequest.cs
index cf2304b..4ab8496 100644
--- a/Runtime/Scripts/REST/AdminRequest.cs
+++ b/Runtime/Scripts/REST/AdminRequest.cs
@@ -32,10 +32,10 @@ namespace ETSI.ARF.WorldStorage.REST
         //
         // Wrapper for the endpoints
         //
-        static private string Ping(WorldStorageServer ws)
+        static public string PingSync(WorldStorageServer ws)
         {
             wsServer = ws;
-            var httpClient = new UnityWebRequestHttpClient(ws.URI);
+            var httpClient = new BasicHTTPClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
             string response = apiClient.GetPing();
@@ -50,10 +50,20 @@ namespace ETSI.ARF.WorldStorage.REST
 
             Debug.Log("[REST] Request Ping...");
             ResponseObject<string> ro = new ResponseObject<string>("Request Ping", func);
-            apiClient.GetPingAsync().ContinueWith(OnReceiveObject<string>, ro);
+            apiClient.GetPingAsync(ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
         }
 
+        static public string AdminSync(WorldStorageServer ws)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            string response = apiClient.GetAdmin();
+            return response;
+        }
+
         static public ResponseObject<string> AdminAsync(WorldStorageServer ws, Action<ResponseObject<string>> func)
         {
             wsServer = ws;
@@ -62,10 +72,20 @@ namespace ETSI.ARF.WorldStorage.REST
 
             Debug.Log("[REST] Request Admin...");
             ResponseObject<string> ro = new ResponseObject<string>("Request Admin", func);
-            apiClient.GetAdminAsync().ContinueWith(OnReceiveObject<string>, ro);
+            apiClient.GetAdminAsync(ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
         }
 
+        static public string VersionSync(WorldStorageServer ws)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            string response = apiClient.GetVersion();
+            return response;
+        }
+
         static public ResponseObject<string> VersionAsync(WorldStorageServer ws, Action<ResponseObject<string>> func)
         {
             wsServer = ws;
@@ -74,7 +94,7 @@ namespace ETSI.ARF.WorldStorage.REST
 
             Debug.Log("[REST] Request Version...");
             ResponseObject<string> ro = new ResponseObject<string>("Request Version", func);
-            apiClient.GetVersionAsync().ContinueWith(OnReceiveObject<string>, ro);
+            apiClient.GetVersionAsync(ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
         }
     }
diff --git a/Runtime/Scripts/REST/RelocalizationInformationRequest.cs b/Runtime/Scripts/REST/RelocalizationInformationRequest.cs
index 309618c..95470c6 100644
--- a/Runtime/Scripts/REST/RelocalizationInformationRequest.cs
+++ b/Runtime/Scripts/REST/RelocalizationInformationRequest.cs
@@ -32,7 +32,7 @@ namespace ETSI.ARF.WorldStorage.REST
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
-            apiClient = new WorldStorageClient(httpClient);
+            apiClient = new MyWorldStorageClient(httpClient);
 
             ResponseObject<Response> ro = new ResponseObject<Response>("Request Reloc Information ", func);
            
@@ -45,12 +45,16 @@ namespace ETSI.ARF.WorldStorage.REST
                 newOne.Mode = modes[i];
                 anonymous.Add(newOne);
             }
-            apiClient.GetRelocalizationInformationAsync(token, anonymous, capabilities).ContinueWith(OnReceiveObject<Response>, ro);
+            apiClient.GetRelocalizationInformationAsync(token, anonymous, capabilities, ro.cancellationToken).ContinueWith(OnReceiveObject<Response>, ro);
             return ro;
         }
 
-
         static public Response GetRelocalizationInformation(WorldStorageServer ws, List<Guid> uuids, List<Mode_WorldStorage> modes, List<Capability> capabilities)
+        {
+            return GetRelocalizationInformationSync(ws, uuids, modes, capabilities);
+        }
+
+        static public Response GetRelocalizationInformationSync(WorldStorageServer ws, List<Guid> uuids, List<Mode_WorldStorage> modes, List<Capability> capabilities)
         {
             wsServer = ws;
             var httpClient = new BasicHTTPClient(ws.URI);
@@ -102,6 +106,7 @@ namespace ETSI.ARF.OpenAPI.WorldStorage
         }
     }
 
+    // Custom client to be able to properly serialize objects in the query string
     public partial class MyWorldStorageClient : WorldStorageClient
     {
         public MyWorldStorageClient(IHttpClient httpClient) : base(httpClient)
diff --git a/Runtime/Scripts/REST/TrackableRequest.cs b/Runtime/Scripts/REST/TrackableRequest.cs
index 044ea21..9aa9adf 100644
--- a/Runtime/Scripts/REST/TrackableRequest.cs
+++ b/Runtime/Scripts/REST/TrackableRequest.cs
@@ -33,13 +33,23 @@ namespace ETSI.ARF.WorldStorage.REST
         //
         // Wrapper for the endpoints
         //
+        static public Trackable GetTrackableSync(WorldStorageServer ws, Guid UUID)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            Debug.Log($"[REST] Request Trackable {UUID}...");
+            return apiClient.GetTrackableById(token, UUID);
+        }
+        
         static public ResponseObject<Trackable> GetTrackableAsync(WorldStorageServer ws, Guid UUID, Action<ResponseObject<Trackable>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Request 1 Trackable...");
+            Debug.Log($"[REST] Request Trackable {UUID}...");
             ResponseObject<Trackable> ro = new ResponseObject<Trackable>("Request Trackable " + UUID.ToString(), func);
             apiClient.GetTrackableByIdAsync(token, UUID, ro.cancellationToken).ContinueWith(OnReceiveObject<Trackable>, ro);
             return ro;
@@ -67,41 +77,76 @@ namespace ETSI.ARF.WorldStorage.REST
             return ro;
         }
 
+        static public string CreateTrackableSync(WorldStorageServer ws, Trackable trackable)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            // Add some management stuffs
+            if (trackable.UUID == Guid.Empty) trackable.UUID = Guid.NewGuid();
+            if (trackable.CreatorUUID == Guid.Empty) trackable.CreatorUUID = System.Guid.Parse("8fb169e2-8910-4cd5-a8f9-b7abff38d013");
+
+            Debug.Log($"[REST] Create Trackable {trackable.UUID}...");
+            return apiClient.AddTrackable(token, trackable);
+        }
+
         static public ResponseObject<string> CreateTrackableAsync(WorldStorageServer ws, Trackable trackable, Action<ResponseObject<string>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Create 1 Trackable...");
-
             // Add some management stuffs
             if (trackable.UUID == Guid.Empty) trackable.UUID = Guid.NewGuid();
             if (trackable.CreatorUUID == Guid.Empty) trackable.CreatorUUID = System.Guid.Parse("8fb169e2-8910-4cd5-a8f9-b7abff38d013");
 
+            Debug.Log($"[REST] Create Trackable {trackable.UUID}...");
+
             ResponseObject<string> ro = new ResponseObject<string>("Create Trackable " + trackable.Name + " (no UUID)", func);
             apiClient.AddTrackableAsync(token, trackable, ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
         }
 
+        static public string UpdateTrackableSync(WorldStorageServer ws, Trackable trackable)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            Debug.Log($"[REST] Update Trackable {trackable.UUID}...");
+            return apiClient.ModifyTrackable(token, trackable);
+        }
+
         static public ResponseObject<string> UpdateTrackableAsync(WorldStorageServer ws, Trackable trackable, Action<ResponseObject<string>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Update Trackable...");
+            Debug.Log($"[REST] Update Trackable {trackable.UUID}...");
             ResponseObject<string> ro = new ResponseObject<string>("Update Trackable " + trackable.UUID.ToString(), func);
             apiClient.ModifyTrackableAsync(token, trackable,ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
         }
+
+        static public string DeleteTrackableSync(WorldStorageServer ws, Guid UUID)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            Debug.Log($"[REST] Delete Trackable {UUID}...");
+            return apiClient.DeleteTrackable(token, UUID);
+        }
+
         static public ResponseObject<string> DeleteTrackableAsync(WorldStorageServer ws, Guid UUID, Action<ResponseObject<string>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Delete 1 Trackable...");
+            Debug.Log($"[REST] Delete Trackable {UUID}...");
             ResponseObject<string> ro = new ResponseObject<string>("Delete Trackable " + UUID.ToString(), func);
             apiClient.DeleteTrackableAsync(token, UUID, ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
diff --git a/Runtime/Scripts/REST/WorldAnchorRequest.cs b/Runtime/Scripts/REST/WorldAnchorRequest.cs
index 34ba629..d6b2c95 100644
--- a/Runtime/Scripts/REST/WorldAnchorRequest.cs
+++ b/Runtime/Scripts/REST/WorldAnchorRequest.cs
@@ -34,13 +34,23 @@ namespace ETSI.ARF.WorldStorage.REST
         //
         // Wrapper for the endpoints
         //
+        static public WorldAnchor GetWorldAnchorSync(WorldStorageServer ws, Guid UUID)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            Debug.Log($"[REST] Request WorldAnchor {UUID}...");
+            return apiClient.GetWorldAnchorById(token, UUID);
+        }
+
         static public ResponseObject<WorldAnchor> GetWorldAnchorAsync(WorldStorageServer ws, Guid UUID, Action<ResponseObject<WorldAnchor>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Request 1 WorldAnchor...");
+            Debug.Log($"[REST] Request WorldAnchor {UUID}...");
             ResponseObject<WorldAnchor> ro = new ResponseObject<WorldAnchor>("Request WorldAnchor " + UUID.ToString(), func);
             apiClient.GetWorldAnchorByIdAsync(token, UUID, ro.cancellationToken).ContinueWith(OnReceiveObject<WorldAnchor>, ro);
             return ro;
@@ -52,6 +62,7 @@ namespace ETSI.ARF.WorldStorage.REST
             var httpClient = new BasicHTTPClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
+            Debug.Log("[REST] Request WorldAnchors...");
             return apiClient.GetWorldAnchors(token);
         }
 
@@ -67,41 +78,75 @@ namespace ETSI.ARF.WorldStorage.REST
             return ro;
         }
 
+        static public string CreateWorldAnchorSync(WorldStorageServer ws, WorldAnchor worldAnchor)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            // Add some management stuffs
+            if (worldAnchor.UUID == Guid.Empty) worldAnchor.UUID = Guid.NewGuid();
+            if (worldAnchor.CreatorUUID == Guid.Empty) worldAnchor.CreatorUUID = System.Guid.Parse("8fb169e2-8910-4cd5-a8f9-b7abff38d013");
+
+            Debug.Log($"[REST] Create WorldAnchor {worldAnchor.UUID}...");
+            return apiClient.AddWorldAnchor(token, worldAnchor);
+        }
+
         static public ResponseObject<string> CreateWorldAnchorAsync(WorldStorageServer ws, WorldAnchor worldAnchor, Action<ResponseObject<string>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Create 1 WorldAnchor...");
-
             // Add some management stuffs
             if (worldAnchor.UUID == Guid.Empty) worldAnchor.UUID = Guid.NewGuid();
             if (worldAnchor.CreatorUUID == Guid.Empty) worldAnchor.CreatorUUID = System.Guid.Parse("8fb169e2-8910-4cd5-a8f9-b7abff38d013");
 
+            Debug.Log($"[REST] Create WorldAnchor {worldAnchor.UUID}...");
             ResponseObject<string> ro = new ResponseObject<string>("Create WorldAnchor " + worldAnchor.Name + " (no UUID)", func);
             apiClient.AddWorldAnchorAsync(token, worldAnchor, ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
         }
 
+        static public string UpdateWorldAnchorSync(WorldStorageServer ws, WorldAnchor worldAnchor)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            Debug.Log($"[REST] Update WorldAnchor {worldAnchor.UUID}...");
+            return apiClient.ModifyWorldAnchor(token, worldAnchor);
+        }
+
         static public ResponseObject<string> UpdateWorldAnchorAsync(WorldStorageServer ws, WorldAnchor worldAnchor, Action<ResponseObject<string>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Update WorldAnchor...");
+            Debug.Log($"[REST] Update WorldAnchor {worldAnchor.UUID}...");
             ResponseObject<string> ro = new ResponseObject<string>("Update WorldAnchor " + worldAnchor.UUID.ToString(), func);
             apiClient.ModifyWorldAnchorAsync(token, worldAnchor, ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
         }
+
+        static public string DeleteWorldAnchorSync(WorldStorageServer ws, Guid UUID)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            Debug.Log($"[REST] Delete WorldAnchor {UUID}...");
+            return apiClient.DeleteWorldAnchor(token, UUID);
+        }
+
         static public ResponseObject<string> DeleteWorldAnchorAsync(WorldStorageServer ws, Guid UUID, Action<ResponseObject<string>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Delete 1 WorldAnchor...");
+            Debug.Log($"[REST] Delete WorldAnchor {UUID}...");
             ResponseObject<string> ro = new ResponseObject<string>("Delete WorldAnchor " + UUID.ToString(), func);
             apiClient.DeleteWorldAnchorAsync(token, UUID, ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
diff --git a/Runtime/Scripts/REST/WorldLinkRequest.cs b/Runtime/Scripts/REST/WorldLinkRequest.cs
index 7350dde..44b489f 100644
--- a/Runtime/Scripts/REST/WorldLinkRequest.cs
+++ b/Runtime/Scripts/REST/WorldLinkRequest.cs
@@ -33,13 +33,23 @@ namespace ETSI.ARF.WorldStorage.REST
         //
         // Wrapper for the endpoints
         //
+        static public WorldLink GetWorldLinkSync(WorldStorageServer ws, Guid UUID)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            Debug.Log($"[REST] Request WorldLink {UUID}...");
+            return apiClient.GetWorldLinkById(token, UUID);
+        }
+
         static public ResponseObject<WorldLink> GetWorldLinkAsync(WorldStorageServer ws, Guid UUID, Action<ResponseObject<WorldLink>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Request 1 WorldLink...");
+            Debug.Log($"[REST] Request WorldLink {UUID}...");
             ResponseObject<WorldLink> ro = new ResponseObject<WorldLink>("Request WorldLink " + UUID.ToString(), func);
             apiClient.GetWorldLinkByIdAsync(token, UUID, ro.cancellationToken).ContinueWith(OnReceiveObject<WorldLink>, ro);
             return ro;
@@ -51,6 +61,7 @@ namespace ETSI.ARF.WorldStorage.REST
             var httpClient = new BasicHTTPClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
+            Debug.Log("[REST] Request WorldLinks...");
             return apiClient.GetWorldLinks(token);
         }
 
@@ -66,41 +77,75 @@ namespace ETSI.ARF.WorldStorage.REST
             return ro;
         }
 
+        static public string CreateWorldLinkSync(WorldStorageServer ws, WorldLink worldLink)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            // Add some management stuffs
+            if (worldLink.UUID == Guid.Empty) worldLink.UUID = Guid.NewGuid();
+            if (worldLink.CreatorUUID == Guid.Empty) worldLink.CreatorUUID = System.Guid.Parse("8fb169e2-8910-4cd5-a8f9-b7abff38d013");
+
+            Debug.Log($"[REST] Create WorldLink {worldLink.UUID}...");
+            return apiClient.AddWorldLink(token, worldLink);
+        }
+
         static public ResponseObject<string> CreateWorldLinkAsync(WorldStorageServer ws, WorldLink worldLink, Action<ResponseObject<string>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Create 1 WorldLink...");
-
             // Add some management stuffs
             if (worldLink.UUID == Guid.Empty) worldLink.UUID = Guid.NewGuid();
             if (worldLink.CreatorUUID == Guid.Empty) worldLink.CreatorUUID = System.Guid.Parse("8fb169e2-8910-4cd5-a8f9-b7abff38d013");
 
+            Debug.Log($"[REST] Create WorldLink {worldLink.UUID}...");
             ResponseObject<string> ro = new ResponseObject<string>("Create WorldLink (no UUID)", func);
             apiClient.AddWorldLinkAsync(token, worldLink, ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
         }
 
+        static public string UpdateWorldLinkSync(WorldStorageServer ws, WorldLink worldLink)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            Debug.Log($"[REST] Update WorldLink {worldLink.UUID}...");
+            return apiClient.ModifyWorldLink(token, worldLink);
+        }
+
         static public ResponseObject<string> UpdateWorldLinkAsync(WorldStorageServer ws, WorldLink worldLink, Action<ResponseObject<string>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Update WorldLink...");
+            Debug.Log($"[REST] Update WorldLink {worldLink.UUID}...");
             ResponseObject<string> ro = new ResponseObject<string>("Update WorldLink " + worldLink.UUID.ToString(), func);
             apiClient.ModifyWorldLinkAsync(token, worldLink, ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
         }
+
+        static public string DeleteWorldLinkSync(WorldStorageServer ws, Guid UUID)
+        {
+            wsServer = ws;
+            var httpClient = new BasicHTTPClient(ws.URI);
+            apiClient = new WorldStorageClient(httpClient);
+
+            Debug.Log($"[REST] Delete WorldLink {UUID}...");
+            return apiClient.DeleteWorldLink(token, UUID);
+        }
+
         static public ResponseObject<string> DeleteWorldLinkAsync(WorldStorageServer ws, Guid UUID, Action<ResponseObject<string>> func)
         {
             wsServer = ws;
             var httpClient = new UnityWebRequestHttpClient(ws.URI);
             apiClient = new WorldStorageClient(httpClient);
 
-            Debug.Log("[REST] Delete 1 WorldLink...");
+            Debug.Log($"[REST] Delete WorldLink {UUID}...");
             ResponseObject<string> ro = new ResponseObject<string>("Delete WorldLink " + UUID.ToString(), func);
             apiClient.DeleteWorldLinkAsync(token, UUID, ro.cancellationToken).ContinueWith(OnReceiveObject<string>, ro);
             return ro;
-- 
GitLab