Skip to content
Snippets Groups Projects
Commit b0aee715 authored by pkupczyk's avatar pkupczyk
Browse files

LMS-2711 - Columns order is sometimes lost

SVN: 24297
parent 033ede97
No related branches found
No related tags found
No related merge requests found
...@@ -352,6 +352,25 @@ public class DisplaySettingsManager ...@@ -352,6 +352,25 @@ public class DisplaySettingsManager
refreshNeeded = true; refreshNeeded = true;
} }
} }
} else
{
// LMS-2711
// For columns that are saved in the settings but are not found in the model
// create a column with a ColumnConfig object basing on a ColumnSetting object.
// Hide this column now but save the information whether it was originally hidden
// and had a filter in a style name. This information will be used for storing the
// settings back in the DB (see createColumnsSettings() method).
ColumnStyle columnStyle = new ColumnStyle();
columnStyle.setHidden(columnSetting.isHidden());
columnStyle.setHasFilter(columnSetting.hasFilter());
columnConfig = new ColumnConfig();
columnConfig.setColumnStyleName(ColumnStyle.format(columnStyle));
columnConfig.setId(columnSetting.getColumnID());
columnConfig.setWidth(columnSetting.getWidth());
columnConfig.setHidden(true);
newColumnConfigList.add(columnConfig);
} }
} }
// add columns for which no settings were stored at the end // add columns for which no settings were stored at the end
...@@ -425,10 +444,19 @@ public class DisplaySettingsManager ...@@ -425,10 +444,19 @@ public class DisplaySettingsManager
ColumnConfig columnConfig = columnModel.getColumn(i); ColumnConfig columnConfig = columnModel.getColumn(i);
ColumnSetting columnSetting = new ColumnSetting(); ColumnSetting columnSetting = new ColumnSetting();
columnSetting.setColumnID(columnConfig.getId()); columnSetting.setColumnID(columnConfig.getId());
columnSetting.setHidden(columnConfig.isHidden());
columnSetting.setWidth(columnConfig.getWidth()); columnSetting.setWidth(columnConfig.getWidth());
boolean hasFilter = filteredColumnIds.contains(columnConfig.getId());
columnSetting.setHasFilter(hasFilter); ColumnStyle columnStyle = ColumnStyle.parse(columnConfig.getColumnStyleName());
if (columnStyle != null)
{
columnSetting.setHidden(columnStyle.isHidden());
columnSetting.setHasFilter(columnStyle.isHasFilter());
} else
{
columnSetting.setHidden(columnConfig.isHidden());
columnSetting.setHasFilter(filteredColumnIds.contains(columnConfig.getId()));
}
if (sortInfo != null && sortInfo.getSortField() != null if (sortInfo != null && sortInfo.getSortField() != null
&& columnSetting.getColumnID().equals(sortInfo.getSortField())) && columnSetting.getColumnID().equals(sortInfo.getSortField()))
{ {
...@@ -613,4 +641,64 @@ public class DisplaySettingsManager ...@@ -613,4 +641,64 @@ public class DisplaySettingsManager
{ {
return displaySettings.getPortletConfigurations(); return displaySettings.getPortletConfigurations();
} }
private static class ColumnStyle
{
private static final String SEPARATOR = "&&";
private boolean hidden;
private boolean hasFilter;
public boolean isHidden()
{
return hidden;
}
public void setHidden(boolean hidden)
{
this.hidden = hidden;
}
public boolean isHasFilter()
{
return hasFilter;
}
public void setHasFilter(boolean hasFilter)
{
this.hasFilter = hasFilter;
}
public static String format(ColumnStyle styleObject)
{
if (styleObject == null)
{
return null;
}
return styleObject.isHidden() + SEPARATOR + styleObject.isHasFilter();
}
public static ColumnStyle parse(String styleString)
{
if (styleString == null)
{
return null;
}
String[] parts = styleString.split(SEPARATOR);
if (parts.length == 2)
{
ColumnStyle styleObject = new ColumnStyle();
styleObject.setHidden(Boolean.valueOf(parts[0]));
styleObject.setHasFilter(Boolean.valueOf(parts[1]));
return styleObject;
} else
{
return null;
}
}
}
} }
...@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui; ...@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -177,12 +178,16 @@ public class ColumnSettingsConfigurer<T extends Serializable> ...@@ -177,12 +178,16 @@ public class ColumnSettingsConfigurer<T extends Serializable>
*/ */
private ColumnModel createNewColumnModel(List<ColumnDataModel> newColumnDataModels) private ColumnModel createNewColumnModel(List<ColumnDataModel> newColumnDataModels)
{ {
Map<String, ColumnConfig> oldColumns = getOldColumns(); List<ColumnConfig> oldColumnsList = getOldColumnsList();
List<ColumnConfig> columns = new ArrayList<ColumnConfig>(); Map<String, ColumnConfig> oldColumnsMap = getOldColumnsMap();
List<ColumnConfig> columnsList = new LinkedList<ColumnConfig>();
Map<String, ColumnConfig> columnsMap = new HashMap<String, ColumnConfig>();
for (ColumnDataModel columnDataModel : newColumnDataModels) for (ColumnDataModel columnDataModel : newColumnDataModels)
{ {
String columnID = columnDataModel.getColumnID(); String columnID = columnDataModel.getColumnID();
ColumnConfig column = oldColumns.get(columnID); ColumnConfig column = oldColumnsMap.get(columnID);
if (column == null) if (column == null)
{ {
String header = columnDataModel.getHeader(); String header = columnDataModel.getHeader();
...@@ -191,14 +196,36 @@ public class ColumnSettingsConfigurer<T extends Serializable> ...@@ -191,14 +196,36 @@ public class ColumnSettingsConfigurer<T extends Serializable>
ColumnSettingsConfigurer.DEFAULT_COLUMN_WIDTH); ColumnSettingsConfigurer.DEFAULT_COLUMN_WIDTH);
} }
column.setHidden(columnDataModel.isVisible() == false); column.setHidden(columnDataModel.isVisible() == false);
columns.add(column); columnsList.add(column);
columnsMap.put(column.getId(), column);
}
// LMS-2711
// Do not loose columns that are not available in a model of the grid but are in the
// settings. We have to remember their position for other views that may use the same
// settings but have a different model structure.
int index = 0;
for (ColumnConfig oldColumn : oldColumnsList)
{
if (!columnsMap.containsKey(oldColumn.getId()))
{
columnsList.add(index, oldColumn);
}
index++;
} }
return new ColumnModel(columns);
return new ColumnModel(columnsList);
}
private List<ColumnConfig> getOldColumnsList()
{
return browserGrid.getFullColumnModel().getColumns();
} }
private Map<String, ColumnConfig> getOldColumns() private Map<String, ColumnConfig> getOldColumnsMap()
{ {
List<ColumnConfig> columns = browserGrid.getFullColumnModel().getColumns(); List<ColumnConfig> columns = getOldColumnsList();
HashMap<String, ColumnConfig> map = new HashMap<String, ColumnConfig>(); HashMap<String, ColumnConfig> map = new HashMap<String, ColumnConfig>();
for (ColumnConfig columnConfig : columns) for (ColumnConfig columnConfig : columns)
{ {
......
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