Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.sqlite / org.gvsig.sqlite.provider / src / main / java / org / gvsig / sqlite / dal / expressionbuilderformatter / AndAnd.java @ 47606

History | View | Annotate | Download (2.1 KB)

1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.sqlite.dal.expressionbuilderformatter;
7

    
8
import java.text.MessageFormat;
9
import java.util.List;
10
import org.apache.commons.lang3.StringUtils;
11
import org.gvsig.expressionevaluator.ExpressionBuilder;
12
import static org.gvsig.expressionevaluator.ExpressionBuilder.OPERATOR_AND2;
13
import org.gvsig.expressionevaluator.Formatter;
14
import org.gvsig.fmap.dal.SQLBuilder;
15
import static org.gvsig.sqlite.dal.expressionbuilderformatter.ST_Intersects.getBBoxIntersectsFilter;
16

    
17
/**
18
 *
19
 * @author fdiaz
20
 */
21
public class AndAnd  implements Formatter<ExpressionBuilder.Value> {
22
    
23
    private final SQLBuilder sqlbuilder;
24
    private final Formatter<ExpressionBuilder.Value> formatter;
25
    
26
    public AndAnd(SQLBuilder sqlbuilder, Formatter<ExpressionBuilder.Value> formatter) {
27
        this.sqlbuilder = sqlbuilder;
28
        this.formatter = formatter;
29
    }
30
    @Override
31
    public boolean canApply(ExpressionBuilder.Value value) {
32
        if (value instanceof ExpressionBuilder.Function) {
33
            return StringUtils.equalsIgnoreCase(OPERATOR_AND2, ((ExpressionBuilder.Function) value).name());
34
        }
35
        return false;
36
    }
37

    
38
    @Override
39
    public String format(ExpressionBuilder.Value function) {
40
        List<ExpressionBuilder.Value> parameters = ((ExpressionBuilder.Function) function).parameters();
41
        ExpressionBuilder.Value p1 = parameters.get(0);
42
        ExpressionBuilder.Value p2 = parameters.get(1);
43
        String p1s = p1.toString(formatter);
44
        String p2s = p2.toString(formatter);
45

    
46
        String filter = getBBoxIntersectsFilter(formatter, p1, p2);
47
        if (filter == null ) {         
48
            filter = getBBoxIntersectsFilter(formatter, p2, p1);
49
        }
50
        String r;
51
        if( filter == null ) {
52
            r = MessageFormat.format("ST_Intersects(ST_Envelope({0}),ST_Envelope({1}))", p1s, p2s);
53
        } else {
54
            r = MessageFormat.format("({0})", filter);
55
        }
56
        return r;
57
    }
58

    
59
}