// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschränkt) // All rights reserved. Licensed under the MIT license. // ========================================================================== using System; using System.Collections.Generic; using System.Linq; using Squidex.Domain.Apps.Core.Schemas; using Squidex.Infrastructure.Json.Objects; namespace Squidex.Domain.Apps.Core.ExtractReferenceIds { public sealed class ReferencesExtractor : IFieldVisitor> { private readonly IJsonValue value; private ReferencesExtractor(IJsonValue value) { this.value = value; } public static IEnumerable ExtractReferences(IField field, IJsonValue value) { return field.Accept(new ReferencesExtractor(value)); } public IEnumerable Visit(IArrayField field) { var result = new List(); if (value is JsonArray array) { foreach (var item in array.OfType()) { foreach (var nestedField in field.Fields) { if (item.TryGetValue(nestedField.Name, out var nestedValue)) { result.AddRange(nestedField.Accept(new ReferencesExtractor(nestedValue))); } } } } return result; } public IEnumerable Visit(IField field) { var ids = value.ToGuidSet(); return ids; } public IEnumerable Visit(IField field) { var ids = value.ToGuidSet(); if (field.Properties.SchemaId != Guid.Empty) { ids.Add(field.Properties.SchemaId); } return ids; } public IEnumerable Visit(IField field) { return Enumerable.Empty(); } public IEnumerable Visit(IField field) { return Enumerable.Empty(); } public IEnumerable Visit(IField field) { return Enumerable.Empty(); } public IEnumerable Visit(IField field) { return Enumerable.Empty(); } public IEnumerable Visit(IField field) { return Enumerable.Empty(); } public IEnumerable Visit(IField field) { return Enumerable.Empty(); } public IEnumerable Visit(IField field) { return Enumerable.Empty(); } } }