This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 4_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/4_1_X by this push:
new 101c2969e0 Fixing ordering issues with display columns for Realms and
Anys
101c2969e0 is described below
commit 101c2969e02ce124e98cf6d1b880784c3d54ddd9
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Thu Mar 5 09:58:00 2026 +0100
Fixing ordering issues with display columns for Realms and Anys
---
.../syncope/client/console/PreferenceManager.java | 2 -
.../panels/AnyDisplayAttributesModalPanel.java | 2 +-
.../console/panels/AnyObjectDirectoryPanel.java | 5 +-
.../client/console/panels/GroupDirectoryPanel.java | 5 +-
.../panels/GroupDisplayAttributesModalPanel.java | 1 +
.../client/console/panels/RealmDirectoryPanel.java | 84 +++++++++++++++-------
.../panels/RealmDisplayAttributesModalPanel.java | 7 +-
.../client/console/panels/UserDirectoryPanel.java | 5 +-
.../panels/UserDisplayAttributesModalPanel.java | 1 +
9 files changed, 72 insertions(+), 40 deletions(-)
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java
index ad6c0f49c6..3624b6e34e 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java
@@ -25,7 +25,6 @@ import java.io.Serializable;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Base64;
-import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -121,7 +120,6 @@ public final class PreferenceManager implements
Serializable {
result.addAll(List.of(items));
}
- Collections.sort(result);
return result;
}
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDisplayAttributesModalPanel.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDisplayAttributesModalPanel.java
index 3d62cce046..46100a2845 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDisplayAttributesModalPanel.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDisplayAttributesModalPanel.java
@@ -51,7 +51,7 @@ public abstract class AnyDisplayAttributesModalPanel<T
extends Serializable> ext
super(
modal,
pageRef,
-
SearchableFields.get(getTOClass(type)).keySet().stream().toList(),
+
SearchableFields.get(getTOClass(type)).keySet().stream().sorted().toList(),
pSchemaNames,
dSchemaNames,
getPrefDetailView(type),
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
index f8fa5d00a2..848d9a48f5 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java
@@ -20,7 +20,6 @@ package org.apache.syncope.client.console.panels;
import java.io.Serializable;
import java.util.List;
-import java.util.stream.Collectors;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.syncope.client.console.SyncopeConsoleSession;
import org.apache.syncope.client.console.SyncopeWebApplication;
@@ -90,8 +89,8 @@ public class AnyObjectDirectoryPanel extends
AnyDirectoryPanel<AnyObjectTO, AnyO
target.add(displayAttributeModal.setContent(new
AnyObjectDisplayAttributesModalPanel<>(
displayAttributeModal,
page.getPageReference(),
-
plainSchemas.stream().map(PlainSchemaTO::getKey).collect(Collectors.toList()),
-
derSchemas.stream().map(DerSchemaTO::getKey).collect(Collectors.toList()),
+
plainSchemas.stream().map(PlainSchemaTO::getKey).sorted().toList(),
+
derSchemas.stream().map(DerSchemaTO::getKey).sorted().toList(),
type)));
displayAttributeModal.addSubmitButton();
displayAttributeModal.header(new
ResourceModel("any.attr.display"));
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
index 96f8f872f3..76c47bfacd 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java
@@ -21,7 +21,6 @@ package org.apache.syncope.client.console.panels;
import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
import java.io.Serializable;
import java.util.List;
-import java.util.stream.Collectors;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.client.console.SyncopeConsoleSession;
@@ -226,8 +225,8 @@ public class GroupDirectoryPanel extends
AnyDirectoryPanel<GroupTO, GroupRestCli
target.add(displayAttributeModal.setContent(new
GroupDisplayAttributesModalPanel<>(
displayAttributeModal,
page.getPageReference(),
-
plainSchemas.stream().map(PlainSchemaTO::getKey).collect(Collectors.toList()),
-
derSchemas.stream().map(DerSchemaTO::getKey).collect(Collectors.toList()))));
+
plainSchemas.stream().map(PlainSchemaTO::getKey).sorted().toList(),
+
derSchemas.stream().map(DerSchemaTO::getKey).sorted().toList())));
displayAttributeModal.header(new
ResourceModel("any.attr.display"));
displayAttributeModal.show(true);
}
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
index e6a0472d73..cd80da5313 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java
@@ -41,6 +41,7 @@ public class GroupDisplayAttributesModalPanel<T extends
Serializable> extends An
final PageReference pageRef,
final List<String> schemaNames,
final List<String> dSchemaNames) {
+
super(modal, pageRef, schemaNames, dSchemaNames,
AnyTypeKind.GROUP.name());
}
}
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDirectoryPanel.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDirectoryPanel.java
index 35803257ab..c2b3a3c2b6 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDirectoryPanel.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDirectoryPanel.java
@@ -20,9 +20,12 @@ package org.apache.syncope.client.console.panels;
import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
import java.io.Serializable;
+import java.lang.reflect.Field;
+import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
@@ -45,6 +48,8 @@ import
org.apache.syncope.client.console.rest.SchemaRestClient;
import org.apache.syncope.client.console.tasks.RealmPropagationTasks;
import org.apache.syncope.client.console.tasks.TemplatesTogglePanel;
import
org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
+import
org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
+import
org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
import
org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
import
org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
@@ -83,6 +88,7 @@ import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
+import org.springframework.util.ReflectionUtils;
public class RealmDirectoryPanel
extends DirectoryPanel<RealmTO, RealmTO,
RealmDirectoryPanel.RealmDataProvider, RealmRestClient> {
@@ -154,35 +160,63 @@ public class RealmDirectoryPanel
@Override
protected List<IColumn<RealmTO, String>> getColumns() {
- List<String> selectedColumns =
PreferenceManager.getList(IdRepoConstants.PREF_REALM_DETAILS_VIEW);
-
selectedColumns.retainAll(RealmDisplayAttributesModalPanel.AVAILABLE_COLUMNS);
- if (selectedColumns.isEmpty()) {
- selectedColumns = new
ArrayList<>(RealmDisplayAttributesModalPanel.DEFAULT_COLUMNS);
- PreferenceManager.setList(IdRepoConstants.PREF_REALM_DETAILS_VIEW,
selectedColumns);
- }
- List<String> selectedPlainSchemas =
PreferenceManager.getList(IdRepoConstants.PREF_REALM_PLAIN_ATTRS_VIEW);
-
selectedPlainSchemas.retainAll(plainSchemas.stream().map(PlainSchemaTO::getKey).toList());
+ List<IColumn<RealmTO, String>> columns = new ArrayList<>();
+ columns.add(new KeyPropertyColumn<>(
+ new ResourceModel(Constants.KEY_FIELD_NAME,
Constants.KEY_FIELD_NAME), Constants.KEY_FIELD_NAME));
+
+ List<IColumn<RealmTO, String>> prefcolumns = new ArrayList<>();
+
PreferenceManager.getList(IdRepoConstants.PREF_REALM_DETAILS_VIEW).stream().
+ filter(name ->
!Constants.KEY_FIELD_NAME.equalsIgnoreCase(name)).
+ forEach(name -> addPropertyColumn(
+ name,
+ ReflectionUtils.findField(RealmTO.class, name),
+ prefcolumns));
+
+
PreferenceManager.getList(IdRepoConstants.PREF_REALM_PLAIN_ATTRS_VIEW).stream().
+ map(a -> plainSchemas.stream().filter(p ->
p.getKey().equals(a)).findFirst()).
+ flatMap(Optional::stream).
+ forEach(s -> prefcolumns.add(new AttrColumn<>(
+ s.getKey(),
s.getLabel(SyncopeConsoleSession.get().getLocale()), SchemaType.PLAIN)));
+
+
PreferenceManager.getList(IdRepoConstants.PREF_REALM_DER_ATTRS_VIEW).stream().
+ map(a -> derSchemas.stream().filter(p ->
p.getKey().equals(a)).findFirst()).
+ flatMap(Optional::stream).
+ forEach(s -> prefcolumns.add(new AttrColumn<>(
+ s.getKey(),
s.getLabel(SyncopeConsoleSession.get().getLocale()), SchemaType.DERIVED)));
+
+ // Add defaults in case of no selection
+ if (prefcolumns.isEmpty()) {
+ for (String name :
RealmDisplayAttributesModalPanel.DEFAULT_COLUMNS) {
+ addPropertyColumn(
+ name,
+ ReflectionUtils.findField(RealmTO.class, name),
+ prefcolumns);
+ }
- List<String> selectedDerSchemas =
PreferenceManager.getList(IdRepoConstants.PREF_REALM_DER_ATTRS_VIEW);
-
selectedDerSchemas.retainAll(derSchemas.stream().map(DerSchemaTO::getKey).toList());
+ PreferenceManager.setList(
+ IdRepoConstants.PREF_REALM_DETAILS_VIEW,
+ RealmDisplayAttributesModalPanel.DEFAULT_COLUMNS);
+ }
- List<IColumn<RealmTO, String>> columns = new ArrayList<>();
- selectedColumns.forEach(column -> addPropertyColumn(column, columns));
- plainSchemas.stream().
- filter(schema ->
selectedPlainSchemas.contains(schema.getKey())).
- forEach(schema -> columns.add(new AttrColumn<>(
- schema.getKey(), schema.getLabel(getLocale()),
SchemaType.PLAIN)));
-
- derSchemas.stream().
- filter(schema -> selectedDerSchemas.contains(schema.getKey())).
- forEach(schema -> columns.add(new AttrColumn<>(
- schema.getKey(), schema.getLabel(getLocale()),
SchemaType.DERIVED)));
+ columns.addAll(prefcolumns);
return columns;
}
- protected void addPropertyColumn(final String name, final
List<IColumn<RealmTO, String>> columns) {
+ protected void addPropertyColumn(
+ final String name,
+ final Field field,
+ final List<IColumn<RealmTO, String>> columns) {
+
if (Constants.KEY_FIELD_NAME.equalsIgnoreCase(name)) {
- columns.add(new KeyPropertyColumn<>(new
StringResourceModel(Constants.KEY_FIELD_NAME, this), name));
+ columns.add(new KeyPropertyColumn<>(new ResourceModel(name, name),
name, name));
+ } else if (field != null && !field.isSynthetic()
+ && (field.getType().equals(Boolean.class) ||
field.getType().equals(boolean.class))) {
+
+ columns.add(new BooleanPropertyColumn<>(new ResourceModel(name,
name), name, name));
+ } else if (field != null && !field.isSynthetic()
+ && (field.getType().equals(Date.class) ||
field.getType().equals(OffsetDateTime.class))) {
+
+ columns.add(new DatePropertyColumn<>(new ResourceModel(name,
name), name, name));
} else {
columns.add(new PropertyColumn<>(new ResourceModel(name, name),
name, name));
}
@@ -201,8 +235,8 @@ public class RealmDirectoryPanel
displayAttributeModal,
page.getPageReference(),
RealmDisplayAttributesModalPanel.AVAILABLE_COLUMNS,
-
plainSchemas.stream().map(PlainSchemaTO::getKey).toList(),
-
derSchemas.stream().map(DerSchemaTO::getKey).toList())));
+
plainSchemas.stream().map(PlainSchemaTO::getKey).sorted().toList(),
+
derSchemas.stream().map(DerSchemaTO::getKey).sorted().toList())));
displayAttributeModal.header(new
ResourceModel("any.attr.display"));
displayAttributeModal.show(true);
}
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDisplayAttributesModalPanel.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDisplayAttributesModalPanel.java
index 018b9cc668..4d2a1e3502 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDisplayAttributesModalPanel.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDisplayAttributesModalPanel.java
@@ -36,16 +36,16 @@ public class RealmDisplayAttributesModalPanel<T extends
Serializable> extends Ab
"parent",
"plainAttrs",
"derAttrs",
- "templates",
"accountPolicy",
"passwordPolicy",
"authPolicy",
"accessPolicy",
"attrReleasePolicy",
- "ticketExpirationPolicy");
+ "ticketExpirationPolicy",
+ "actions",
+ "templates");
protected static final List<String> DEFAULT_COLUMNS = List.of(
- Constants.KEY_FIELD_NAME,
Constants.NAME_FIELD_NAME,
"fullPath",
"anyTypeClasses");
@@ -54,6 +54,7 @@ public class RealmDisplayAttributesModalPanel<T extends
Serializable> extends Ab
filter(field -> !Modifier.isStatic(field.getModifiers())).
map(Field::getName).
filter(fieldName -> !EXCLUDED_COLUMNS.contains(fieldName)).
+ sorted().
toList();
private static final long serialVersionUID = 4055453846383559861L;
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
index ef5dea5ba2..e2944e20cb 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
@@ -23,7 +23,6 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import java.util.stream.Collectors;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.syncope.client.console.SyncopeConsoleSession;
import org.apache.syncope.client.console.SyncopeWebApplication;
@@ -110,8 +109,8 @@ public class UserDirectoryPanel extends
AnyDirectoryPanel<UserTO, UserRestClient
target.add(displayAttributeModal.setContent(new
UserDisplayAttributesModalPanel<>(
displayAttributeModal,
page.getPageReference(),
-
plainSchemas.stream().map(PlainSchemaTO::getKey).collect(Collectors.toList()),
-
derSchemas.stream().map(DerSchemaTO::getKey).collect(Collectors.toList()))));
+
plainSchemas.stream().map(PlainSchemaTO::getKey).sorted().toList(),
+
derSchemas.stream().map(DerSchemaTO::getKey).sorted().toList())));
displayAttributeModal.header(new
ResourceModel("any.attr.display"));
displayAttributeModal.addSubmitButton();
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
index 7863e292f0..580c33b635 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java
@@ -41,6 +41,7 @@ public class UserDisplayAttributesModalPanel<T extends
Serializable> extends Any
final PageReference pageRef,
final List<String> schemaNames,
final List<String> dSchemaNames) {
+
super(modal, pageRef, schemaNames, dSchemaNames,
AnyTypeKind.USER.name());
}
}