public SearchClausePanel()

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();
                }
            }
        };
    }