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);
        }
示例#2
0
        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);
        }