diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/AdminGuiConfigTypeUtil.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/AdminGuiConfigTypeUtil.java index 598594241bb..3d26c222c67 100644 --- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/AdminGuiConfigTypeUtil.java +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/util/AdminGuiConfigTypeUtil.java @@ -168,6 +168,12 @@ public static DashboardWidgetType findWidget(DashboardLayoutType dashboard, Stri return null; } + /* + the ordering algorithm is: the first level is occupied by + the column which previousColumn == null || "" || notExistingColumnNameValue. + Each next level contains columns which + previousColumn == columnNameFromPreviousLevel + */ public static List orderCustomColumns(List customColumns){ if (customColumns == null || customColumns.size() == 0){ return new ArrayList<>(); @@ -186,6 +192,7 @@ public static List orderCustomColumns(List temp = new ArrayList<> (); int index = 0; while (index < customColumns.size()){ + int sortFrom = index; for (int i = index; i < customColumnsList.size(); i++){ GuiObjectColumnType column = customColumnsList.get(i); if (previousColumnValues.contains(column.getPreviousColumn()) || @@ -199,6 +206,15 @@ public static List orderCustomColumns(List 1){ + Collections.sort(customColumnsList.subList(sortFrom, index - 1), new Comparator() { + + @Override + public int compare(GuiObjectColumnType o1, GuiObjectColumnType o2) { + return String.CASE_INSENSITIVE_ORDER.compare(o1.getName(), o2.getName()); + } + }); + } previousColumnValues.clear(); previousColumnValues.addAll(temp); temp.clear();