Commit ccab91f6 authored by Sylvain Renault's avatar Sylvain Renault
Browse files

Merge branch 'develop' into 'main'

Adapt the API to new reloc info request.

See merge request !13
parents ca42e4d9 d3f5ba5e
Loading
Loading
Loading
Loading

openapi @ 99ea877d

Original line number Diff line number Diff line
Subproject commit 073fd7213fd9e6ebc2f8a47d628a650de30c8bc4
Subproject commit 99ea877dca8ba0587699f12dab77a43f79a836fc
+27 −17
Original line number Diff line number Diff line
@@ -52,17 +52,24 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// Operation to retrieve all the relocalization information of one or severals WorldAnchors or Trackables.
        /// </summary>
        /// 
        public override IActionResult GetRelocalizationInformation([FromQuery(Name = "uuids")][Required()] List<GetRelocalizationInformationUuidsParameterInner> uuids, [FromQuery(Name = "capabilities")][Required()] List<Capability> capabilities, [FromHeader(Name = "token")] string token)
        // old: public override IActionResult GetRelocalizationInformation([FromQuery(Name = "uuids")][Required()] List<GetRelocalizationInformationUuidsParameterInner> uuids, [FromQuery(Name = "capabilities")][Required()] List<Capability> capabilities, [FromHeader(Name = "token")] string token)
        public override IActionResult GetRelocalizationInformation([FromQuery(Name = "uuids")][Required()] List<UuidAndMode> uuids, [FromQuery(Name = "capabilities")][Required()] List<Capability> capabilities, [FromHeader(Name = "token")] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            WorldAnchorService _worldAnchorService = WorldAnchorService.Singleton as WorldAnchorService;
            TrackableService _trackableService = TrackableService.Singleton as TrackableService;

            var history = new List<Guid>();
            var result = new GetRelocalizationInformation200Response();
            var result = new RelocalizationInformations();
            result.RelocInfo = new List<RelocalizationInformation>();

            Guid errorUid = Guid.Empty;

            foreach (var request in uuids)
            {
                //System.Diagnostics.Debug.WriteLine("RelocInfo: Looking in the WS database for UUID=" + request.Uuid.ToString());

                var anchor = _worldAnchorService.Get(request.Uuid);
                Trackable trackable = null;

@@ -94,12 +101,12 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
                    var relocalizationInformation = new RelocalizationInformation();
                    relocalizationInformation.RequestUUID = trackable.UUID;
                    relocalizationInformation.RequestType = TypeWorldStorage.TRACKABLEEnum;
                    relocalizationInformation.RelocObjects = new List<RelocalizationInformationRelocObjectsInner>();
                    relocalizationInformation.RelocObjects = new List<RelocObject>();

                    if (trackable.Match(capabilities))
                    {
                        // add itself with matrix identity as Transform3D
                        var itself = new RelocalizationInformationRelocObjectsInner();
                        var itself = new RelocObject();
                        itself.Trackable = trackable;
                        itself.Mode = request.Mode;
                        itself.Transform3D = new List<float>()
@@ -118,16 +125,19 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
                }
                else
                {
                    Console.WriteLine($"WorldAnchor with UUID {request.Uuid} does not exist in database");
                    Console.WriteLine($"Trackable or WorldAnchor with UUID {request.Uuid} does not exist in database");
                }
            }

            return result.RelocInfo.Count > 0 ? new ObjectResult(result) : StatusCode(404, "Not found, could not find UUID in database.");
            return result.RelocInfo.Count > 0 ? new ObjectResult(result) : StatusCode(404, new Error() { Message = "Not found, could not find UUID(s) in database." });
        }

        private List<RelocalizationInformationRelocObjectsInner> FindRelocInfo(Guid targetUUID, ModeWorldStorage mode, Matrix4x4 matrix, List<Capability> capabilities, ref List<Guid> history)
        //
        // Helpers
        //
        private List<RelocObject> FindRelocInfo(Guid targetUUID, ModeWorldStorage mode, Matrix4x4 matrix, List<Capability> capabilities, ref List<Guid> history)
        {
            var results = new List<RelocalizationInformationRelocObjectsInner>();
            var results = new List<RelocObject>();

            results.AddRange(FindRelocInfoAsTo(targetUUID, mode, matrix, capabilities, ref history));
            results.AddRange(FindRelocInfoAsFrom(targetUUID, mode, matrix, capabilities, ref history));
@@ -136,13 +146,13 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        }

        // Check links where the target UUID appeared as "To"
        private List<RelocalizationInformationRelocObjectsInner> FindRelocInfoAsTo(Guid targetUUID, ModeWorldStorage mode, Matrix4x4 matrix, List<Capability> capabilities, ref List<Guid> history)
        private List<RelocObject> FindRelocInfoAsTo(Guid targetUUID, ModeWorldStorage mode, Matrix4x4 matrix, List<Capability> capabilities, ref List<Guid> history)
        {
            TrackableService _trackableService = TrackableService.Singleton as TrackableService;
            WorldAnchorService _worldAnchorService = WorldAnchorService.Singleton as WorldAnchorService;
            WorldLinkService _worldLinkService = WorldLinkService.Singleton as WorldLinkService;

            var results = new List<RelocalizationInformationRelocObjectsInner>();
            var results = new List<RelocObject>();

            // Check links where the target UUID appeared as "To"
            List<WorldLink> linksTo;
@@ -199,7 +209,7 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
                        }

                        // We found a valid trackable, add it to the results
                        var result = new RelocalizationInformationRelocObjectsInner();
                        var result = new RelocObject();
                        result.Trackable = trackable;
                        result.Mode = mode;
                        result.Transform3D = new List<float>()
@@ -272,13 +282,13 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        }

        // Check links where the target UUID appeared as "From"
        private List<RelocalizationInformationRelocObjectsInner> FindRelocInfoAsFrom(Guid targetUUID, ModeWorldStorage mode, Matrix4x4 matrix, List<Capability> capabilities, ref List<Guid> history)
        private List<RelocObject> FindRelocInfoAsFrom(Guid targetUUID, ModeWorldStorage mode, Matrix4x4 matrix, List<Capability> capabilities, ref List<Guid> history)
        {
            TrackableService _trackableService = TrackableService.Singleton as TrackableService;
            WorldAnchorService _worldAnchorService = WorldAnchorService.Singleton as WorldAnchorService;
            WorldLinkService _worldLinkService = WorldLinkService.Singleton as WorldLinkService;

            var results = new List<RelocalizationInformationRelocObjectsInner>();
            var results = new List<RelocObject>();

            // Check links where the anchor appeared as "From"
            List<WorldLink> linksTo;
@@ -335,7 +345,7 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
                        }

                        // We found a valid trackable, add it to the results
                        var result = new RelocalizationInformationRelocObjectsInner();
                        var result = new RelocObject();
                        result.Trackable = trackable;
                        result.Mode = mode;
                        result.Transform3D = new List<float>()
+22 −10
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Last change: June 2024
// Last change: September 2024
//

/*
@@ -66,6 +66,8 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult AddTrackable([FromBody] Trackable trackable, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            if (String.IsNullOrEmpty(trackable.UUID.ToString()))
            {
                trackable.UUID = Guid.NewGuid();
@@ -75,13 +77,13 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
                Trackable mytrackable = _trackableService.Create(trackable);
                if (mytrackable == null)
                {
                    return StatusCode(409, "UUID already existing!");
                    return StatusCode(409, new Error() { Message = "UUID already existing!" });
                }
                else return StatusCode(200, mytrackable.UUID.ToString());
                else return StatusCode(200, new Success() { Message = mytrackable.UUID.ToString() });
            }
            catch (Exception e)
            {
                return StatusCode(400, e.Message);
                return StatusCode(400, new Error() { Message = e.Message });
            }
        }

@@ -90,6 +92,8 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult DeleteTrackable([FromRoute(Name = "trackableUUID")][Required] Guid trackableUUID, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            // Access other service(s)
            WorldLinkService _worldLinkService = WorldLinkService.Singleton as WorldLinkService;

@@ -121,7 +125,8 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
            {
                result += ", removed object was referenced in " + worldlinkinfo + " and removed there as well";
            }
            return (count > 0) ? new ObjectResult(result) : StatusCode(404, "Not found, could not find UUID in database.");
            result += " Token: " + token;
            return (count > 0) ? StatusCode(200, new Success() { Message = result }) : StatusCode(404, new Error() { Message = "Not found, could not find UUID in database." });
        }

        /// <summary>
@@ -129,8 +134,10 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult GetTrackableById([FromRoute(Name = "trackableUUID")][Required] Guid trackableUUID, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            Trackable trackable = _trackableService.Get(trackableUUID);
            return (null != trackable) ? new ObjectResult(trackable) : StatusCode(404, "Not found, could not find UUID in database.");
            return (null != trackable) ? new ObjectResult(trackable) : StatusCode(404, new Error() { Message = "Not found, could not find UUID in database." });
        }

        /// <summary>
@@ -138,8 +145,11 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult GetTrackables([FromHeader] string token)
        {
            List<Trackable> trackablelist = _trackableService.Get();
            return new ObjectResult(trackablelist);
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            TrackablesResponse response = new TrackablesResponse();
            response.Trackables = _trackableService.Get();
            return new ObjectResult(response);
        }


@@ -149,14 +159,16 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult ModifyTrackable([FromBody] Trackable trackable, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            long count = _trackableService.Replace(trackable);
            if (count == 0)
            {
                return StatusCode(404, "Not found, could not find UUID in database.");
                return StatusCode(404, new Error() { Message = "Not found, could not find UUID in database." });
            }
            else
            {
                return StatusCode(200, trackable.UUID.ToString());
                return StatusCode(200, new Success() { Message = trackable.UUID.ToString() });
            }
        }
    }
+20 −9
Original line number Diff line number Diff line
@@ -66,6 +66,8 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult AddWorldAnchor([FromBody] WorldAnchor worldAnchor, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            if (String.IsNullOrEmpty(worldAnchor.UUID.ToString()))
            {
                worldAnchor.UUID = Guid.NewGuid();
@@ -75,13 +77,13 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
                WorldAnchor myworldanchor = _worldAnchorService.Create(worldAnchor);
                if (myworldanchor == null)
                {
                    return StatusCode(409, "UUID alread exexisting!");
                    return StatusCode(409, new Error() { Message = "UUID alread exexisting!" });
                }
                else return StatusCode(200, myworldanchor.UUID.ToString());
                else return StatusCode(200, new Success() { Message = myworldanchor.UUID.ToString() });
            }
            catch (Exception e)
            {
                return StatusCode(400, e.Message);
                return StatusCode(400, new Error() { Message = e.Message });
            }
        }

@@ -90,6 +92,8 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult DeleteWorldAnchor([FromRoute(Name = "worldAnchorUUID")][Required] Guid worldAnchorUUID, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            // Access other service(s)
            WorldLinkService _worldLinkService = WorldLinkService.Singleton as WorldLinkService;

@@ -121,7 +125,7 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
            {
                result += ", but removed object was referenced in " + worldlinkinfo + " and removed there as well";
            }
            return (count > 0) ? new ObjectResult(result) : StatusCode(404, "Not found, could not find UUID in database.");
            return (count > 0) ? StatusCode(200, new Success() { Message = result }) : StatusCode(404, new Error() { Message = "Not found, could not find UUID in database." });
        }

        /// <summary>
@@ -129,8 +133,10 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult GetWorldAnchorById([FromRoute(Name = "worldAnchorUUID")][Required] Guid worldAnchorUUID, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            WorldAnchor myworldanchor = _worldAnchorService.Get(worldAnchorUUID);
            return (null != myworldanchor) ? new ObjectResult(myworldanchor) : StatusCode(404, "Not found, could not find UUID in database.");
            return (null != myworldanchor) ? new ObjectResult(myworldanchor) : StatusCode(404, new Error() { Message = "Not found, could not find UUID in database." });
        }

        /// <summary>
@@ -138,8 +144,11 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult GetWorldAnchors([FromHeader] string token)
        {
            List<WorldAnchor> worldanchorlist = _worldAnchorService.Get();
            return new ObjectResult(worldanchorlist);
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            WorldAnchorsResponse response = new WorldAnchorsResponse();
            response.WorldAnchors = _worldAnchorService.Get();
            return new ObjectResult(response);
        }


@@ -149,14 +158,16 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult ModifyWorldAnchor([FromBody] WorldAnchor worldAnchor, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            long count = _worldAnchorService.Replace(worldAnchor);
            if (count == 0)
            {
                return StatusCode(404, "Not found, could not find UUID in database.");
                return StatusCode(404, new Error() { Message = "Not found, could not find UUID in database." });
            }
            else
            {
                return StatusCode(200, worldAnchor.UUID.ToString());
                return StatusCode(200, new Success() { Message = worldAnchor.UUID.ToString() });
            }
        }

+23 −11
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Last change: June 2024
// Last change: September 2024
//

/*
@@ -65,6 +65,8 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult AddWorldLink([FromBody] WorldLink worldLink, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            if (String.IsNullOrEmpty(worldLink.UUID.ToString()))
            {
                worldLink.UUID = Guid.NewGuid();
@@ -74,13 +76,13 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
                WorldLink myworldlink = _worldLinkService.Create(worldLink);
                if (myworldlink == null)
                {
                    return StatusCode(409, "UUID already existing!");
                    return StatusCode(409, new Error() { Message = "UUID already existing!" });
                }
                else return StatusCode(200, myworldlink.UUID.ToString());
                else return StatusCode(200, new Success() { Message = myworldlink.UUID.ToString() });
            }
            catch (Exception e)
            {
                return StatusCode(400, e.Message);
                return StatusCode(400, new Error() { Message = e.Message});
            }
        }

@@ -89,8 +91,10 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult DeleteWorldLink([FromRoute(Name = "worldLinkUUID")][Required] Guid worldLinkUUID, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            long count = _worldLinkService.Remove(worldLinkUUID);
            return (count > 0) ? new ObjectResult("ok") : StatusCode(404, "Not found, could not find UUID in database.");
            return (count > 0) ? StatusCode(200, new Success() { Message = "ok" } ) : StatusCode(404, new Error() { Message = "Not found, could not find UUID in database." });
        }


@@ -99,6 +103,8 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult GetWorldLinkById([FromRoute(Name = "worldLinkUUID")][Required] Guid worldLinkUUID, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            // Access other service(s)
            TrackableService _trackableService = TrackableService.Singleton as TrackableService;
            WorldAnchorService _worldAnchorService = WorldAnchorService.Singleton as WorldAnchorService;
@@ -141,7 +147,7 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
                    }
                }
            }
            return (null != myworldlink) ? new ObjectResult(myworldlink) : StatusCode(404, "Not found, could not find UUID in database.");
            return (null != myworldlink) ? new ObjectResult(myworldlink) : StatusCode(404, new Error() { Message = "Not found, could not find UUID in database." });
        }

        /// <summary>
@@ -149,12 +155,16 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult GetWorldLinks([FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            WorldLinksResponse response = new WorldLinksResponse();

            // Access other service(s)
            TrackableService _trackableService = TrackableService.Singleton as TrackableService;
            WorldAnchorService _worldAnchorService = WorldAnchorService.Singleton as WorldAnchorService;

            List<WorldLink> worldlinklist = _worldLinkService.Get();
            foreach (WorldLink myworldlink in worldlinklist)
            response.WorldLinks = _worldLinkService.Get();
            foreach (WorldLink myworldlink in response.WorldLinks)
            {
                // check TypeFrom
                if (myworldlink.TypeFrom == TypeWorldStorage.TRACKABLEEnum)
@@ -191,7 +201,7 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
                    }
                }
            }
            return new ObjectResult(worldlinklist);
            return new ObjectResult(response);
        }


@@ -201,14 +211,16 @@ namespace ETSI.ARF.OpenAPI.WorldStorage.Controllers
        /// </summary>
        public override IActionResult ModifyWorldLink([FromBody] WorldLink worldLink, [FromHeader] string token)
        {
            if (!Startup.IsAccessGranted(token)) return StatusCode(511, new Error() { Message = "Invalid token!" });

            long count = _worldLinkService.Replace(worldLink);
            if (count == 0)
            {
                return StatusCode(404, "Not found, could not find UUID in database.");
                return StatusCode(404, new Error() { Message = "Not found, could not find UUID in database." });
            }
            else
            {
                return StatusCode(200, worldLink.UUID.ToString());
                return StatusCode(200, new Success() { Message = worldLink.UUID.ToString() });
            }
        }
    }
Loading