Skip to content

Commit d581778

Browse files
committed
Fixing ordering issues with display columns for Realms and Anys
1 parent 9e1ab1b commit d581778

9 files changed

Lines changed: 72 additions & 40 deletions

‎client/idrepo/console/src/main/java/org/apache/syncope/client/console/PreferenceManager.java‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import java.io.StringWriter;
2626
import java.util.ArrayList;
2727
import java.util.Base64;
28-
import java.util.Collections;
2928
import java.util.HashMap;
3029
import java.util.List;
3130
import java.util.Map;
@@ -121,7 +120,6 @@ public static List<String> getList(final String key) {
121120
result.addAll(List.of(items));
122121
}
123122

124-
Collections.sort(result);
125123
return result;
126124
}
127125

‎client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyDisplayAttributesModalPanel.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ protected AnyDisplayAttributesModalPanel(
5151
super(
5252
modal,
5353
pageRef,
54-
SearchableFields.get(getTOClass(type)).keySet().stream().toList(),
54+
SearchableFields.get(getTOClass(type)).keySet().stream().sorted().toList(),
5555
pSchemaNames,
5656
dSchemaNames,
5757
getPrefDetailView(type),

‎client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/AnyObjectDirectoryPanel.java‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import java.io.Serializable;
2222
import java.util.List;
23-
import java.util.stream.Collectors;
2423
import org.apache.commons.lang3.SerializationUtils;
2524
import org.apache.syncope.client.console.SyncopeConsoleSession;
2625
import org.apache.syncope.client.console.SyncopeWebApplication;
@@ -90,8 +89,8 @@ public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
9089
target.add(displayAttributeModal.setContent(new AnyObjectDisplayAttributesModalPanel<>(
9190
displayAttributeModal,
9291
page.getPageReference(),
93-
plainSchemas.stream().map(PlainSchemaTO::getKey).collect(Collectors.toList()),
94-
derSchemas.stream().map(DerSchemaTO::getKey).collect(Collectors.toList()),
92+
plainSchemas.stream().map(PlainSchemaTO::getKey).sorted().toList(),
93+
derSchemas.stream().map(DerSchemaTO::getKey).sorted().toList(),
9594
type)));
9695
displayAttributeModal.addSubmitButton();
9796
displayAttributeModal.header(new ResourceModel("any.attr.display"));

‎client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDirectoryPanel.java‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
2222
import java.io.Serializable;
2323
import java.util.List;
24-
import java.util.stream.Collectors;
2524
import org.apache.commons.lang3.SerializationUtils;
2625
import org.apache.commons.lang3.tuple.Pair;
2726
import org.apache.syncope.client.console.SyncopeConsoleSession;
@@ -226,8 +225,8 @@ public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
226225
target.add(displayAttributeModal.setContent(new GroupDisplayAttributesModalPanel<>(
227226
displayAttributeModal,
228227
page.getPageReference(),
229-
plainSchemas.stream().map(PlainSchemaTO::getKey).collect(Collectors.toList()),
230-
derSchemas.stream().map(DerSchemaTO::getKey).collect(Collectors.toList()))));
228+
plainSchemas.stream().map(PlainSchemaTO::getKey).sorted().toList(),
229+
derSchemas.stream().map(DerSchemaTO::getKey).sorted().toList())));
231230
displayAttributeModal.header(new ResourceModel("any.attr.display"));
232231
displayAttributeModal.show(true);
233232
}

‎client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/GroupDisplayAttributesModalPanel.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public GroupDisplayAttributesModalPanel(
4141
final PageReference pageRef,
4242
final List<String> schemaNames,
4343
final List<String> dSchemaNames) {
44+
4445
super(modal, pageRef, schemaNames, dSchemaNames, AnyTypeKind.GROUP.name());
4546
}
4647
}

‎client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDirectoryPanel.java‎

Lines changed: 59 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@
2020

2121
import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
2222
import java.io.Serializable;
23+
import java.lang.reflect.Field;
24+
import java.time.OffsetDateTime;
2325
import java.util.ArrayList;
2426
import java.util.Collection;
2527
import java.util.Collections;
28+
import java.util.Date;
2629
import java.util.Iterator;
2730
import java.util.List;
2831
import java.util.Optional;
@@ -45,6 +48,8 @@
4548
import org.apache.syncope.client.console.tasks.RealmPropagationTasks;
4649
import org.apache.syncope.client.console.tasks.TemplatesTogglePanel;
4750
import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
51+
import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.BooleanPropertyColumn;
52+
import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.DatePropertyColumn;
4853
import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.KeyPropertyColumn;
4954
import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
5055
import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
@@ -83,6 +88,7 @@
8388
import org.apache.wicket.request.cycle.RequestCycle;
8489
import org.apache.wicket.request.mapper.parameter.PageParameters;
8590
import org.apache.wicket.spring.injection.annot.SpringBean;
91+
import org.springframework.util.ReflectionUtils;
8692

8793
public class RealmDirectoryPanel
8894
extends DirectoryPanel<RealmTO, RealmTO, RealmDirectoryPanel.RealmDataProvider, RealmRestClient> {
@@ -154,35 +160,63 @@ protected String paginatorRowsKey() {
154160

155161
@Override
156162
protected List<IColumn<RealmTO, String>> getColumns() {
157-
List<String> selectedColumns = PreferenceManager.getList(IdRepoConstants.PREF_REALM_DETAILS_VIEW);
158-
selectedColumns.retainAll(RealmDisplayAttributesModalPanel.AVAILABLE_COLUMNS);
159-
if (selectedColumns.isEmpty()) {
160-
selectedColumns = new ArrayList<>(RealmDisplayAttributesModalPanel.DEFAULT_COLUMNS);
161-
PreferenceManager.setList(IdRepoConstants.PREF_REALM_DETAILS_VIEW, selectedColumns);
162-
}
163-
List<String> selectedPlainSchemas = PreferenceManager.getList(IdRepoConstants.PREF_REALM_PLAIN_ATTRS_VIEW);
164-
selectedPlainSchemas.retainAll(plainSchemas.stream().map(PlainSchemaTO::getKey).toList());
163+
List<IColumn<RealmTO, String>> columns = new ArrayList<>();
164+
columns.add(new KeyPropertyColumn<>(
165+
new ResourceModel(Constants.KEY_FIELD_NAME, Constants.KEY_FIELD_NAME), Constants.KEY_FIELD_NAME));
166+
167+
List<IColumn<RealmTO, String>> prefcolumns = new ArrayList<>();
168+
PreferenceManager.getList(IdRepoConstants.PREF_REALM_DETAILS_VIEW).stream().
169+
filter(name -> !Constants.KEY_FIELD_NAME.equalsIgnoreCase(name)).
170+
forEach(name -> addPropertyColumn(
171+
name,
172+
ReflectionUtils.findField(RealmTO.class, name),
173+
prefcolumns));
174+
175+
PreferenceManager.getList(IdRepoConstants.PREF_REALM_PLAIN_ATTRS_VIEW).stream().
176+
map(a -> plainSchemas.stream().filter(p -> p.getKey().equals(a)).findFirst()).
177+
flatMap(Optional::stream).
178+
forEach(s -> prefcolumns.add(new AttrColumn<>(
179+
s.getKey(), s.getLabel(SyncopeConsoleSession.get().getLocale()), SchemaType.PLAIN)));
180+
181+
PreferenceManager.getList(IdRepoConstants.PREF_REALM_DER_ATTRS_VIEW).stream().
182+
map(a -> derSchemas.stream().filter(p -> p.getKey().equals(a)).findFirst()).
183+
flatMap(Optional::stream).
184+
forEach(s -> prefcolumns.add(new AttrColumn<>(
185+
s.getKey(), s.getLabel(SyncopeConsoleSession.get().getLocale()), SchemaType.DERIVED)));
186+
187+
// Add defaults in case of no selection
188+
if (prefcolumns.isEmpty()) {
189+
for (String name : RealmDisplayAttributesModalPanel.DEFAULT_COLUMNS) {
190+
addPropertyColumn(
191+
name,
192+
ReflectionUtils.findField(RealmTO.class, name),
193+
prefcolumns);
194+
}
165195

166-
List<String> selectedDerSchemas = PreferenceManager.getList(IdRepoConstants.PREF_REALM_DER_ATTRS_VIEW);
167-
selectedDerSchemas.retainAll(derSchemas.stream().map(DerSchemaTO::getKey).toList());
196+
PreferenceManager.setList(
197+
IdRepoConstants.PREF_REALM_DETAILS_VIEW,
198+
RealmDisplayAttributesModalPanel.DEFAULT_COLUMNS);
199+
}
168200

169-
List<IColumn<RealmTO, String>> columns = new ArrayList<>();
170-
selectedColumns.forEach(column -> addPropertyColumn(column, columns));
171-
plainSchemas.stream().
172-
filter(schema -> selectedPlainSchemas.contains(schema.getKey())).
173-
forEach(schema -> columns.add(new AttrColumn<>(
174-
schema.getKey(), schema.getLabel(getLocale()), SchemaType.PLAIN)));
175-
176-
derSchemas.stream().
177-
filter(schema -> selectedDerSchemas.contains(schema.getKey())).
178-
forEach(schema -> columns.add(new AttrColumn<>(
179-
schema.getKey(), schema.getLabel(getLocale()), SchemaType.DERIVED)));
201+
columns.addAll(prefcolumns);
180202
return columns;
181203
}
182204

183-
protected void addPropertyColumn(final String name, final List<IColumn<RealmTO, String>> columns) {
205+
protected void addPropertyColumn(
206+
final String name,
207+
final Field field,
208+
final List<IColumn<RealmTO, String>> columns) {
209+
184210
if (Constants.KEY_FIELD_NAME.equalsIgnoreCase(name)) {
185-
columns.add(new KeyPropertyColumn<>(new StringResourceModel(Constants.KEY_FIELD_NAME, this), name));
211+
columns.add(new KeyPropertyColumn<>(new ResourceModel(name, name), name, name));
212+
} else if (field != null && !field.isSynthetic()
213+
&& (field.getType().equals(Boolean.class) || field.getType().equals(boolean.class))) {
214+
215+
columns.add(new BooleanPropertyColumn<>(new ResourceModel(name, name), name, name));
216+
} else if (field != null && !field.isSynthetic()
217+
&& (field.getType().equals(Date.class) || field.getType().equals(OffsetDateTime.class))) {
218+
219+
columns.add(new DatePropertyColumn<>(new ResourceModel(name, name), name, name));
186220
} else {
187221
columns.add(new PropertyColumn<>(new ResourceModel(name, name), name, name));
188222
}
@@ -201,8 +235,8 @@ public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
201235
displayAttributeModal,
202236
page.getPageReference(),
203237
RealmDisplayAttributesModalPanel.AVAILABLE_COLUMNS,
204-
plainSchemas.stream().map(PlainSchemaTO::getKey).toList(),
205-
derSchemas.stream().map(DerSchemaTO::getKey).toList())));
238+
plainSchemas.stream().map(PlainSchemaTO::getKey).sorted().toList(),
239+
derSchemas.stream().map(DerSchemaTO::getKey).sorted().toList())));
206240
displayAttributeModal.header(new ResourceModel("any.attr.display"));
207241
displayAttributeModal.show(true);
208242
}

‎client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/RealmDisplayAttributesModalPanel.java‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,16 @@ public class RealmDisplayAttributesModalPanel<T extends Serializable> extends Ab
3636
"parent",
3737
"plainAttrs",
3838
"derAttrs",
39-
"templates",
4039
"accountPolicy",
4140
"passwordPolicy",
4241
"authPolicy",
4342
"accessPolicy",
4443
"attrReleasePolicy",
45-
"ticketExpirationPolicy");
44+
"ticketExpirationPolicy",
45+
"actions",
46+
"templates");
4647

4748
protected static final List<String> DEFAULT_COLUMNS = List.of(
48-
Constants.KEY_FIELD_NAME,
4949
Constants.NAME_FIELD_NAME,
5050
"fullPath",
5151
"anyTypeClasses");
@@ -54,6 +54,7 @@ public class RealmDisplayAttributesModalPanel<T extends Serializable> extends Ab
5454
filter(field -> !Modifier.isStatic(field.getModifiers())).
5555
map(Field::getName).
5656
filter(fieldName -> !EXCLUDED_COLUMNS.contains(fieldName)).
57+
sorted().
5758
toList();
5859

5960
private static final long serialVersionUID = 4055453846383559861L;

‎client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.util.ArrayList;
2424
import java.util.Collection;
2525
import java.util.List;
26-
import java.util.stream.Collectors;
2726
import org.apache.commons.lang3.SerializationUtils;
2827
import org.apache.syncope.client.console.SyncopeConsoleSession;
2928
import org.apache.syncope.client.console.SyncopeWebApplication;
@@ -110,8 +109,8 @@ public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
110109
target.add(displayAttributeModal.setContent(new UserDisplayAttributesModalPanel<>(
111110
displayAttributeModal,
112111
page.getPageReference(),
113-
plainSchemas.stream().map(PlainSchemaTO::getKey).collect(Collectors.toList()),
114-
derSchemas.stream().map(DerSchemaTO::getKey).collect(Collectors.toList()))));
112+
plainSchemas.stream().map(PlainSchemaTO::getKey).sorted().toList(),
113+
derSchemas.stream().map(DerSchemaTO::getKey).sorted().toList())));
115114

116115
displayAttributeModal.header(new ResourceModel("any.attr.display"));
117116
displayAttributeModal.addSubmitButton();

‎client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDisplayAttributesModalPanel.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public UserDisplayAttributesModalPanel(
4141
final PageReference pageRef,
4242
final List<String> schemaNames,
4343
final List<String> dSchemaNames) {
44+
4445
super(modal, pageRef, schemaNames, dSchemaNames, AnyTypeKind.USER.name());
4546
}
4647
}

0 commit comments

Comments
 (0)