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 / RelativeIntervalFunction.java @ 44669

History | View | Annotate | Download (2.06 KB)

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

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

    
15
public class RelativeIntervalFunction extends AbstractFunction {
16

    
17
    private final Coercion toInstant;
18

    
19
    public RelativeIntervalFunction() {
20
        super("Date", "RelativeInterval",Range.is(2),
21
            "Returns a relative interval from the arguments",
22
            "RelativeInterval({{date1}}, data2)",
23
            new String[]{
24
                "date1 - An object that represents a moment of time.",
25
                "date2 - An object that represents a moment of time."
26
            },
27
            "RelativeInterval",
28
            false
29
        );
30
        this.toInstant = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.INSTANT);
31
    }
32

    
33
    @Override
34
    public boolean allowConstantFolding() {
35
        return true;
36
    }
37
    
38
    @Override
39
    public Object call(Interpreter interpreter, Object[] args) {
40
            Object arg0 = getObject(args, 0);
41
            Object arg1 = getObject(args, 1);
42
            try {
43
                RelativeInstant instant0 = (RelativeInstant) this.toInstant.coerce(arg0);
44
                RelativeInstant instant1 = (RelativeInstant) this.toInstant.coerce(arg1);
45
                RelativeInterval interval = TimeSupportLocator.getManager().createRelativeInterval(
46
                    instant0,
47
                    instant1
48
                );
49
                return interval;
50
            } catch (CoercionException ex) {
51
                throw new RuntimeException("Can't create an interval from '"+Objects.toString(arg0, "")+":"+Objects.toString(arg1, "")+"'.", ex);
52
            }
53
        }        
54
    }
55
    
56

    
57