Revision 45739 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/DefaultDataManager.java
DefaultDataManager.java | ||
---|---|---|
22 | 22 |
import org.gvsig.expressionevaluator.Expression; |
23 | 23 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
24 | 24 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
25 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
|
25 | 26 |
import org.gvsig.expressionevaluator.MutableSymbolTable; |
26 | 27 |
import org.gvsig.expressionevaluator.impl.DefaultDALExpressionBuilder; |
28 |
import org.gvsig.expressionevaluator.impl.DefaultFeatureRuleExpression; |
|
27 | 29 |
import org.gvsig.expressionevaluator.impl.symboltable.FeatureSymbolTableImpl; |
28 | 30 |
import org.gvsig.fmap.dal.BaseStoresRepository; |
29 | 31 |
import org.gvsig.fmap.dal.DALLocator; |
... | ... | |
62 | 64 |
import org.gvsig.fmap.dal.feature.Feature; |
63 | 65 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
64 | 66 |
import org.gvsig.fmap.dal.feature.FeatureQuery; |
67 |
import org.gvsig.fmap.dal.feature.FeatureRuleExpression; |
|
65 | 68 |
import org.gvsig.fmap.dal.feature.FeatureSet; |
66 | 69 |
import org.gvsig.fmap.dal.feature.FeatureSet.DisposableFeatureSetIterable; |
67 | 70 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
... | ... | |
99 | 102 |
import org.gvsig.json.Json; |
100 | 103 |
import org.gvsig.tools.ToolsLocator; |
101 | 104 |
import org.gvsig.tools.dataTypes.DataType; |
105 |
import org.gvsig.tools.dataTypes.DataTypeUtils; |
|
102 | 106 |
import org.gvsig.tools.dataTypes.DataTypesManager; |
103 | 107 |
import org.gvsig.tools.dispose.DisposeUtils; |
104 | 108 |
import org.gvsig.tools.dynobject.DynObject; |
... | ... | |
1138 | 1142 |
} |
1139 | 1143 |
|
1140 | 1144 |
@Override |
1145 |
public FeatureSymbolTable createFeatureSymbolTable(String name) { |
|
1146 |
FeatureSymbolTable symbolTable = new FeatureSymbolTableImpl(name); |
|
1147 |
return symbolTable; |
|
1148 |
} |
|
1149 |
|
|
1150 |
@Override |
|
1141 | 1151 |
public FeatureAttributeEmulatorExpression createFeatureAttributeEmulatorExpression(FeatureType type, Expression expression) { |
1142 | 1152 |
FeatureAttributeEmulatorExpression emulator = new DefaultFeatureAttributeEmulatorExpression(type, expression); |
1143 | 1153 |
return emulator; |
... | ... | |
1330 | 1340 |
} |
1331 | 1341 |
|
1332 | 1342 |
@Override |
1333 |
public DynObjectValueItem[] getAvailableValues(FeatureStore myStore, FeatureAttributeDescriptor descriptor) { |
|
1343 |
public DynObjectValueItem[] getAvailableValues(DynObject contextValues, FeatureStore myStore, FeatureAttributeDescriptor descriptor) {
|
|
1334 | 1344 |
String keyName = myStore.getFullName() + ":columnName=" + descriptor.getName(); |
1335 | 1345 |
if( this.availableValues==null ) { |
1336 | 1346 |
this.availableValues = new HashMap<>(); |
... | ... | |
1359 | 1369 |
); |
1360 | 1370 |
Expression labelExpression = foreingKey.getLabelExpression(null); |
1361 | 1371 |
String codeName = foreingKey.getCodeName(); |
1362 |
FeatureSymbolTable featureSymbolTable = this.createFeatureSymbolTable(); |
|
1372 |
FeatureSymbolTable featureSymbolTable = this.createFeatureSymbolTable("feature");
|
|
1363 | 1373 |
MutableSymbolTable symbolTable = featureSymbolTable.createParent(); |
1364 | 1374 |
|
1365 |
int count = (int) foreingStore.getFeatureCount(); |
|
1366 |
values = new DynObjectValueItem[Math.min(count, MAX_AVAILABLE_VALUES)]; |
|
1375 |
Expression filter = descriptor.getAvailableValuesFilter(); |
|
1376 |
if( filter != null ) { |
|
1377 |
MutableSymbolTable filterFeatureSymbolTable = ExpressionUtils.createSymbolTable( |
|
1378 |
"filter", contextValues |
|
1379 |
); |
|
1380 |
featureSymbolTable.addSymbolTable(filterFeatureSymbolTable); |
|
1381 |
} |
|
1382 |
|
|
1383 |
List<DynObjectValueItem> values_list = new ArrayList<>(); |
|
1367 | 1384 |
int n = 0; |
1368 | 1385 |
for (Feature feature : set = foreingStore.getFeatureSet().iterable()) { |
1369 |
Object code = feature.get(codeName);
|
|
1370 |
Object value;
|
|
1386 |
Object value = feature.get(codeName);
|
|
1387 |
Object label;
|
|
1371 | 1388 |
if (labelExpression == null) { |
1372 |
value = code;
|
|
1389 |
label = value;
|
|
1373 | 1390 |
} else { |
1374 | 1391 |
featureSymbolTable.setFeature(feature); |
1375 |
value = labelExpression.execute(symbolTable);
|
|
1392 |
label = labelExpression.execute(symbolTable);
|
|
1376 | 1393 |
} |
1377 |
values[n++] = new DynObjectValueItem(code, Objects.toString(value, Objects.toString(code, "##ERROR##"))); |
|
1394 |
|
|
1395 |
if( filter != null ) { |
|
1396 |
symbolTable.setVar("$value", value); |
|
1397 |
symbolTable.setVar("$label", label); |
|
1398 |
featureSymbolTable.setFeature(feature); |
|
1399 |
Object include = filter.execute(featureSymbolTable); |
|
1400 |
if( DataTypeUtils.isFalse(include, false) ) { |
|
1401 |
continue; |
|
1402 |
} |
|
1403 |
} |
|
1404 |
|
|
1405 |
values_list.add(new DynObjectValueItem(value, Objects.toString(label, Objects.toString(value, "##ERROR##")))); |
|
1378 | 1406 |
if( n>=MAX_AVAILABLE_VALUES ) { |
1379 | 1407 |
break; |
1380 | 1408 |
} |
1381 | 1409 |
} |
1382 |
this.availableValues.put(keyName, values); |
|
1410 |
values = values_list.toArray(new DynObjectValueItem[values_list.size()]); |
|
1411 |
if( filter==null ) { |
|
1412 |
this.availableValues.put(keyName, values); |
|
1413 |
} |
|
1383 | 1414 |
return values; |
1384 | 1415 |
} catch (Exception ex) { |
1385 | 1416 |
LOGGER.warn("Can't get available values for field '"+myStore.getName()+"."+descriptor.getName()+"' from table '" + foreingKey.getTableName() + "'.", ex); |
... | ... | |
1496 | 1527 |
} |
1497 | 1528 |
return features; |
1498 | 1529 |
} |
1530 |
|
|
1531 |
@Override |
|
1532 |
public FeatureRuleExpression createFeatureRuleExpression() { |
|
1533 |
FeatureRuleExpression rule = new DefaultFeatureRuleExpression(); |
|
1534 |
return rule; |
|
1535 |
} |
|
1536 |
|
|
1499 | 1537 |
} |
Also available in: Unified diff