Revision 46078
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/expressionevaluator/DefaultFeatureExpressionEvaluator.java | ||
---|---|---|
3 | 3 |
import java.util.ArrayList; |
4 | 4 |
import java.util.HashSet; |
5 | 5 |
import java.util.List; |
6 |
import java.util.Objects; |
|
6 | 7 |
import java.util.Set; |
8 |
import org.apache.commons.lang3.StringUtils; |
|
7 | 9 |
import org.gvsig.expressionevaluator.Code; |
10 |
import org.gvsig.expressionevaluator.Code.Callable; |
|
8 | 11 |
import org.gvsig.expressionevaluator.SymbolTable; |
9 | 12 |
import org.gvsig.expressionevaluator.Expression; |
13 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
10 | 14 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
11 | 15 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
12 | 16 |
import org.gvsig.expressionevaluator.Function; |
... | ... | |
37 | 41 |
{ |
38 | 42 |
|
39 | 43 |
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultFeatureExpressionEvaluator.class); |
44 |
private String storeName; |
|
40 | 45 |
|
41 | 46 |
private static class DescriptionAdapter implements Description { |
42 | 47 |
|
... | ... | |
97 | 102 |
} |
98 | 103 |
|
99 | 104 |
public DefaultFeatureExpressionEvaluator(String source) { |
105 |
this(null, source); |
|
106 |
} |
|
107 |
|
|
108 |
public DefaultFeatureExpressionEvaluator(String storeName, String source) { |
|
100 | 109 |
this(); |
101 | 110 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
102 | 111 |
this.expression = manager.createExpression(); |
103 | 112 |
this.expression.setPhrase(source); |
113 |
this.storeName = storeName; |
|
104 | 114 |
} |
105 | 115 |
|
106 | 116 |
public DefaultFeatureExpressionEvaluator(Expression expression) { |
117 |
this(null, expression); |
|
118 |
} |
|
119 |
|
|
120 |
public DefaultFeatureExpressionEvaluator(String storeName, Expression expression) { |
|
107 | 121 |
this(); |
108 | 122 |
this.expression = expression; |
109 |
} |
|
123 |
this.storeName = storeName; |
|
124 |
|
|
125 |
} |
|
110 | 126 |
|
111 | 127 |
@Override |
112 | 128 |
public String getName() { |
... | ... | |
147 | 163 |
this.expression.getCode().accept((Object code) -> { |
148 | 164 |
if (code instanceof Code.Identifier) { |
149 | 165 |
Code.Identifier identifier = (Code.Identifier) code; |
150 |
names.add(identifier.name()); |
|
151 |
} |
|
166 |
if(!StringUtils.equalsIgnoreCase(storeName, identifier.name())) { |
|
167 |
names.add(identifier.name()); |
|
168 |
} |
|
169 |
} else if (code instanceof Code.Callable) { |
|
170 |
Callable callable = (Callable) code; |
|
171 |
if (callable.name().equals(ExpressionBuilder.FUNCTION_GETATTR)) { |
|
172 |
Code p0 = callable.parameters().get(0); |
|
173 |
if (!(p0 instanceof Code.Identifier)) { |
|
174 |
return; |
|
175 |
} |
|
176 |
if (!StringUtils.equalsIgnoreCase(storeName, ((Code.Identifier) p0).name())) { |
|
177 |
return; |
|
178 |
} |
|
179 |
Code p1 = callable.parameters().get(1); |
|
180 |
if (!(p1 instanceof Code.Constant)) { |
|
181 |
return; |
|
182 |
} |
|
183 |
String s = Objects.toString(((Code.Constant)p1).value(), null); |
|
184 |
if (s != null) { |
|
185 |
names.add(s); |
|
186 |
} |
|
187 |
} |
|
188 |
} |
|
152 | 189 |
}); |
153 | 190 |
EvaluatorFieldsInfo info = new EvaluatorFieldsInfo(); |
154 | 191 |
for (String name : names) { |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java | ||
---|---|---|
3005 | 3005 |
|
3006 | 3006 |
@Override |
3007 | 3007 |
public FeatureQuery createFeatureQuery() { |
3008 |
return new DefaultFeatureQuery(); |
|
3008 |
return new DefaultFeatureQuery(this.getName());
|
|
3009 | 3009 |
} |
3010 | 3010 |
|
3011 | 3011 |
@Override |
trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureQuery.java | ||
---|---|---|
115 | 115 |
private FeatureExtraColumns extraColumn = new DefaultFeatureExtraColumns(); |
116 | 116 |
|
117 | 117 |
private MutableSymbolTable symbolTable; |
118 |
private String storeName; |
|
118 | 119 |
|
119 | 120 |
/** |
120 | 121 |
* Creates a FeatureQuery which will load all available Features of a type. |
121 | 122 |
* |
122 | 123 |
*/ |
123 | 124 |
public DefaultFeatureQuery() { |
124 |
super(); |
|
125 |
super(); |
|
126 |
} |
|
127 |
|
|
128 |
public DefaultFeatureQuery(String storeName) { |
|
129 |
this(); |
|
130 |
this.storeName = storeName; |
|
131 |
|
|
125 | 132 |
} |
126 | 133 |
|
127 | 134 |
/** |
... | ... | |
377 | 384 |
this.clearFilter(); |
378 | 385 |
return; |
379 | 386 |
} |
380 |
Evaluator x = new DefaultFeatureExpressionEvaluator(filter); |
|
387 |
Evaluator x = new DefaultFeatureExpressionEvaluator(storeName, filter);
|
|
381 | 388 |
this.setFilter(x); |
382 | 389 |
} |
383 | 390 |
|
... | ... | |
606 | 613 |
state.set("groupByColumns", this.groupByColumns); |
607 | 614 |
state.set("aggregateFunctions", this.aggregateFunctions); |
608 | 615 |
state.set("extraColumn", this.extraColumn); |
616 |
state.set("storeName", this.storeName); |
|
609 | 617 |
|
610 | 618 |
|
611 | 619 |
} |
... | ... | |
654 | 662 |
} |
655 | 663 |
this.limit = state.getLong("limit"); |
656 | 664 |
this.pageSize = state.getLong("pageSize"); |
665 |
this.storeName = state.getString("storeName"); |
|
657 | 666 |
|
658 | 667 |
|
659 | 668 |
this.order = (FeatureQueryOrder) state.get("order"); |
... | ... | |
720 | 729 |
definition.addDynFieldObject("extraColumn") |
721 | 730 |
.setClassOfValue(DefaultFeatureExtraColumns.class); |
722 | 731 |
|
732 |
definition.addDynFieldString("storeName").setMandatory(false); |
|
723 | 733 |
|
724 | 734 |
} |
725 | 735 |
|
... | ... | |
890 | 900 |
LOGGER.debug("Can't clone symbol table",ex); |
891 | 901 |
} |
892 | 902 |
} |
903 |
this.storeName = other.storeName; |
|
893 | 904 |
} |
894 | 905 |
|
895 | 906 |
@Override |
Also available in: Unified diff