}
private JSONArray processColumnHierarchy(
FacesContext context, List<BaseColumn>[] columnHierarchies, int level, int startCol, int finishCol
) throws JSONException {
JSONArray columnsArray = new JSONArray();
int thisGroupStart = -1;
BaseColumn thisGroup = null;
for (int colIndex = startCol; colIndex <= finishCol + 1; colIndex++) {
List<BaseColumn> thisColumnHierarchy = colIndex <= finishCol ? columnHierarchies[colIndex] : null;
BaseColumn columnOrGroup = thisColumnHierarchy != null ? thisColumnHierarchy.get(level) : null;
if (thisGroup == null) {
thisGroup = columnOrGroup;
thisGroupStart = startCol;
} else if (columnOrGroup != thisGroup) {
int thisGroupEnd = colIndex - 1;
List<BaseColumn> lastColumnHierarchy = columnHierarchies[thisGroupEnd];
JSONObject columnObj = getColumnParams(context, thisGroup, level);
columnsArray.put(columnObj);
boolean hasSubColumns = lastColumnHierarchy.size() - 1 > level;
if (hasSubColumns) {
JSONArray subColumns = processColumnHierarchy(context, columnHierarchies, level + 1, thisGroupStart, thisGroupEnd);
columnObj.put("subColumns", subColumns);
}
thisGroup = columnOrGroup;
thisGroupStart = colIndex;
}