public static FilterSpecPlanCompute Make(FilterSpecPlan plan)
        {
            var hasTopControl = plan.FilterConfirm != null || plan.FilterNegate != null;
            var hasPathControl = false;
            var hasTripletControl = false;
            
            foreach (FilterSpecPlanPath path in plan.Paths) {
                hasPathControl |= path.PathNegate != null;
                hasTripletControl |= path.HasTripletControl;
            }

            if (hasTripletControl) {
                return FilterSpecPlanComputeConditionalTriplets.INSTANCE;
            }

            if (hasPathControl) {
                return FilterSpecPlanComputeConditionalPath.INSTANCE;
            }

            if (hasTopControl) {
                return FilterSpecPlanComputeConditionalTopOnly.INSTANCE;
            }

            return FilterSpecPlanComputeUnconditional.INSTANCE;
        }
        public static FilterSpecActivatable Build(
            EventType eventType,
            object[] objects)
        {
            var triplets = BuildTriplets(eventType, objects);
            var paths    = new FilterSpecPlanPath[] { new FilterSpecPlanPath(triplets) };
            var plan     = new FilterSpecPlan(paths, null, null);

            plan.Initialize();
            return(new FilterSpecActivatable(eventType, "SomeAliasNameForType", plan, null, 1));
        }
Example #3
0
        /// <summary>
        ///     Constructor - validates parameter list against event type, throws exception if invalid
        ///     property names or mismatcing filter operators are found.
        /// </summary>
        /// <param name="eventType">is the event type</param>
        /// <param name="plan">plan is a list of filter parameters, i.e. paths and triplets</param>
        /// <param name="eventTypeName">is the name of the event type</param>
        /// <param name="optionalPropertyEvaluator">optional if evaluating properties returned by filtered events</param>
        /// <param name="filterCallbackId">filter id</param>
        /// <throws>ArgumentException if validation invalid</throws>
        public FilterSpecActivatable(
            EventType eventType,
            string eventTypeName,
            FilterSpecPlan plan,
            PropertyEvaluator optionalPropertyEvaluator,
            int filterCallbackId)
        {
            FilterForEventType = eventType;
            FilterForEventTypeName = eventTypeName;
            Plan = plan;
            OptionalPropertyEvaluator = optionalPropertyEvaluator;
            if (filterCallbackId == -1) {
                throw new ArgumentException("Filter callback id is unassigned");
            }

            FilterCallbackId = filterCallbackId;
        }