public void attach( EventType parentEventType, StatementContext statementContext, ViewFactory optionalParentFactory, List<ViewFactory> parentViewFactories) throws ViewParameterException { eventType = parentEventType; String message = NAME + " requires a numeric size parameter and a list of expressions providing sort keys"; if (viewParameters.size() < 2) { throw new ViewParameterException(message); } ExprNode[] validated = ViewFactorySupport.validate(NAME, parentEventType, statementContext, viewParameters, true); for (int i = 1; i < validated.length; i++) { ViewFactorySupport.assertReturnsNonConstant(NAME, validated[i], i); } ExprEvaluatorContextStatement exprEvaluatorContext = new ExprEvaluatorContextStatement(statementContext); Object sortSize = ViewFactorySupport.evaluateAssertNoProperties(NAME, validated[0], 0, exprEvaluatorContext); if ((sortSize == null) || (!(sortSize instanceof Number))) { throw new ViewParameterException(message); } sortWindowSize = ((Number) sortSize).intValue(); sortCriteriaExpressions = new ExprNode[validated.length - 1]; isDescendingValues = new boolean[sortCriteriaExpressions.length]; for (int i = 1; i < validated.length; i++) { if (validated[i] instanceof ExprOrderedExpr) { isDescendingValues[i - 1] = ((ExprOrderedExpr) validated[i]).isDescending(); sortCriteriaExpressions[i - 1] = validated[i].getChildNodes().get(0); } else { sortCriteriaExpressions[i - 1] = validated[i]; } } }