Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.lib / org.gvsig.expressionevaluator.lib.impl / src / main / java / org / gvsig / expressionevaluator / impl / function / programming / ForEachFunction.java @ 44738

History | View | Annotate | Download (2.1 KB)

1
package org.gvsig.expressionevaluator.impl.function.programming;
2

    
3
import org.apache.commons.lang3.Range;
4
import org.gvsig.expressionevaluator.Codes;
5
import org.gvsig.expressionevaluator.Function;
6
import org.gvsig.expressionevaluator.Interpreter;
7
import org.gvsig.expressionevaluator.spi.AbstractFunction;
8
import org.gvsig.expressionevaluator.ExpressionRuntimeException;
9
import org.gvsig.expressionevaluator.MutableSymbolTable;
10

    
11
public class ForEachFunction extends AbstractFunction {
12
    
13
    public static final String NAME = "FOREACH";
14

    
15
    public ForEachFunction() {
16
        super(Function.GROUP_PROGRAMMING, 
17
                NAME, 
18
                Range.is(3),
19
                "The foreach() function evaluate body for every element of the iterable.",
20
                NAME+"( varname, iterable, body )",
21
                null,
22
                "Object",
23
                false
24
        );
25
    }
26

    
27
    @Override
28
    public boolean isHidden() {
29
      return true;
30
    }
31
    
32
    @Override
33
    public boolean useArgumentsInsteadObjects() {
34
        return true;
35
    }
36

    
37
    @Override
38
    public boolean allowConstantFolding() {
39
        return false;
40
    }
41
    
42
    @Override
43
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
44
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
45
    }
46
    
47
    @Override
48
    public Object call(Interpreter interpreter, Codes args) throws Exception {
49
        if( !(interpreter.getSymbolTable() instanceof MutableSymbolTable) ) {
50
            throw new ExpressionRuntimeException("The use of forech loops require a mutable symbol table.");
51
        }
52
        MutableSymbolTable symbolTable = (MutableSymbolTable) interpreter.getSymbolTable();
53
        
54
        Object body = null;
55
        String varname = getObject(interpreter, args, 0).toString();
56
        
57
        Iterable iterable = (Iterable) getObject(interpreter, args, 1);
58
        for (Object value : iterable) {
59
            symbolTable.setVar(varname, value);
60
            body = getObject(interpreter, args, 2);
61
        }
62
        return body;
63
    }
64
    
65
}