private ForIteration createQuantifiedExpressionIterationContext(EvaluationContext ctx, IterationContextCompiled icn) { ForIteration fi = null; String name = (String) icn.getName().apply(ctx); Object result = icn.getExpression().apply(ctx); Object rangeEnd = icn.getRangeEndExpr().apply(ctx); if (rangeEnd == null) { Iterable values = result instanceof Iterable ? (Iterable) result : Collections.singletonList(result); fi = new ForIteration(name, values); } else { valueMustBeANumber(ctx, result); BigDecimal start = (BigDecimal) result; valueMustBeANumber(ctx, rangeEnd); BigDecimal end = (BigDecimal) rangeEnd; fi = new ForIteration(name, start, end); } return fi; }
private ForIteration[] initializeContexts(EvaluationContext ctx, List<IterationContextCompiled> iterationContexts) { ForIteration[] ictx = new ForIteration[iterationContexts.size()]; int i = 0; for (IterationContextCompiled icn : iterationContexts) { ictx[i] = createQuantifiedExpressionIterationContext(ctx, icn); if (i < iterationContexts.size() - 1 && ictx[i].hasNextValue()) { ForExpressionNode.setValueIntoContext(ctx, ictx[i]); } i++; } return ictx; }
private ForIteration createQuantifiedExpressionIterationContext(EvaluationContext ctx, IterationContextNode icn) { ForIteration fi = null; String name = icn.evaluateName( ctx ); Object result = icn.evaluate( ctx ); Object rangeEnd = icn.evaluateRangeEnd(ctx); if (rangeEnd == null) { Iterable values = result instanceof Iterable ? (Iterable) result : Collections.singletonList(result); fi = new ForIteration(name, values); } else { valueMustBeANumber(ctx, result); BigDecimal start = (BigDecimal) result; valueMustBeANumber(ctx, rangeEnd); BigDecimal end = (BigDecimal) rangeEnd; fi = new ForIteration(name, start, end); } return fi; }
public static void setValueIntoContext(EvaluationContext ctx, ForIteration forIteration) { ctx.setValue( forIteration.getName(), forIteration.getNextValue() ); }
public static boolean nextIteration(EvaluationContext ctx, ForIteration[] ictx) { int i = ictx.length-1; while ( i >= 0 && i < ictx.length ) { if ( ictx[i].hasNextValue() ) { setValueIntoContext( ctx, ictx[i] ); i++; } else { i--; } } return i >= 0; }
private ForIteration[] initializeContexts(EvaluationContext ctx, List<IterationContextNode> iterationContexts) { ForIteration[] ictx = new ForIteration[iterationContexts.size()]; int i = 0; for ( IterationContextNode icn : iterationContexts ) { ictx[i] = createQuantifiedExpressionIterationContext( ctx, icn ); if( i < iterationContexts.size()-1 && ictx[i].hasNextValue() ) { setValueIntoContext( ctx, ictx[i] ); } i++; } return ictx; }