diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java index f829c45d0f81cfcff9606e5b8fac5dd906867b76..808ed210bed510124947ffbda22f55f32220f6f4 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DataStoreServer.java @@ -16,8 +16,8 @@ package ch.systemsx.cisd.openbis.dss.generic.server; -import static ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants.DATA_STORE_SERVER_SERVICE_NAME; -import static ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; +import static ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants.DATA_STORE_SERVER_SERVICE_NAME; +import static ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; import java.io.IOException; import java.util.Enumeration; diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java index 9502648050ba7a061150824c307bf8741853e0fe..b96126f2799e342c18cf186fd5b1a1465a8ed258 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java @@ -16,7 +16,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server; -import static ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; +import static ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; import java.awt.image.BufferedImage; import java.io.File; diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java index 08f3fb5ca29f9cae94491252aabb5cf699c014b8..3b9b59ab8e8d72fd24fdc83e054e437e0838a9c1 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/GenericDssLinkReportingPlugin.java @@ -21,7 +21,7 @@ import java.util.ArrayList; import java.util.Properties; import ch.systemsx.cisd.common.utilities.PropertyUtils; -import ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants; +import ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LinkModel; import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription; diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/DataStoreApiUrlUtilities.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/DataStoreApiUrlUtilities.java index 6c47734f1e0dd684ff51b0edd2e2582c36c86d0b..c2ffa32197454f2a289fa7166aaa65a4c4d8f92b 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/DataStoreApiUrlUtilities.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/DataStoreApiUrlUtilities.java @@ -16,7 +16,7 @@ package ch.systemsx.cisd.openbis.dss.generic.shared.api.v1; -import static ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; +import static ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; /** * @author Chandrasekhar Ramakrishnan diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/DssComponentTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/DssComponentTest.java index d43a5648d8e1e7a8fafd0a77fd38de76e7806ad4..e82cb149dd3c4ec0a58946f1c52a9a868f9dc284 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/DssComponentTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/client/api/v1/impl/DssComponentTest.java @@ -64,8 +64,8 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.FileInfoDssBuilder; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.FileInfoDssDTO; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.IDssServiceRpcGeneric; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO; -import ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants; import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService; +import ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants; import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO; /** diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServletTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServletTest.java index 16801739d67ab4fdb9dc16ada288d7055766fa0a..2cf99fdbf416e1be460847389c785cd26569b337 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServletTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServletTest.java @@ -18,7 +18,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server; import static ch.systemsx.cisd.common.test.AssertionUtil.assertContains; import static ch.systemsx.cisd.openbis.dss.generic.shared.Constants.DEFAULT_SHARE_ID; -import static ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; +import static ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; import static org.testng.AssertJUnit.assertEquals; import java.awt.image.BufferedImage; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java index 26a0d7e5b8a985af992442bddd521a85eb1d3c5b..247f57ae40a4b9d2181d98777091de44772b561b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java @@ -17,13 +17,13 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionUI; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.TypedTableGridColumnDefinition; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ILinkGenerator; import ch.systemsx.cisd.openbis.generic.shared.basic.ISerializable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableGridColumnDefinition; /** * @author Franz-Josef Elmer 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 e398b4ec10d38f6f81fa261aba3179f5f491595d..c44505059ee5a258e7b29b76f8efc1dbf41edf15 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 @@ -26,6 +26,7 @@ import java.util.Set; import com.extjs.gxt.ui.client.GXT; import com.extjs.gxt.ui.client.Style.Orientation; import com.extjs.gxt.ui.client.Style.SelectionMode; +import com.extjs.gxt.ui.client.data.BasePagingLoadConfig; import com.extjs.gxt.ui.client.data.BasePagingLoadResult; import com.extjs.gxt.ui.client.data.BasePagingLoader; import com.extjs.gxt.ui.client.data.Loader; @@ -718,6 +719,23 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod } } + private static com.extjs.gxt.ui.client.Style.SortDir translate(SortDir sortDir) + { + if (sortDir.equals(SortDir.ASC)) + { + return com.extjs.gxt.ui.client.Style.SortDir.ASC; + } else if (sortDir.equals(SortDir.DESC)) + { + return com.extjs.gxt.ui.client.Style.SortDir.DESC; + } else if (sortDir.equals(SortDir.NONE)) + { + return com.extjs.gxt.ui.client.Style.SortDir.NONE; + } else + { + throw new IllegalStateException("unknown sort dir: " + sortDir); + } + } + /** @return number of rows in the grid */ public final int getRowNumber() { @@ -729,7 +747,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod private final AsyncCallback<PagingLoadResult<M>> delegate; // configuration with which the listing was called - private final DefaultResultSetConfig<String, T> resultSetConfig; + private DefaultResultSetConfig<String, T> resultSetConfig; private int logID; @@ -777,6 +795,20 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod } else if (partial) { reloadingPhase = true; + BasePagingLoadConfig loadConfig = new BasePagingLoadConfig(); + loadConfig.setLimit(resultSetConfig.getLimit()); + loadConfig.setOffset(resultSetConfig.getOffset()); + SortInfo<T> sortInfo = resultSetConfig.getSortInfo(); + if (sortInfo != null) + { + IColumnDefinition<T> sortField = sortInfo.getSortField(); + if (sortField != null) + { + loadConfig.setSortField(sortField.getIdentifier()); + loadConfig.setSortDir(translate(sortInfo.getSortDir())); + } + } + resultSetConfig = createPagingConfig(loadConfig, filterToolbar.getFilters(), resultSetConfig.tryGetGridDisplayId()); resultSetConfig.setCacheConfig(ResultSetFetchConfig .createFetchFromCacheAndRecompute(key)); // this.reuse(); // FIXME PTR has to be done? diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ListColumnFilterWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ListColumnFilterWidget.java index 740bfc8393d182505f2d10717cce0c9659c10942..ddfb4bd7381663d390ef58dc21e3717e7ed61609 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ListColumnFilterWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ListColumnFilterWidget.java @@ -58,7 +58,7 @@ public class ListColumnFilterWidget<T> extends ComboBox<ModelData> implements private static final String EMPTY_VALUE = "(empty)"; - private final IColumnDefinition<T> filteredField; + private IColumnDefinition<T> filteredField; private final IDelegatedAction onFilterAction; @@ -218,6 +218,11 @@ public class ListColumnFilterWidget<T> extends ComboBox<ModelData> implements return filteredField.getIdentifier(); } + public void setFilteredField(IColumnDefinition<T> filteredField) + { + this.filteredField = filteredField; + } + public Widget getWidget() { return this; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/TextColumnFilterWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/TextColumnFilterWidget.java index d096a19ba7d7c6b506a1a669f8ff30f08a324491..e2458c87982285324cc8fc48482bbd1d824cce19 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/TextColumnFilterWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/TextColumnFilterWidget.java @@ -36,7 +36,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition; public class TextColumnFilterWidget<T/* entity */> extends StoreFilterField<ModelData> implements IColumnFilterWidget<T> { - private final IColumnDefinition<T> filteredField; + private IColumnDefinition<T> filteredField; private final IDelegatedAction onFilterAction; @@ -93,6 +93,11 @@ public class TextColumnFilterWidget<T/* entity */> extends StoreFilterField<Mode return this; } + public void setFilteredField(IColumnDefinition<T> filteredField) + { + this.filteredField = filteredField; + } + public IColumnFilterWidget<T> createOrRefresh(List<String> distinctValuesOrNull) { if (distinctValuesOrNull == null) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/FilterToolbar.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/FilterToolbar.java index 20dc48cda1bbb83537b23e4f42510186712f457d..6f4d0f7fa22db0078fb3f9ffb2d42b448bf64d49 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/FilterToolbar.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/FilterToolbar.java @@ -40,6 +40,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GridCustomFilter; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ParameterWithValue; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableGridColumnDefinition; /** * Toolbar with filters. @@ -479,12 +480,21 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb } for (int i = 0; i < filters1.size(); i++) { - String colId1 = filters1.get(i).getIdentifier(); - String colId2 = filters2.get(i).getFilteredColumnId(); - if (colId1.equals(colId2) == false) + IColumnDefinition<T> filter1 = filters1.get(i); + IColumnDefinition<T> filter2 = filters2.get(i).getFilter().getFilteredField(); + if (filter1.getIdentifier().equals(filter2.getIdentifier()) == false) { return true; } + if (filter1 instanceof TypedTableGridColumnDefinition && filter2 instanceof TypedTableGridColumnDefinition) + { + TypedTableGridColumnDefinition<?> coldef1 = (TypedTableGridColumnDefinition<?>) filter1; + TypedTableGridColumnDefinition<?> coldef2 = (TypedTableGridColumnDefinition<?>) filter2; + if (coldef1.getIndex() != coldef2.getIndex()) + { + return true; + } + } } return false; } @@ -503,6 +513,9 @@ public class FilterToolbar<T> extends ToolBar implements IDatabaseModificationOb // we do not have distinct values in the columns at this moment, so plain filter // widget is always created filterWidget = new TextColumnFilterWidget<T>(columnDefinition, onFilterAction); + } else + { + filterWidget.setFilteredField(columnDefinition); } filterWidgets.add(filterWidget); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/IColumnFilterWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/IColumnFilterWidget.java index c930cadcd2c8dc24b803b969fa6f68123241e72e..2e5142cdab7b578f84d903cc6b16109c8fbdf765 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/IColumnFilterWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/IColumnFilterWidget.java @@ -21,6 +21,7 @@ import java.util.List; import com.google.gwt.user.client.ui.Widget; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridColumnFilterInfo; +import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition; /** * Widget which controls filtering of one grid column. @@ -33,6 +34,8 @@ public interface IColumnFilterWidget<T> /** @return filter with the pattern */ GridColumnFilterInfo<T> getFilter(); + + void setFilteredField(IColumnDefinition<T> filteredField); /** id of the filtered column */ String getFilteredColumnId(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java index 42575dfd98aab012ca39ac4f0b5baf59df423f2e..a36aad5d603e6bcce5a7fabc59ce9641dba439dc 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/DataSetUtils.java @@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.util; import ch.systemsx.cisd.common.shared.basic.utils.StringUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericViewModel; +import ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants; import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; @@ -32,8 +33,6 @@ public class DataSetUtils private static final String AUTO_RESOLVE = "autoResolve"; - private static final String SESSION_ID = "sessionID"; - private static final String MODE = "mode"; public static String createDataViewUrl(ExternalData dataSet, GenericViewModel model, @@ -42,7 +41,8 @@ public class DataSetUtils URLMethodWithParameters methodWithParameters = new URLMethodWithParameters(dataSet.getDataStore().getDownloadUrl() + "/" + dataSet.getCode()); - methodWithParameters.addParameter(SESSION_ID, model.getSessionContext().getSessionID()); + String sessionID = model.getSessionContext().getSessionID(); + methodWithParameters.addParameter(GenericSharedConstants.SESSION_ID_PARAMETER, sessionID); if (modeOrNull != null) { methodWithParameters.addParameter(MODE, modeOrNull); 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 9a9a1a8f1a19da78d304b82f92ecafb4ede1d127..736042d2d549b2990cfe711c87da555630957f57 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 @@ -40,11 +40,14 @@ import org.apache.log4j.Logger; import ch.rinn.restrictions.Private; import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; import ch.systemsx.cisd.base.namedthread.NamingThreadPoolExecutor; +import ch.systemsx.cisd.common.collections.IKeyExtractor; +import ch.systemsx.cisd.common.collections.TableMap; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.shared.basic.AlternativesStringFilter; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ColumnDistinctValues; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.CustomFilterInfo; +import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridColumnFilterInfo; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridCustomColumnInfo; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridFilters; @@ -57,12 +60,14 @@ import ch.systemsx.cisd.openbis.generic.client.web.server.calculator.ITableDataP import ch.systemsx.cisd.openbis.generic.client.web.server.util.XMLPropertyTransformer; import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel; import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition; +import ch.systemsx.cisd.openbis.generic.shared.basic.ISerializable; import ch.systemsx.cisd.openbis.generic.shared.basic.PrimitiveValue; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GridCustomColumn; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SortInfo; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SortInfo.SortDir; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRow; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableGridColumnDefinition; /** * A {@link IResultSetManager} implementation which caches the full data retrieved using @@ -721,7 +726,116 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se // with tableData (provided by dataProvider). The bug is fixed (by checking index in // TypedTableGridColumnDefinition.tryGetComparableValue()), but now a new bug pops up: The // combo box of a column filter element can have the wrong values. - return calculateSortAndFilterResult(sessionToken, tableData, resultConfig, dataKey, partial); + return calculateSortAndFilterResult(sessionToken, tableData, + createMatchingConfig(resultConfig, headers), dataKey, partial); + } + + private <T> IResultSetConfig<K, T> createMatchingConfig(IResultSetConfig<K, T> resultSetConfig, + List<TableModelColumnHeader> headers) + { + if (headers.isEmpty()) + { + // Not TypedTableGrid + return resultSetConfig; + } + if (hasNoStaleAvailableColumn(resultSetConfig, headers)) + { + return resultSetConfig; + } + Set<IColumnDefinition<T>> newAvailableColumns = new HashSet<IColumnDefinition<T>>(); + Set<String> idsOfPresentedColumns = resultSetConfig.getIDsOfPresentedColumns(); + Set<String> newIdsOfPresentedColumns = new HashSet<String>(); + SortInfo<T> sortInfo = resultSetConfig.getSortInfo(); + TableMap<String, GridColumnFilterInfo<T>> columnFilterInfos = + getColumFilters(resultSetConfig); + List<GridColumnFilterInfo<T>> newColumnFilterInfos = + new ArrayList<GridColumnFilterInfo<T>>(); + for (TableModelColumnHeader header : headers) + { + @SuppressWarnings("unchecked") + IColumnDefinition<T> definition = + (IColumnDefinition<T>) new TypedTableGridColumnDefinition<ISerializable>( + header, null, "", null); + newAvailableColumns.add(definition); + String id = header.getId(); + if (header.isHidden() == false || idsOfPresentedColumns.contains(id)) + { + newIdsOfPresentedColumns.add(id); + } + if (sortInfo != null) + { + IColumnDefinition<T> sortField = sortInfo.getSortField(); + if (sortField != null && sortField.getIdentifier().equals(id)) + { + sortInfo.setSortField(definition); + } + } + GridColumnFilterInfo<T> filterInfo = columnFilterInfos.tryGet(id); + if (filterInfo != null) + { + String pattern = filterInfo.tryGetFilterPattern(); + newColumnFilterInfos.add(new GridColumnFilterInfo<T>(definition, pattern)); + } + } + + DefaultResultSetConfig<K, T> newConfig = new DefaultResultSetConfig<K, T>(); + newConfig.setAvailableColumns(newAvailableColumns); + newConfig.setCacheConfig(resultSetConfig.getCacheConfig()); + newConfig.setCustomColumnErrorMessageLong(resultSetConfig.isCustomColumnErrorMessageLong()); + // custom filter will be ignored because it may be stale too + GridFilters<T> newFilters = + newColumnFilterInfos.isEmpty() ? GridFilters.<T> createEmptyFilter() : GridFilters + .createColumnFilter(newColumnFilterInfos); + newConfig.setFilters(newFilters); + newConfig.setGridDisplayId(resultSetConfig.tryGetGridDisplayId()); + newConfig.setIDsOfPresentedColumns(newIdsOfPresentedColumns); + newConfig.setLimit(resultSetConfig.getLimit()); + newConfig.setOffset(resultSetConfig.getOffset()); + newConfig.setSortInfo(sortInfo); + return newConfig; + } + + private <T> TableMap<String, GridColumnFilterInfo<T>> getColumFilters( + IResultSetConfig<K, T> resultSetConfig) + { + GridFilters<T> filters = resultSetConfig.getFilters(); + List<GridColumnFilterInfo<T>> filterInfosOrNull = filters.tryGetFilterInfos(); + if (filterInfosOrNull == null) + { + filterInfosOrNull = Collections.emptyList(); + } + TableMap<String, GridColumnFilterInfo<T>> columnFilterInfos = + new TableMap<String, GridColumnFilterInfo<T>>(filterInfosOrNull, + new IKeyExtractor<String, GridColumnFilterInfo<T>>() + { + public String getKey(GridColumnFilterInfo<T> e) + { + return e.getFilteredField().getIdentifier(); + } + }); + return columnFilterInfos; + } + + private <T> boolean hasNoStaleAvailableColumn(IResultSetConfig<K, T> resultSetConfig, + List<TableModelColumnHeader> headers) + { + Set<String> headerIds = new HashSet<String>(); + for (TableModelColumnHeader header : headers) + { + headerIds.add(header.getId()); + } + Set<IColumnDefinition<T>> availableColumns = resultSetConfig.getAvailableColumns(); + if (availableColumns != null) + { + for (IColumnDefinition<T> definition : availableColumns) + { + if (headerIds.contains(definition.getIdentifier()) == false) + { + return false; + } + } + } + return true; } private <T> Future<TableData<T>> createFutureWhichIsPresent(final K dataKey, diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/DataStoreServiceFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/DataStoreServiceFactory.java index 51a014a366858927f8a0e25c804db782cb4ccf58..7dbf372abb387b1e91a8cbac8c6d532220da4a3d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/DataStoreServiceFactory.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/DataStoreServiceFactory.java @@ -16,7 +16,7 @@ package ch.systemsx.cisd.openbis.generic.server.business; -import static ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants.DATA_STORE_SERVER_SERVICE_NAME; +import static ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants.DATA_STORE_SERVER_SERVICE_NAME; import java.util.HashMap; import java.util.Map; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/GenericSharedConstants.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/GenericSharedConstants.java similarity index 90% rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/GenericSharedConstants.java rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/GenericSharedConstants.java index 1218d74ae2707786eb8e2785d7fe05d3ed168826..d3eba6e3abe28f85451f607ee7e6d6401a1142c6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/GenericSharedConstants.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/GenericSharedConstants.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package ch.systemsx.cisd.openbis.generic.shared; +package ch.systemsx.cisd.openbis.generic.shared.basic; /** * Some public shared constants. @@ -37,5 +37,7 @@ public final class GenericSharedConstants /** Part of the URL of the DSS service. */ public static final String DATA_STORE_SERVER_SERVICE_NAME = DATA_STORE_SERVER_WEB_APPLICATION_NAME + "/dss"; + + public static final String SESSION_ID_PARAMETER = "sessionID"; } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/renderers/SimpleImageHtmlRenderer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/SimpleImageHtmlRenderer.java similarity index 78% rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/renderers/SimpleImageHtmlRenderer.java rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/SimpleImageHtmlRenderer.java index 9d4d1a9330fe6767ca539013d74c6a5680303924..6b5ce2206947498c076eb67800bbbc956a6015d6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/renderers/SimpleImageHtmlRenderer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/SimpleImageHtmlRenderer.java @@ -14,9 +14,8 @@ * limitations under the License. */ -package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.renderers; +package ch.systemsx.cisd.openbis.generic.shared.basic; -import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters; /** * @author Tomasz Pylak @@ -28,8 +27,10 @@ public class SimpleImageHtmlRenderer String downloadURL, String sessionID) { URLMethodWithParameters methodWithParameters = - new URLMethodWithParameters(downloadURL + "/datastore_server/" + imagePath); - methodWithParameters.addParameter("sessionID", sessionID); + new URLMethodWithParameters(downloadURL + "/" + + GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME + "/" + + imagePath); + methodWithParameters.addParameter(GenericSharedConstants.SESSION_ID_PARAMETER, sessionID); String linkURL = methodWithParameters.toString(); methodWithParameters.addParameter("mode", "thumbnail" + width + "x" + height); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/TypedTableGridColumnDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TypedTableGridColumnDefinition.java similarity index 77% rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/TypedTableGridColumnDefinition.java rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TypedTableGridColumnDefinition.java index bbc740facd89af7bf54d2c720f2dc56eff6a38f6..365c66f00a4ae3d71f61842d1d3de821d2c87a09 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/TypedTableGridColumnDefinition.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TypedTableGridColumnDefinition.java @@ -1,19 +1,12 @@ -package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific; +package ch.systemsx.cisd.openbis.generic.shared.basic.dto; import java.util.List; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.renderers.SimpleImageHtmlRenderer; import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel; import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition; import ch.systemsx.cisd.openbis.generic.shared.basic.ISerializable; import ch.systemsx.cisd.openbis.generic.shared.basic.SimpleDateRenderer; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DateTableCell; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DssLinkTableCell; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GeneratedImageTableCell; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ImageTableCell; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject; +import ch.systemsx.cisd.openbis.generic.shared.basic.SimpleImageHtmlRenderer; /** * @author Franz-Josef Elmer @@ -53,6 +46,11 @@ public class TypedTableGridColumnDefinition<T extends ISerializable> implements { return header.getId(); } + + public int getIndex() + { + return header.getIndex(); + } public String tryToGetProperty(String key) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataStoreTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataStoreTranslator.java index ec288227a1808cf30c87ca5436763b976d8ceb2b..fa5821f579bd61f08ff6efc64296fefa0a0b74e6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataStoreTranslator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataStoreTranslator.java @@ -16,7 +16,7 @@ package ch.systemsx.cisd.openbis.generic.shared.translator; -import static ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; +import static ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStore; import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE; diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java index 334bb9b3ab9de638e5f245768d974a3b8ce923d7..88f2f4300c2013ec90d15f6ce7f776b39906a87e 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java @@ -16,7 +16,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.server; -import static ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; +import static ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; import java.util.ArrayList; import java.util.Arrays; diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslatorTest.java index 491e3f777c6f229da929d3eedaae0ea2452387d7..e8ff1242173711c49222daaade732e283772dfdc 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/translator/ExternalDataTranslatorTest.java @@ -16,7 +16,7 @@ package ch.systemsx.cisd.openbis.generic.shared.translator; -import static ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; +import static ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants.DATA_STORE_SERVER_WEB_APPLICATION_NAME; import java.util.Date; import java.util.HashSet; diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramImagesReporter.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramImagesReporter.java index 7e7e233acb495ef5b02c2eb77208891bf6a84e62..7b5a29d9cfcefdf619413692bf1f0b16315d6876 100644 --- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramImagesReporter.java +++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/eicml/EICMLChromatogramImagesReporter.java @@ -27,7 +27,7 @@ import net.lemnik.eodsql.DataIterator; import ch.rinn.restrictions.Private; import ch.systemsx.cisd.openbis.dss.yeastx.server.EICMLChromatogramGeneratorServlet; -import ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants; +import ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GeneratedImageTableCell; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImplTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImplTest.java index ea1d831ec7873524c511b17f5d2a14b58e00aeed..25288f98a67b29cccf5c869e1b1067ce3da4cfbb 100644 --- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImplTest.java +++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/plugin/screening/server/logic/ScreeningApiImplTest.java @@ -33,7 +33,7 @@ import org.testng.annotations.Test; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.test.RecordingMatcher; import ch.systemsx.cisd.openbis.generic.shared.AbstractServerTestCase; -import ch.systemsx.cisd.openbis.generic.shared.GenericSharedConstants; +import ch.systemsx.cisd.openbis.generic.shared.basic.GenericSharedConstants; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStore; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty;