Skip to content
Snippets Groups Projects
Commit 884c1d6a authored by felmer's avatar felmer
Browse files

SSDM-2911: fixing export bug

SVN: 35303
parent 9b87aa49
No related branches found
No related tags found
No related merge requests found
...@@ -114,6 +114,9 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se ...@@ -114,6 +114,9 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se
private final Set<K> resultSets = Collections.synchronizedSet(new HashSet<K>()); private final Set<K> resultSets = Collections.synchronizedSet(new HashSet<K>());
private final Map<K, IOriginalDataProvider<?>> cachedDataProviders
= Collections.synchronizedMap(new HashMap<K, IOriginalDataProvider<?>>());
private final Map<K, Future<?>> unfinishedLoadings = Collections private final Map<K, Future<?>> unfinishedLoadings = Collections
.synchronizedMap(new HashMap<K, Future<?>>()); .synchronizedMap(new HashMap<K, Future<?>>());
...@@ -422,27 +425,28 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se ...@@ -422,27 +425,28 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se
removeResultSet(dataKey); removeResultSet(dataKey);
//$FALL-THROUGH$ - //$FALL-THROUGH$ -
case COMPUTE_AND_CACHE: case COMPUTE_AND_CACHE:
return fetchAndCacheResult(sessionToken, resultConfig, dataProvider); return fetchAndCacheResultForSpecifiedKey(sessionToken, resultConfig, dataProvider,
resultSetKeyProvider.createKey());
default: default:
TableData<K, T> tableData = tryGetCachedTableData(dataKey); TableData<K, T> tableData = tryGetCachedTableData(dataKey);
if (tableData == null) if (tableData == null)
{ {
operationLog.warn("Reference to the stale cache key " + dataKey); operationLog.warn("Reference to the stale cache key " + dataKey);
tableData = loadAndAddToCache(dataKey, dataProvider, customColumnsProvider, tableData = loadAndAddToCache(dataKey, resolveDataProvider(dataKey, dataProvider),
columnCalculator, xmlPropertyTransformer, this); customColumnsProvider, columnCalculator, xmlPropertyTransformer, this);
} }
return calculateSortAndFilterResult(sessionToken, tableData, resultConfig, return calculateSortAndFilterResult(sessionToken, tableData, resultConfig,
dataKey, false); dataKey, false);
} }
} }
private <T> IResultSet<K, T> fetchAndCacheResult(final String sessionToken, private <T> IOriginalDataProvider<T> resolveDataProvider(K dataKey, IOriginalDataProvider<T> defaultDataProvider)
final IResultSetConfig<K, T> resultConfig, final IOriginalDataProvider<T> dataProvider)
{ {
final K dataKey = resultSetKeyProvider.createKey(); @SuppressWarnings("unchecked")
return fetchAndCacheResultForSpecifiedKey(sessionToken, resultConfig, dataProvider, dataKey); IOriginalDataProvider<T> cachedDataProvider = (IOriginalDataProvider<T>) cachedDataProviders.get(dataKey);
return cachedDataProvider == null ? defaultDataProvider : cachedDataProvider;
} }
private <T> IResultSet<K, T> fetchAndCacheResultForSpecifiedKey(final String sessionToken, private <T> IResultSet<K, T> fetchAndCacheResultForSpecifiedKey(final String sessionToken,
final IResultSetConfig<K, T> resultConfig, final IOriginalDataProvider<T> dataProvider, final IResultSetConfig<K, T> resultConfig, final IOriginalDataProvider<T> dataProvider,
final K dataKey) final K dataKey)
...@@ -458,6 +462,7 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se ...@@ -458,6 +462,7 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se
final TableData<K, T> tableData = final TableData<K, T> tableData =
new TableData<K, T>(dataKey, rows, headers, customColumnsProvider, columnCalculator); new TableData<K, T>(dataKey, rows, headers, customColumnsProvider, columnCalculator);
xmlPropertyTransformer.transformXMLProperties(rows); xmlPropertyTransformer.transformXMLProperties(rows);
cachedDataProviders.put(dataKey, dataProvider);
addToCache(dataKey, tableData); addToCache(dataKey, tableData);
boolean partial = rows.size() >= limit; boolean partial = rows.size() >= limit;
...@@ -702,6 +707,7 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se ...@@ -702,6 +707,7 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se
unlockResultSet(resultSetKey); unlockResultSet(resultSetKey);
assert resultSetKey != null : "Unspecified data key holder."; assert resultSetKey != null : "Unspecified data key holder.";
resultSets.remove(resultSetKey); resultSets.remove(resultSetKey);
cachedDataProviders.remove(resultSetKey);
if (tableDataCache.removeTableData(resultSetKey)) if (tableDataCache.removeTableData(resultSetKey))
{ {
operationLog.info(String.format("Result set for key '%s' has been removed.", resultSetKey)); operationLog.info(String.format("Result set for key '%s' has been removed.", resultSetKey));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment