diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java index 76bffdd96e15bcd2c02cee54f3709897d49376f7..69b782205be6f280b7b6b6432499b2db9f9d8d14 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java @@ -173,6 +173,9 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod private static final int PAGE_SIZE = 50; + // set to true to see some useful debugging messages + private static final boolean DEBUG = false; + private final PagingLoader<PagingLoadConfig> pagingLoader; private final ContentPanel contentPanel; @@ -446,6 +449,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod public void dispose() { + debug("dispose a tab"); self.disposeCache(); } @@ -499,6 +503,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod DefaultResultSetConfig<String, T> resultSetConfig = createPagingConfig(loadConfig, columnDefinitions, appliedFilters, resultSetKey, tryGetCustomFilter(), getGridDisplayTypeID()); + debug("create a refresh callback"); ListEntitiesCallback listCallback = new ListEntitiesCallback(viewContext, callback, resultSetConfig); listEntities(resultSetConfig, listCallback); @@ -506,6 +511,15 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod }; } + private void debug(String msg) + { + if (DEBUG) + { + String text = "[grid: " + getGridDisplayTypeID() + ", cache: " + resultSetKey + "] " + msg; + System.out.println(text); + } + } + private CustomFilterInfo<T> tryGetCustomFilter() { return filterToolbar.tryGetCustomFilter(); @@ -934,6 +948,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod String headerOrNull, boolean refreshColumnsDefinition) { pagingToolbar.updateDefaultRefreshButton(false); + debug("clean cache for refresh"); disposeCache(); this.refreshCallback = createRefreshCallback(externalRefreshCallbackOrNull); setHeader(headerOrNull); @@ -1190,8 +1205,10 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod { String oldResultSetKey = resultSetKey; resultSetKey = newResultSetKey; + debug("saving new cache key"); if (oldResultSetKey != null && oldResultSetKey.equals(newResultSetKey) == false) { + debug("cleaning old cache " + oldResultSetKey); removeResultSet(oldResultSetKey); } } @@ -1253,20 +1270,22 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod { recreateColumnModelAndRefreshColumnsWithFilters(); } - boolean filtersChanged = rebuildFiltersFromIds(getFilteredColumnIds(newColumnDataModels)); - // refresh the data - some filters may have been removed - if (filtersChanged) - { - createApplyFiltersDelagator().execute(); - } - + if (customColumnsChanged) { + debug("refreshing custom columns"); + // if filters refresh filters, so we can ignore filtersChanged state refresh(); } else { + if (filtersChanged) + { + // refresh the data - some filters may have been removed + createApplyFiltersDelagator().execute(); + } + debug("refreshing filters and columns settings"); // settings will be automatically stored because of event handling refreshColumnsSettings(); 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 45db83a1e6a2344fa70f017d838d1e177ec0e89c..ee718543efea2b12982c973e34cae8e89fae9ae6 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 @@ -287,18 +287,20 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se K dataKey = resultConfig.getResultSetKey(); if (dataKey == null) { - debug("Unknown result set key: retrieving the data."); dataKey = resultSetKeyProvider.createKey(); + debug("Unknown result set key: retrieving the data with a new key " + dataKey); List<T> rows = dataProvider.getOriginalData(); data = calculateCustomColumns(sessionToken, rows, resultConfig); results.put(dataKey, data); } else { - debug(String.format("Data for result set key '%s' already cached.", dataKey)); + debug(String.format("Fetching the result from the specifed result set key '%s'.", + dataKey)); data = cast(results.get(dataKey)); if (data == null) { - debug(String.format("Invalid result set key '%s'.", dataKey)); + debug(String + .format("Invalid result set key '%s'. This should not happen.", dataKey)); } } assert data != null : "Unspecified data";