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 @ 47787
History | View | Annotate | Download (3.83 KB)
1 | 46517 | fdiaz | /*
|
---|---|---|---|
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 | 47168 | fdiaz | import java.util.function.Function; |
10 | 46517 | fdiaz | import org.apache.commons.lang3.StringUtils; |
11 | import org.gvsig.expressionevaluator.Code; |
||
12 | import org.gvsig.expressionevaluator.Codes; |
||
13 | import org.gvsig.expressionevaluator.ExpressionBuilder; |
||
14 | 47168 | fdiaz | import static org.gvsig.expressionevaluator.impl.function.dataaccess.SelectFunction.PROP_FEATURETYPESUPPLIER; |
15 | 46517 | fdiaz | import org.gvsig.fmap.dal.DALLocator; |
16 | import org.gvsig.fmap.dal.DataManager; |
||
17 | import org.gvsig.fmap.dal.SQLBuilder; |
||
18 | 46518 | fdiaz | import static org.gvsig.fmap.dal.SQLBuilder.PROP_SQLBUILDER; |
19 | 46517 | fdiaz | import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor; |
20 | import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
||
21 | import org.gvsig.fmap.dal.feature.FeatureQuery; |
||
22 | import org.gvsig.fmap.dal.feature.FeatureType; |
||
23 | |||
24 | /**
|
||
25 | *
|
||
26 | * @author fdiaz
|
||
27 | */
|
||
28 | public class GetattrFunction extends org.gvsig.expressionevaluator.impl.function.programming.GetattrFunction { |
||
29 | |||
30 | @Override
|
||
31 | public ExpressionBuilder.Value toValue(ExpressionBuilder builder, Codes args) {
|
||
32 | try {
|
||
33 | 46518 | fdiaz | SQLBuilder sqlBuilder = (SQLBuilder) builder.getProperty(PROP_SQLBUILDER); |
34 | 46517 | fdiaz | if(sqlBuilder == null){ |
35 | return super.toValue(builder, args); |
||
36 | } |
||
37 | if(!(args.get(0) instanceof Code.Identifier)){ |
||
38 | return super.toValue(builder, args); |
||
39 | } |
||
40 | if(!(args.get(1) instanceof Code.Constant)){ |
||
41 | return super.toValue(builder, args); |
||
42 | } |
||
43 | 47168 | fdiaz | |
44 | Function<String, FeatureType> featureTypeSupplier = (Function<String, FeatureType>) builder.getProperty(PROP_FEATURETYPESUPPLIER); |
||
45 | if (featureTypeSupplier == null) { |
||
46 | featureTypeSupplier = (String tableName) -> {
|
||
47 | DataManager dataManager = DALLocator.getDataManager(); |
||
48 | FeatureType featureType = dataManager.getStoresRepository().getFeatureType(tableName); |
||
49 | return featureType;
|
||
50 | }; |
||
51 | } |
||
52 | |||
53 | 46517 | fdiaz | String tableName = ((Code.Identifier)args.get(0)).name(); |
54 | String columnName = Objects.toString(((Code.Constant)args.get(1)).value(), null); |
||
55 | if(StringUtils.isBlank(tableName) || StringUtils.isBlank(columnName)){
|
||
56 | return super.toValue(builder, args); |
||
57 | } |
||
58 | FeatureAttributeDescriptor attr = null;
|
||
59 | 46518 | fdiaz | FeatureQuery query = (FeatureQuery) builder.getProperty(SQLBuilder.PROP_QUERY); |
60 | 46517 | fdiaz | if(query != null){ |
61 | attr = query.getExtraColumns().get(columnName); |
||
62 | } |
||
63 | if(attr == null) { |
||
64 | 46518 | fdiaz | String builderTableName = (String) builder.getProperty(SQLBuilder.PROP_TABLENAME); |
65 | 46517 | fdiaz | FeatureType featureType = null;
|
66 | 46518 | fdiaz | if (StringUtils.equalsIgnoreCase(builderTableName, tableName)) {
|
67 | featureType = (FeatureType) builder.getProperty(SQLBuilder.PROP_FEATURE_TYPE); |
||
68 | 46517 | fdiaz | } else {
|
69 | 47168 | fdiaz | featureType = featureTypeSupplier.apply(tableName); |
70 | 46517 | fdiaz | } |
71 | if (featureType == null) { |
||
72 | return super.toValue(builder, args); |
||
73 | } |
||
74 | attr = featureType.getAttributeDescriptor(columnName); |
||
75 | if (attr == null) { |
||
76 | return super.toValue(builder, args); |
||
77 | } |
||
78 | } |
||
79 | SQLBuilder.TableNameBuilder table = sqlBuilder.createTableNameBuilder(); |
||
80 | table.name(tableName); |
||
81 | SQLBuilder.Column column = sqlBuilder.column(table, columnName); |
||
82 | return column;
|
||
83 | } catch (Exception ex) { |
||
84 | return super.toValue(builder, args); |
||
85 | } |
||
86 | } |
||
87 | |||
88 | |||
89 | } |