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();
            }
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
        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;
            }
        }