private IEnumerable <OperationDescriptor> FilterByIgnoredOperations(TrackedUseCase message) { var operations = (IEnumerable <OperationDescriptor>)message.Operations; var ignoredOperations = operations.Where(x => _operationsRegistry.IsIgnoredOperation(x.OperationIdentity)); var operationIds = ignoredOperations.Aggregate(new HashSet <Guid>(), (hashSet, operation) => { hashSet.Add(operation.Id); hashSet.UnionWith(message.GetNestedOperations(operation.Id).Select(x => x.Id)); return(hashSet); }); if (operationIds.Any()) { operations = operations.Where(x => !operationIds.Contains(x.Id)); } return(operations); }
private static IEnumerable <OperationDescriptor> Filter(TrackedUseCase message) { var operations = (IEnumerable <OperationDescriptor>)message.Operations; var disallowedIds = new HashSet <Guid>(); var disallowedOperations = operations.Where(x => OperationIdentityMetadata.DisallowedOperationIdentities.Contains(x.OperationIdentity)); foreach (var disallowedOperation in disallowedOperations) { disallowedIds.Add(disallowedOperation.Id); disallowedIds.UnionWith(message.GetNestedOperations(disallowedOperation.Id).Select(x => x.Id)); } if (disallowedIds.Any()) { operations = operations.Where(x => !disallowedIds.Contains(x.Id)); } return(operations); }