ext.XmpJsonLinkedData.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics.CodeAnalysis;
  4. using System.Text;
  5. using SharpGLTF.Collections;
  6. using XMPJSONLD = System.Text.Json.Nodes.JsonNode;
  7. namespace SharpGLTF.Schema2
  8. {
  9. public partial class XmpPackets
  10. {
  11. internal XmpPackets(ModelRoot root)
  12. {
  13. _packets = new List<XMPJSONLD>();
  14. }
  15. public IReadOnlyList<XMPJSONLD> JsonPackets => _packets;
  16. #if NET6_0_OR_GREATER
  17. [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.Json.Nodes.JsonArray))]
  18. [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.Json.Nodes.JsonValue))]
  19. [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(System.Text.Json.Nodes.JsonObject))]
  20. #endif
  21. public int AddPacket(XMPJSONLD packet)
  22. {
  23. if (_packets.Contains(packet)) throw new ArgumentException("Already exists", nameof(packet));
  24. _packets.Add(packet);
  25. return _packets.Count -1;
  26. }
  27. }
  28. public partial class XmpPacketReference
  29. {
  30. internal XmpPacketReference(ExtraProperties owner)
  31. {
  32. _Owner = owner;
  33. }
  34. private ExtraProperties _Owner;
  35. private ModelRoot _FindRoot()
  36. {
  37. if (_Owner is LogicalChildOfRoot logicalChild) return logicalChild.LogicalParent;
  38. return null;
  39. }
  40. private XmpPackets _GetPackets()
  41. {
  42. return _FindRoot()?.GetExtension<XmpPackets>();
  43. }
  44. public int PacketLogicalIndex => _packet;
  45. public XMPJSONLD JsonPacket => _GetPackets()?.JsonPackets[_packet];
  46. public void SetPacket(int logicalIndex)
  47. {
  48. if (logicalIndex < 0) throw new ArgumentOutOfRangeException(nameof(logicalIndex));
  49. var packets = _GetPackets();
  50. if (packets != null && logicalIndex >= packets.JsonPackets.Count) throw new ArgumentOutOfRangeException(nameof(logicalIndex));
  51. _packet = logicalIndex;
  52. }
  53. }
  54. }