Revision 45772 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 | ||
---|---|---|
139 | 139 |
public static final String FILESYSTEM_EXPLORER_NAME = "FilesystemExplorer"; |
140 | 140 |
|
141 | 141 |
public static final long DEFAULT_MAX_SIZE_FOR_SMALL_FEATURE_SELECTION = 2000000000; |
142 |
|
|
142 |
|
|
143 | 143 |
private class Registers { |
144 | 144 |
|
145 | 145 |
private final Register store; |
... | ... | |
1332 | 1332 |
} |
1333 | 1333 |
} |
1334 | 1334 |
|
1335 |
private Map<String,DynObjectValueItem[]> availableValues = null; |
|
1336 |
|
|
1337 | 1335 |
@Override |
1338 | 1336 |
public void clearAvailableValuesCache() { |
1339 |
this.availableValues = null;
|
|
1337 |
//TODO
|
|
1340 | 1338 |
} |
1341 |
|
|
1339 |
|
|
1342 | 1340 |
@Override |
1343 |
public DynObjectValueItem[] getAvailableValues(DynObject contextValues, FeatureStore myStore, FeatureAttributeDescriptor descriptor) { |
|
1344 |
String keyName = myStore.getFullName() + ":columnName=" + descriptor.getName(); |
|
1345 |
if( this.availableValues==null ) { |
|
1346 |
this.availableValues = new HashMap<>(); |
|
1347 |
} |
|
1348 |
DynObjectValueItem[] values = this.availableValues.get(keyName); |
|
1349 |
if( values != null ) { |
|
1350 |
return values; |
|
1351 |
} |
|
1352 |
if( !descriptor.isForeingKey() ) { |
|
1353 |
return null; |
|
1354 |
} |
|
1355 |
ForeingKey foreingKey = descriptor.getForeingKey(); |
|
1356 |
FeatureStore foreingStore = null; |
|
1357 |
DisposableFeatureSetIterable set = null; |
|
1358 |
try { |
|
1359 |
StoresRepository theStoresRepository; |
|
1360 |
FeatureStore store = descriptor.getStore(); |
|
1361 |
if (store == null) { |
|
1362 |
theStoresRepository = DALLocator.getDataManager().getStoresRepository(); |
|
1363 |
|
|
1364 |
} else { |
|
1365 |
theStoresRepository = store.getStoresRepository(); |
|
1366 |
} |
|
1367 |
foreingStore = (FeatureStore) theStoresRepository.getStore( |
|
1368 |
foreingKey.getTableName() |
|
1369 |
); |
|
1370 |
Expression labelExpression = foreingKey.getLabelExpression(null); |
|
1371 |
String codeName = foreingKey.getCodeName(); |
|
1372 |
FeatureSymbolTable featureSymbolTable = this.createFeatureSymbolTable("feature"); |
|
1373 |
MutableSymbolTable symbolTable = featureSymbolTable.createParent(); |
|
1374 |
|
|
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<>(); |
|
1384 |
int n = 0; |
|
1385 |
for (Feature feature : set = foreingStore.getFeatureSet().iterable()) { |
|
1386 |
Object value = feature.get(codeName); |
|
1387 |
Object label; |
|
1388 |
if (labelExpression == null) { |
|
1389 |
label = value; |
|
1390 |
} else { |
|
1391 |
featureSymbolTable.setFeature(feature); |
|
1392 |
label = labelExpression.execute(symbolTable); |
|
1393 |
} |
|
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##")))); |
|
1406 |
if( n>=MAX_AVAILABLE_VALUES ) { |
|
1407 |
break; |
|
1408 |
} |
|
1409 |
} |
|
1410 |
values = values_list.toArray(new DynObjectValueItem[values_list.size()]); |
|
1411 |
if( filter==null ) { |
|
1412 |
this.availableValues.put(keyName, values); |
|
1413 |
} |
|
1414 |
return values; |
|
1415 |
} catch (Exception ex) { |
|
1416 |
LOGGER.warn("Can't get available values for field '"+myStore.getName()+"."+descriptor.getName()+"' from table '" + foreingKey.getTableName() + "'.", ex); |
|
1417 |
} finally { |
|
1418 |
DisposeUtils.disposeQuietly(set); |
|
1419 |
DisposeUtils.disposeQuietly(foreingStore); |
|
1420 |
} |
|
1421 |
return null; |
|
1422 |
} |
|
1423 |
|
|
1424 |
@Override |
|
1425 | 1341 |
public String createUniqueID() { |
1426 | 1342 |
UUID x = UUID.randomUUID(); |
1427 | 1343 |
String s = x.toString(); |
... | ... | |
1532 | 1448 |
public FeatureRuleExpression createFeatureRuleExpression() { |
1533 | 1449 |
FeatureRuleExpression rule = new DefaultFeatureRuleExpression(); |
1534 | 1450 |
return rule; |
1535 |
}
|
|
1451 |
} |
|
1536 | 1452 |
|
1537 | 1453 |
} |
Also available in: Unified diff