Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.expressionevaluator / org.gvsig.expressionevaluator.time / org.gvsig.expressionevaluator.time.lib / org.gvsig.expressionevaluator.time.lib.impl / src / main / java / org / gvsig / expressionevaluator / impl / function / date / RelativeInstantFunction.java @ 44669

History | View | Annotate | Download (2.28 KB)

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

    
3
import java.text.ParseException;
4
import java.text.SimpleDateFormat;
5
import java.util.Date;
6
import java.util.Objects;
7
import org.apache.commons.lang3.Range;
8
import org.gvsig.expressionevaluator.Interpreter;
9
import org.gvsig.expressionevaluator.spi.AbstractFunction;
10
import org.gvsig.timesupport.DataTypes;
11
import org.gvsig.timesupport.RelativeInstant;
12
import org.gvsig.timesupport.TimeSupportLocator;
13
import org.gvsig.tools.ToolsLocator;
14
import org.gvsig.tools.dataTypes.Coercion;
15
import org.gvsig.tools.dataTypes.CoercionException;
16

    
17
public class RelativeInstantFunction extends AbstractFunction {
18

    
19
    private final Coercion toInstant;
20

    
21
    public RelativeInstantFunction() {
22
        super("Date", "RelativeInstant",Range.is(1),
23
            "Returns a relative instant from the arguments",
24
            "RelativeInstant({{date}}, format)",
25
            new String[]{
26
                "date - a string with a date",
27
                "format - Optional. Format to use to parse the date"
28
            },
29
            "RelativeInstant",
30
            false
31
        );
32
        this.toInstant = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.INSTANT);
33
    }
34

    
35
    @Override
36
    public boolean allowConstantFolding() {
37
        return true;
38
    }
39
    
40
    @Override
41
    public Object call(Interpreter interpreter, Object[] args) {
42
        if( args.length==1 ) {
43
            Object arg0 = getObject(args, 0);
44
            try {
45
                Object instant = this.toInstant.coerce(arg0);
46
                return instant;
47
            } catch (CoercionException ex) {
48
                throw new RuntimeException("Can't convert value '"+Objects.toString(arg0, "")+"' to instant.", ex);
49
            }
50
        }
51
        String format = getStr(args, 1);
52
        String date = getStr(args, 0);
53
        SimpleDateFormat df = new SimpleDateFormat();
54
        if( format != null ) {
55
            df.applyPattern(format);
56
        }
57
        try {
58
            Date x = df.parse(date);
59
            RelativeInstant instant = TimeSupportLocator.getManager().createRelativeInstant(x);
60
            return instant;
61
        } catch (ParseException ex) {
62
            throw new RuntimeException("Can't parse date value '"+date+"' with format '"+format==null?"":format+"'", ex);
63
        }
64
        
65
    }
66
    
67

    
68
}