Statistics
| Revision:

gvsig-projects-pool / org.gvsig.report / trunk / org.gvsig.report / org.gvsig.report.lib / org.gvsig.report.lib.impl / src / main / java / org / gvsig / report / lib / impl / reportbuilder / GvsigCustomExpression.java @ 8240

History | View | Annotate | Download (2.11 KB)

1
package org.gvsig.report.lib.impl.reportbuilder;
2

    
3
import ar.com.fdvs.dj.domain.CustomExpression;
4
import java.util.Map;
5
import java.util.Objects;
6
import net.sf.jasperreports.engine.fill.JRFillField;
7
import org.gvsig.expressionevaluator.Expression;
8
import org.gvsig.expressionevaluator.ExpressionUtils;
9
import org.gvsig.expressionevaluator.MutableSymbolTable;
10
import org.gvsig.fmap.dal.expressionevaluator.FeatureSymbolTable;
11
import org.gvsig.report.lib.impl.JRFeatureStoreDataSource;
12
import org.gvsig.tools.dataTypes.DataType;
13
import org.gvsig.tools.util.CachedValue;
14
import org.slf4j.Logger;
15
import org.slf4j.LoggerFactory;
16

    
17
/**
18
 *
19
 * @author osc
20
 */
21
public class GvsigCustomExpression implements CustomExpression {
22

    
23
    private static final Logger LOGGER = LoggerFactory.getLogger(GvsigCustomExpression.class);
24
    
25
    public final Expression expression;
26
    private final DataType dataType;
27
    private final MutableSymbolTable symbolTable;
28

    
29
    GvsigCustomExpression(Expression exp, DataType dataType) {
30
        this.expression = exp;
31
        this.dataType = dataType;
32
        this.symbolTable = ExpressionUtils.createSymbolTable();
33
    }
34

    
35
    @Override
36
    public Object evaluate(Map fields, Map variables, Map parameters) {
37
        Object o = null;
38
        Map<String, Object> fieldsVars = (Map<String, Object>) fields;
39
        for (Map.Entry<String, Object> var : fieldsVars.entrySet()) {
40
            o = var.getValue();
41
            if( o instanceof JRFillField) {
42
                JRFillField value = (JRFillField) o;
43
                symbolTable.setVar(var.getKey(), value.getValue());
44
            }
45
        }
46
        o = parameters.get("REPORT_DATA_SOURCE");
47
        if( o instanceof JRFeatureStoreDataSource ) {
48
            JRFeatureStoreDataSource dataSource = (JRFeatureStoreDataSource) o;
49
            FeatureSymbolTable fst = dataSource.getFeatureSymbolTable();
50
            symbolTable.addSymbolTable(fst);
51
            LOGGER.info(Objects.toString(fst.getFeature()));
52
        }
53
        
54
        return expression.execute(symbolTable);
55
    }
56

    
57
    @Override
58
    public String getClassName() {
59
        return dataType.getDefaultClass().getName();
60
    }
61
}