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 / GetattrFunction.java @ 44366

History | View | Annotate | Download (1.42 KB)

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

    
3
import java.lang.reflect.Field;
4
import org.apache.commons.lang3.Range;
5
import org.gvsig.expressionevaluator.Function;
6
import org.gvsig.expressionevaluator.Interpreter;
7
import org.gvsig.expressionevaluator.spi.AbstractFunction;
8
import org.gvsig.tools.dynobject.DynObject;
9

    
10
public class GetattrFunction extends AbstractFunction {
11

    
12
    public static final String NAME = "GETATTR";
13

    
14
    public GetattrFunction() {
15
        super(Function.GROUP_PROGRAMMING, NAME, Range.is(2));
16
    }
17
    
18
    @Override
19
    public boolean allowConstantFolding() {
20
        return false;
21
    }
22
    
23
    @Override
24
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
25
        Object obj = getObject(args, 0);
26
        String attrname = getStr(args,1);
27
        if( attrname == null ) {
28
            throw new NullPointerException("A attribute name was expected and a null was received");
29
        }
30
        if( obj==null ) {
31
            throw new NullPointerException("An object pointer was expected to access attribute "+attrname+" and a null was received");
32
        }
33
        Object value;
34
        if( obj instanceof DynObject ) {
35
            value = ((DynObject) obj).getDynValue(attrname);
36
        } else {
37
            Class<?> theClass = obj.getClass();
38
            Field field = theClass.getField(attrname);
39
            value = field.get(obj);
40
        }
41
        return value;
42
    }
43
    
44
}