internal static IEnumerable <IRelationById> GetDescendentRelations(this IEnumerable <IReadonlyProviderRelationsRepository> session, HiveId ancestorId, Uri idRoot, RelationType relationType = null) { var totalOutput = new HashSet <IRelationById>(); foreach (var readonlyRelationsRepository in session) { if (readonlyRelationsRepository.CanReadRelations) { readonlyRelationsRepository.GetDescendentRelations(ancestorId, relationType) .SkipWhile(SkipAndMergeRelationsFromProviders(readonlyRelationsRepository.ProviderMetadata, totalOutput)) .ForEach(x => totalOutput.Add(x)); } } return(totalOutput.Distinct().Select(x => GroupSessionHelper.CreateRelationByAbsoluteId(x, idRoot))); }
internal static IRelationById FindRelation(this IEnumerable <IReadonlyProviderRelationsRepository> sessions, HiveId sourceId, HiveId destinationId, Uri idRoot, RelationType relationType = null) { IRelationById result = null; foreach (var readonlyRelationsRepository in sessions) { if (readonlyRelationsRepository.CanReadRelations) { result = readonlyRelationsRepository.FindRelation(sourceId, destinationId, relationType); } if (result != null) { break; } } return(GroupSessionHelper.CreateRelationByAbsoluteId(result, idRoot)); }
internal static IEnumerable <IRelationById> GetAncestorRelations(this IEnumerable <IReadonlyProviderRelationsRepository> allProviderRepositories, HiveId descendentId, Uri idRoot, RelationType relationType = null) { var totalOutput = new HashSet <IRelationById>(); foreach (var relationsRepository in allProviderRepositories) { if (relationsRepository.CanReadRelations) { var provider = relationsRepository; var relations = relationsRepository.RepositoryScopedCache.GetOrCreateTyped("rprr_GetAncestorRelations_" + descendentId + (relationType != null ? relationType.RelationName : "any_relationtype"), () => provider.GetAncestorRelations(descendentId, relationType).ToArray()); relations .SkipWhile(SkipAndMergeRelationsFromProviders(relationsRepository.ProviderMetadata, totalOutput)) .ForEach(x => totalOutput.Add(x)); } } return(totalOutput.Distinct().Select(x => GroupSessionHelper.CreateRelationByAbsoluteId(x, idRoot))); }