Пример #1
0
        public EvalFilterNode(
            PatternAgentInstanceContext context,
            EvalFilterFactoryNode factoryNode)
            : base(context)
        {
            this.factoryNode = factoryNode;

            FilterValueSetParam[][] addendum = null;
            if (context.AgentInstanceContext.AgentInstanceFilterProxy != null) {
                addendum = context.AgentInstanceContext.AgentInstanceFilterProxy.GetAddendumFilters(
                    factoryNode.FilterSpec,
                    context.AgentInstanceContext);
            }

            var contextPathAddendum = context.GetFilterAddendumForContextPath(factoryNode.FilterSpec);
            if (contextPathAddendum != null) {
                if (addendum == null) {
                    addendum = contextPathAddendum;
                }
                else {
                    addendum = FilterAddendumUtil.MultiplyAddendum(addendum, contextPathAddendum);
                }
            }

            AddendumFilters = addendum;
        }
Пример #2
0
        private static FilterValueSetParam[][] ComputeAddendum(
            object[] parentPartitionKeys,
            FilterSpecActivatable filterCallback,
            bool forStatement,
            ContextControllerStatementDesc optionalStatementDesc,
            ContextControllerFactory[] controllerFactories,
            IDictionary<int, ContextControllerStatementDesc> statements,
            AgentInstanceContext agentInstanceContextCreate)
        {
            var result = new FilterValueSetParam[0][];
            for (var i = 0; i < parentPartitionKeys.Length; i++) {
                var addendumForController = controllerFactories[i]
                    .PopulateFilterAddendum(
                        filterCallback,
                        forStatement,
                        i + 1,
                        parentPartitionKeys[i],
                        optionalStatementDesc,
                        statements,
                        agentInstanceContextCreate);
                result = FilterAddendumUtil.MultiplyAddendum(result, addendumForController);
            }

            return result;
        }