diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java index e52dc57ab0db3f72baaffcbb8ff85082aad4ce8a..089dabda77a737b166176c6ef4991ca4024c4f36 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java @@ -190,13 +190,8 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se @Override public TableData<K, T> call() throws Exception { - List<T> rows = dataProvider.getOriginalData(Integer.MAX_VALUE); - List<TableModelColumnHeader> headers = dataProvider.getHeaders(); - operationLog.info(rows.size() + " records loaded for key " + dataKey); - TableData<K, T> tableData = - new TableData<K, T>(dataKey, rows, headers, customColumnsProvider, columnCalculator); - xmlPropertyTransformer.transformXMLProperties(rows); - cachedResultSetManager.addToCache(dataKey, tableData); + TableData<K, T> tableData = loadAndAddToCache(dataKey, dataProvider, customColumnsProvider, + columnCalculator, xmlPropertyTransformer, cachedResultSetManager); unfinishedLoadings.remove(dataKey); return tableData; } @@ -430,15 +425,14 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se return fetchAndCacheResult(sessionToken, resultConfig, dataProvider); default: TableData<K, T> tableData = tryGetCachedTableData(dataKey); - if (tableData != null) + if (tableData == null) { - return calculateSortAndFilterResult(sessionToken, tableData, resultConfig, - dataKey, false); - } else - { - return fetchAndCacheResult(sessionToken, resultConfig, dataProvider); + operationLog.warn("Reference to the stale cache key " + dataKey); + tableData = loadAndAddToCache(dataKey, dataProvider, customColumnsProvider, + columnCalculator, xmlPropertyTransformer, this); } - + return calculateSortAndFilterResult(sessionToken, tableData, resultConfig, + dataKey, false); } } @@ -632,7 +626,6 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se TableData<K, T> tableData = cast(tableDataCache.getTableData(dataKey)); if (tableData == null) { - operationLog.warn("Reference to the stale cache key " + dataKey); return null; } return tableData; @@ -674,6 +667,21 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se } + private static <K, T> TableData<K, T> loadAndAddToCache(K dataKey, IOriginalDataProvider<T> dataProvider, + ICustomColumnsProvider customColumnsProvider, IColumnCalculator columnCalculator, + XMLPropertyTransformer xmlPropertyTransformer, + CachedResultSetManager<K> cachedResultSetManager) + { + List<T> rows = dataProvider.getOriginalData(Integer.MAX_VALUE); + List<TableModelColumnHeader> headers = dataProvider.getHeaders(); + operationLog.info(rows.size() + " records loaded for key " + dataKey); + TableData<K, T> tableData = + new TableData<K, T>(dataKey, rows, headers, customColumnsProvider, columnCalculator); + xmlPropertyTransformer.transformXMLProperties(rows); + cachedResultSetManager.addToCache(dataKey, tableData); + return tableData; + } + @Override protected void finalize() throws Throwable {