private IList <string> GetMatchingPidUris(Entity resource, string regexForExistingPidUris) { var matchingPidUris = new List <string>(); var activePidUris = _pidUriTemplateRepository.GetMatchingPidUris(regexForExistingPidUris, _metadataService.GetInstanceGraph(COLID.Graph.Metadata.Constants.PIDO.PidConcept), _metadataService.GetInstanceGraph("draft")); matchingPidUris.AddRange(activePidUris); Entity resourcePidUri = resource.Properties.GetValueOrNull(Graph.Metadata.Constants.EnterpriseCore.PidUri, true); Entity resourceBaseUri = resource.Properties.GetValueOrNull(Graph.Metadata.Constants.Resource.BaseUri, true); if (!string.IsNullOrWhiteSpace(resourcePidUri?.Id)) { matchingPidUris.Add(resourcePidUri.Id); } if (!string.IsNullOrWhiteSpace(resourceBaseUri?.Id)) { matchingPidUris.Add(resourceBaseUri.Id); } foreach (var property in resource.Properties) { foreach (var prop in property.Value) { if (DynamicExtension.IsType <Entity>(prop, out Entity entity)) { Entity nestedPidUri = entity.Properties.GetValueOrNull(Graph.Metadata.Constants.EnterpriseCore.PidUri, true); if (nestedPidUri != null && !string.IsNullOrWhiteSpace(nestedPidUri.Id) && Regex.IsMatch(nestedPidUri.Id, regexForExistingPidUris)) { matchingPidUris.Add(nestedPidUri.Id); } Entity nestedBaseUri = entity.Properties.GetValueOrNull(Graph.Metadata.Constants.Resource.BaseUri, true); if (nestedBaseUri != null && !string.IsNullOrWhiteSpace(nestedBaseUri.Id) && Regex.IsMatch(nestedBaseUri.Id, regexForExistingPidUris)) { matchingPidUris.Add(nestedBaseUri.Id); } } } } return(matchingPidUris); }