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 / typeconversion / CastFunction.java @ 44198

History | View | Annotate | Download (2.13 KB)

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

    
3
import java.util.Iterator;
4
import org.apache.commons.lang3.Range;
5
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_CAST;
6
import org.gvsig.expressionevaluator.ExpressionRuntimeException;
7
import org.gvsig.expressionevaluator.Interpreter;
8
import org.gvsig.expressionevaluator.spi.AbstractFunction;
9
import org.gvsig.tools.ToolsLocator;
10
import org.gvsig.tools.dataTypes.DataType;
11
import org.gvsig.tools.dataTypes.DataTypes;
12
import org.gvsig.tools.dataTypes.DataTypesManager;
13
import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
14

    
15
public class CastFunction extends AbstractFunction {
16
    
17
    public CastFunction() {
18
        super(GROUP_CONVERSION, FUNCTION_CAST, Range.is(2));
19
    }
20

    
21
    @Override
22
    public boolean allowConstantFolding() {
23
        return true;
24
    }
25
    
26
    @Override
27
    public Object call(Interpreter interpreter, Object[] args) throws Exception {
28
        DataTypesManager manager = ToolsLocator.getDataTypesManager();
29

    
30
        Object valueIn = this.getObject(args, 0);
31
        String typeName = this.getStr(args, 1);
32
        
33
        int type = manager.getType(typeName);
34
        if( type == DataTypes.INVALID ) {
35
            throw new ExpressionRuntimeException("The value of type ("+typeName+") in function CAST is incorrect", getTip());
36
        }
37
        Coercion converter = manager.get(type).getCoercion();
38
        if( converter==null ) {
39
            throw new IllegalArgumentException("Can't convert to the indicated type ("+typeName+").");
40
        }
41
        Object valueOut = converter.coerce(valueIn);
42
        return valueOut;
43
    }
44

    
45
    private String getTip() {
46
        DataTypesManager manager = ToolsLocator.getDataTypesManager();
47
        
48
        StringBuilder builder = new StringBuilder();
49
        Iterator<DataType> it = manager.iterator();
50
        while( it.hasNext() ) {
51
            DataType dataType = it.next();
52
            builder.append("- ");
53
            builder.append(dataType.getName());
54
            builder.append("\n");
55
        }
56
        
57
        return "The valid type names for the function CAST are:\n"+ builder.toString();
58
    }
59
    
60
}