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)); }
/// <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; }