Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.impl / src / main / java / org / gvsig / expressionevaluator / impl / function / dataaccess / GetattrFunction.java @ 46517

History | View | Annotate | Download (3.15 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.expressionevaluator.impl.function.dataaccess;
7

    
8
import java.util.Objects;
9
import org.apache.commons.lang3.StringUtils;
10
import org.gvsig.expressionevaluator.Code;
11
import org.gvsig.expressionevaluator.Codes;
12
import org.gvsig.expressionevaluator.ExpressionBuilder;
13
import org.gvsig.fmap.dal.DALLocator;
14
import org.gvsig.fmap.dal.DataManager;
15
import org.gvsig.fmap.dal.SQLBuilder;
16
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
17
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
18
import org.gvsig.fmap.dal.feature.FeatureQuery;
19
import org.gvsig.fmap.dal.feature.FeatureType;
20

    
21
/**
22
 *
23
 * @author fdiaz
24
 */
25
public class GetattrFunction extends org.gvsig.expressionevaluator.impl.function.programming.GetattrFunction {
26

    
27
    @Override
28
    public ExpressionBuilder.Value toValue(ExpressionBuilder builder, Codes args) {
29
        try {
30
            SQLBuilder sqlBuilder = (SQLBuilder) builder.getProperty("SQLBUILDER");
31
            if(sqlBuilder == null){
32
                return super.toValue(builder, args);
33
            }
34
            if(!(args.get(0) instanceof Code.Identifier)){
35
                return super.toValue(builder, args);
36
            }
37
            if(!(args.get(1) instanceof Code.Constant)){
38
                return super.toValue(builder, args);
39
            }
40
            String tableName = ((Code.Identifier)args.get(0)).name();
41
            String columnName = Objects.toString(((Code.Constant)args.get(1)).value(), null);
42
            if(StringUtils.isBlank(tableName) || StringUtils.isBlank(columnName)){
43
                return super.toValue(builder, args);
44
            }
45
            FeatureAttributeDescriptor attr = null;
46
            FeatureQuery query = (FeatureQuery) builder.getProperty("Query");
47
            if(query != null){
48
                attr = query.getExtraColumns().get(columnName);
49
            }
50
            if(attr == null) {
51
                String builderTable = (String) builder.getProperty("Table");
52
                FeatureType featureType = null;
53
                if(StringUtils.equalsIgnoreCase(builderTable, tableName)){
54
                    featureType = (FeatureType) builder.getProperty("FeatureType");
55
                } else {
56
                    DataManager dataManager = DALLocator.getDataManager();
57
                    featureType = dataManager.getStoresRepository().getFeatureType(tableName);
58
                }
59
                if (featureType == null) {
60
                    return super.toValue(builder, args);
61
                }
62
                attr = featureType.getAttributeDescriptor(columnName);
63
                if (attr == null) {
64
                    return super.toValue(builder, args);
65
                }
66
            }
67
            SQLBuilder.TableNameBuilder table = sqlBuilder.createTableNameBuilder();
68
            table.name(tableName);
69
            SQLBuilder.Column column = sqlBuilder.column(table, columnName);
70
            return column;
71
        } catch (Exception ex) {
72
            return super.toValue(builder, args);
73
        }
74
    }
75
    
76
    
77
}