Exemplo n.º 1
0
        private Filter Convert(Ctrl.FilterGroup group)
        {
            FilterGroup newGroup;

            if (group.Operatror == Ctrl.FilterGroupOperatorEnum.And)
            {
                newGroup = new AndFilterGroup();
            }
            else
            {
                newGroup = new OrFilterGroup();
            }

            foreach (var filter in group.Filters)
            {
                newGroup.FilterItems.Add(ConvertToProviderPluginFilter(filter));
            }

            return(newGroup);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Creates a default subscription filter for a send port.
        /// </summary>
        /// <param name="targetApplication">The application in the target.</param>
        /// <param name="sendPort">The send port containing the filter to replicate.</param>
        /// <returns>A subscription filter.</returns>
        private SubscriptionFilter CreateSubscriptionFilter(Application targetApplication, SendPort sendPort)
        {
            _logger.LogDebug(TraceMessages.CreatingSendPortSubscription, RuleName, sendPort.Name);

            // Create an overall OR filter group so that if any sub-group matches a condition
            var targetFilterGroup = new OrFilterGroup();

            // Add default
            string defaultTargetFilterExpression;

            if (sendPort.IsStatic)
            {
                defaultTargetFilterExpression = $"{ModelConstants.BizTalkSpTransportId} = '{targetApplication.Name.FormatKey()}.{sendPort.Name.FormatKey()}.{sendPort.PrimaryTransport.TransportType.Name}'";
            }
            else
            {
                // It's a dynamic port, so won't have a primary transport
                defaultTargetFilterExpression = $"{ModelConstants.BizTalkSpTransportId} = '{targetApplication.Name.FormatKey()}.{sendPort.Name.FormatKey()}'";
            }

            targetFilterGroup.Groups.Add(new AndFilterGroup()
            {
                Filters = { new Filter()
                            {
                                FilterExpression = defaultTargetFilterExpression
                            } }
            });

            // Loop around the filter groups, converting each one to an AND filter group with a list of filter expressions
            foreach (var sendPortFilterGroup in sendPort.FilterExpression.Group)
            {
                var targetFilterSubGroup = new AndFilterGroup();
                foreach (var statement in sendPortFilterGroup.Statement)
                {
                    Filter filter             = null;
                    var    expressionProperty = MapSubscriptionFilterProperty(statement.Property);

                    switch (statement.Operator)
                    {
                    // Equals
                    case 0:

                        filter = new Filter()
                        {
                            FilterExpression = $"{expressionProperty} = '{statement.Value}'"
                        };
                        break;

                    // LessThan
                    case 1:

                        filter = new Filter()
                        {
                            FilterExpression = $"{expressionProperty} < '{statement.Value}'"
                        };
                        break;

                    // LessThanEqualTo
                    case 2:

                        filter = new Filter()
                        {
                            FilterExpression = $"{expressionProperty} <= '{statement.Value}'"
                        };
                        break;

                    // GreaterThan
                    case 3:

                        filter = new Filter()
                        {
                            FilterExpression = $"{expressionProperty} > '{statement.Value}'"
                        };
                        break;

                    // GreaterThanEqualTo
                    case 4:

                        filter = new Filter()
                        {
                            FilterExpression = $"{expressionProperty} >= '{statement.Value}'"
                        };
                        break;

                    // NotEqual
                    case 5:

                        filter = new Filter()
                        {
                            FilterExpression = $"{expressionProperty} != '{statement.Value}'"
                        };
                        break;

                    // Exists
                    case 6:

                        filter = new Filter()
                        {
                            FilterExpression = $"EXISTS ( {expressionProperty} )"
                        };
                        break;

                    default:

                        _logger.LogError(ErrorMessages.SubscriptionFilterOperatorNotSupported, statement.Operator);
                        Context.Errors.Add(new ErrorMessage(string.Format(CultureInfo.CurrentCulture, ErrorMessages.SubscriptionFilterOperatorNotSupported, statement.Operator)));

                        continue;
                    }

                    targetFilterSubGroup.Filters.Add(filter);

                    _logger.LogTrace(TraceMessages.CreatedSubscriptionFilterStatement, RuleName, filter.FilterExpression);
                }

                _logger.LogTrace(TraceMessages.CreatedSubscriptionFilterSubGroup, RuleName, targetFilterSubGroup.Operation, targetFilterSubGroup.Filters.Count);

                // Add to filter group
                targetFilterGroup.Groups.Add(targetFilterSubGroup);
            }

            _logger.LogTrace(TraceMessages.CreatedSubscriptionFilterGroupForSendPort, RuleName, targetFilterGroup.Operation, sendPort.Name);

            // Create filter and return
            var subscriptionFilter = new SubscriptionFilter(targetFilterGroup);

            return(subscriptionFilter);
        }