in client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java [180:335]
public SearchClausePanel(
final String id,
final String name,
final Model<SearchClause> clause,
final boolean required,
final IModel<List<SearchClause.Type>> types,
final Customizer customizer,
final IModel<Map<String, PlainSchemaTO>> anames,
final IModel<Map<String, PlainSchemaTO>> dnames,
final Pair<IModel<List<String>>, IModel<Long>> groupInfo,
final IModel<List<String>> roleNames,
final IModel<List<String>> auxClassNames,
final IModel<List<String>> resourceNames) {
super(id, name, clause);
this.clause = clause == null ? new Model<>(null) : clause;
this.required = required;
this.types = types;
this.customizer = customizer;
this.anames = anames;
this.dnames = dnames;
this.groupInfo = groupInfo;
this.roleNames = roleNames;
this.auxClassNames = auxClassNames;
this.resourceNames = resourceNames;
searchButton = new AjaxLink<>("search") {
private static final long serialVersionUID = 5538299138211283825L;
@Override
public void onClick(final AjaxRequestTarget target) {
if (resultContainer == null) {
send(SearchClausePanel.this, Broadcast.BUBBLE, new SearchEvent(target));
} else {
send(resultContainer, Broadcast.EXACT, new SearchEvent(target));
}
}
};
searchButtonFragment = new Fragment("operator", "searchButtonFragment", this);
searchButtonFragment.add(searchButton.setEnabled(false).setVisible(false));
operatorFragment = new Fragment("operator", "operatorFragment", this);
field = new FormComponent<>("container", this.clause) {
private static final long serialVersionUID = -8204140666393922700L;
};
add(field);
comparators = new LoadableDetachableModel<>() {
private static final long serialVersionUID = 5275935387613157437L;
@Override
protected List<Comparator> load() {
if (field.getModel().getObject() == null || field.getModel().getObject().getType() == null) {
return List.of();
}
switch (field.getModel().getObject().getType()) {
case ATTRIBUTE:
return List.of(SearchClause.Comparator.values());
case AUX_CLASS:
case ROLE_MEMBERSHIP:
case GROUP_MEMBERSHIP:
case GROUP_MEMBER:
case RESOURCE:
return List.of(
SearchClause.Comparator.EQUALS,
SearchClause.Comparator.NOT_EQUALS);
case RELATIONSHIP:
return List.of(
SearchClause.Comparator.IS_NOT_NULL,
SearchClause.Comparator.IS_NULL,
SearchClause.Comparator.EQUALS,
SearchClause.Comparator.NOT_EQUALS);
case CUSTOM:
return customizer.comparators();
default:
return List.of();
}
}
};
properties = new LoadableDetachableModel<>() {
private static final long serialVersionUID = 5275935387613157437L;
@Override
protected List<Pair<String, String>> load() {
if (field.getModel().getObject() == null || field.getModel().getObject().getType() == null) {
return List.of();
}
switch (field.getModel().getObject().getType()) {
case ATTRIBUTE:
Locale locale = SyncopeConsoleSession.get().getLocale();
List<Pair<String, String>> names = dnames.getObject().entrySet().stream().
map(item -> Pair.of(
item.getKey(),
Optional.ofNullable(item.getValue().getLabel(locale)).orElseGet(item::getKey))).
collect(Collectors.toList());
if (anames != null && !CollectionUtils.isEmpty(anames.getObject())) {
names.addAll(anames.getObject().entrySet().stream().
map(item -> Pair.of(
item.getKey(),
Optional.ofNullable(item.getValue().getLabel(locale)).orElseGet(item::getKey))).
toList());
}
return names.stream().
sorted(java.util.Comparator.comparing(name -> name.getValue().toLowerCase())).
collect(Collectors.toList());
case GROUP_MEMBERSHIP:
return groupInfo.getLeft().getObject().stream().
map(item -> Pair.of(item, item)).collect(Collectors.toList());
case ROLE_MEMBERSHIP:
return Optional.ofNullable(roleNames).
map(r -> r.getObject().stream().sorted().map(item -> Pair.of(item, item)).
collect(Collectors.toList())).
orElseGet(List::of);
case AUX_CLASS:
return auxClassNames.getObject().stream().sorted().
map(item -> Pair.of(item, item)).collect(Collectors.toList());
case RESOURCE:
return resourceNames.getObject().stream().sorted().
map(item -> Pair.of(item, item)).collect(Collectors.toList());
case RELATIONSHIP:
return relationshipTypeRestClient.list().stream().sorted().
map(item -> Pair.of(item.getKey(), item.getKey())).
collect(Collectors.toList());
case CUSTOM:
return customizer.properties().stream().
map(item -> Pair.of(item, item)).
collect(Collectors.toList());
default:
return List.of();
}
}
};
}