@Override
public void decode(FacesContext context, UIComponent component) {
super.decode(context, component);
Map requestParams = context.getExternalContext().getRequestParameterMap();
AbstractTable table = (AbstractTable) component.getParent();
String colWidthsFieldName = getColumnWidthsFieldName(context, table);
String params = (String) requestParams.get(colWidthsFieldName);
String columnOrderFieldName = getColumnOrderFieldName(context, table);
String colOrder = (String) requestParams.get(columnOrderFieldName);
Iterable<String> submittedColumnsOrder = null;
if (colOrder != null) {
colOrder += ",";
submittedColumnsOrder = Arrays.asList(colOrder.split(","));
if (submittedColumnsOrder != null) {
table.setColumnsOrder(submittedColumnsOrder);
}
}
if (params == null || params.length() == 0)
return;
String[] splitParameters = params.split(":");
String tableWidth = splitParameters[0];
String colWidthsArray = splitParameters[1];
if (tableWidth.length() == 0)
tableWidth = null;
JSONArray widthsArray;
try {
widthsArray = new JSONArray(colWidthsArray);
} catch (JSONException e) {
throw new RuntimeException(e);
}
List<BaseColumn> columns = table.getRenderedColumns();
if (columns.size() != widthsArray.length())
throw new IllegalStateException("columns.size() != widthsArray.length(): " + columns.size() + " != " + widthsArray.length());
ColumnResizing columnResizing = (ColumnResizing) component;
ColumnResizingState resizingState = columnResizing.getResizingState();
if (resizingState == null)
resizingState = new ColumnResizingState();
resizingState.setTableWidth(tableWidth);
for (int i = 0, count = columns.size(); i < count; i++) {
BaseColumn column = columns.get(i);
String newWidth;
try {
newWidth = widthsArray.getString(i);
} catch (JSONException e) {
throw new RuntimeException(e);
}
resizingState.setColumnWidth(column.getId(), newWidth);
}
if (submittedColumnsOrder != null) {
if (table.getColumnsOrder() != null && ValueBindings.set(table, "columnsOrder", table.getColumnsOrder())) {
table.setColumnsOrder(null);
}
}
columnResizing.setResizingState(resizingState);
}