Ejemplo n.º 1
0
  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];
      }
    }
  }