public void Attach(EventType parentEventType, StatementContext statementContext, ViewFactory optionalParentFactory, IList <ViewFactory> parentViewFactories) { _parentEventType = parentEventType; var validatedNodes = ViewFactorySupport.Validate(_viewFactoryContext.ViewName, parentEventType, _viewFactoryContext.StatementContext, _viewParameters, true); _viewParameterArr = new Object[validatedNodes.Length]; var evaluatorContextStmt = new ExprEvaluatorContextStatement(_viewFactoryContext.StatementContext, false); for (var i = 0; i < validatedNodes.Length; i++) { try { _viewParameterArr[i] = ViewFactorySupport.EvaluateAssertNoProperties(_viewFactoryContext.ViewName, validatedNodes[i], i, evaluatorContextStmt); } catch (Exception) { // expected } } _viewParameterExp = ViewFactorySupport.Validate(_viewFactoryContext.ViewName, parentEventType, _viewFactoryContext.StatementContext, _viewParameters, true); // initialize try { _eventBeanFactory = EventAdapterServiceHelper.GetFactoryForType(parentEventType, statementContext.EventAdapterService); _virtualDataWindowFactory.Initialize(new VirtualDataWindowFactoryContext(parentEventType, _viewParameterArr, _viewParameterExp, _eventBeanFactory, _namedWindowName, _viewFactoryContext, _customConfiguration)); } catch (Exception ex) { throw new ViewParameterException("Validation exception initializing virtual data window '" + _namedWindowName + "': " + ex.Message, ex); } }
public override void SetViewParameters(ViewFactoryContext viewFactoryContext, IList <ExprNode> expressionParameters) { if (expressionParameters.Count != 1 && expressionParameters.Count != 2) { var errorMessage = ViewName + " view requires a single expression as a parameter, or an expression and bool flag"; throw new ViewParameterException(errorMessage); } ExpiryExpression = expressionParameters[0]; if (expressionParameters.Count > 1) { var result = ViewFactorySupport.EvaluateAssertNoProperties(ViewName, expressionParameters[1], 1, new ExprEvaluatorContextStatement(viewFactoryContext.StatementContext, false)); _includeTriggeringEvent = result.AsBoolean(); } }
public void Attach(EventType parentEventType, StatementContext statementContext, ViewFactory optionalParentFactory, IList <ViewFactory> parentViewFactories) { EventType = parentEventType; var message = NAME + " window requires a numeric size parameter and a list of expressions providing sort keys"; if (_viewParameters.Count < 2) { throw new ViewParameterException(message); } var validated = ViewFactorySupport.Validate(NAME + " window", parentEventType, statementContext, _viewParameters, true); for (var i = 1; i < validated.Length; i++) { ViewFactorySupport.AssertReturnsNonConstant(NAME + " window", validated[i], i); } var exprEvaluatorContext = new ExprEvaluatorContextStatement(statementContext, false); var sortSize = ViewFactorySupport.EvaluateAssertNoProperties(NAME + " window", validated[0], 0, exprEvaluatorContext); if ((sortSize == null) || (!sortSize.IsNumber())) { throw new ViewParameterException(message); } SortWindowSize = sortSize.AsInt(); sortCriteriaExpressions = new ExprNode[validated.Length - 1]; IsDescendingValues = new bool[sortCriteriaExpressions.Length]; for (var i = 1; i < validated.Length; i++) { if (validated[i] is ExprOrderedExpr) { IsDescendingValues[i - 1] = ((ExprOrderedExpr)validated[i]).IsDescending; sortCriteriaExpressions[i - 1] = validated[i].ChildNodes[0]; } else { sortCriteriaExpressions[i - 1] = validated[i]; } } SortCriteriaEvaluators = ExprNodeUtility.GetEvaluators(sortCriteriaExpressions); if (statementContext.ConfigSnapshot != null) { IsUseCollatorSort = statementContext.ConfigSnapshot.EngineDefaults.LanguageConfig.IsSortUsingCollator; } }
public void Attach(EventType parentEventType, StatementContext statementContext, ViewFactory optionalParentFactory, IList <ViewFactory> parentViewFactories) { EventType = parentEventType; var message = NAME + " view requires a list of expressions providing unique keys, a numeric size parameter and a list of expressions providing sort keys"; if (_viewParameters.Count < 3) { throw new ViewParameterException(message); } // validate var validated = ViewFactorySupport.Validate(NAME, parentEventType, statementContext, _viewParameters, true); // find size-parameter index var indexNumericSize = -1; for (var i = 0; i < validated.Length; i++) { if (validated[i] is ExprConstantNode) { indexNumericSize = i; break; } } if (indexNumericSize == -1) { throw new ViewParameterException("Failed to find constant value for the numeric size parameter"); } if (indexNumericSize == 0) { throw new ViewParameterException("Failed to find unique value expressions that are expected to occur before the numeric size parameter"); } if (indexNumericSize == validated.Length - 1) { throw new ViewParameterException("Failed to find sort key expressions after the numeric size parameter"); } // validate non-constant for unique-keys and sort-keys for (var i = 0; i < indexNumericSize; i++) { ViewFactorySupport.AssertReturnsNonConstant(NAME, validated[i], i); } for (var i = indexNumericSize + 1; i < validated.Length; i++) { ViewFactorySupport.AssertReturnsNonConstant(NAME, validated[i], i); } // get sort size var exprEvaluatorContext = new ExprEvaluatorContextStatement(statementContext, false); var sortSize = ViewFactorySupport.EvaluateAssertNoProperties(NAME, validated[indexNumericSize], indexNumericSize, exprEvaluatorContext); if ((sortSize == null) || (!sortSize.IsNumber())) { throw new ViewParameterException(message); } SortWindowSize = sortSize.AsInt(); // compile unique expressions uniqueCriteriaExpressions = new ExprNode[indexNumericSize]; Array.Copy(validated, 0, uniqueCriteriaExpressions, 0, indexNumericSize); // compile sort expressions sortCriteriaExpressions = new ExprNode[validated.Length - indexNumericSize - 1]; IsDescendingValues = new bool[sortCriteriaExpressions.Length]; var count = 0; for (var i = indexNumericSize + 1; i < validated.Length; i++) { if (validated[i] is ExprOrderedExpr) { IsDescendingValues[count] = ((ExprOrderedExpr)validated[i]).IsDescending; sortCriteriaExpressions[count] = validated[i].ChildNodes[0]; } else { sortCriteriaExpressions[count] = validated[i]; } count++; } UniqueEvals = ExprNodeUtility.GetEvaluators(uniqueCriteriaExpressions); SortEvals = ExprNodeUtility.GetEvaluators(sortCriteriaExpressions); if (statementContext.ConfigSnapshot != null) { IsUseCollatorSort = statementContext.ConfigSnapshot.EngineDefaults.LanguageConfig.IsSortUsingCollator; } }