in client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/search/SearchClausePanel.java [390:635]
public FieldPanel<SearchClause> settingsDependingComponents() {
SearchClause searchClause = this.clause.getObject();
WebMarkupContainer operatorContainer = new WebMarkupContainer("operatorContainer");
operatorContainer.setOutputMarkupId(true);
field.add(operatorContainer);
BootstrapToggleConfig config = new BootstrapToggleConfig().
withStyle("mt-1").
withOnStyle(BootstrapToggleConfig.Style.info).
withOffStyle(BootstrapToggleConfig.Style.warning).
withSize(BootstrapToggleConfig.Size.small);
operatorFragment.add(new BootstrapToggle("operator", new Model<>() {
private static final long serialVersionUID = -7157802546272668001L;
@Override
public Boolean getObject() {
return searchClause.getOperator() == Operator.AND;
}
@Override
public void setObject(final Boolean object) {
searchClause.setOperator(object ? Operator.AND : Operator.OR);
}
}, config) {
private static final long serialVersionUID = 2969634208049189343L;
@Override
protected IModel<String> getOffLabel() {
return Model.of("OR");
}
@Override
protected IModel<String> getOnLabel() {
return Model.of("AND");
}
@Override
protected CheckBox newCheckBox(final String id, final IModel<Boolean> model) {
CheckBox checkBox = super.newCheckBox(id, model);
checkBox.add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
private static final long serialVersionUID = 18266219802290L;
@Override
protected void onUpdate(final AjaxRequestTarget target) {
}
});
return checkBox;
}
}.setOutputMarkupPlaceholderTag(true));
if (getIndex() > 0) {
operatorContainer.add(operatorFragment);
} else {
operatorContainer.add(searchButtonFragment);
}
AjaxTextFieldPanel property = new AjaxTextFieldPanel("property", "property",
new PropertyModel<>(searchClause, "property"), true) {
private static final long serialVersionUID = -7157802546272668001L;
@Override
protected Optional<IConverter<String>> getConverter() {
return Optional.of(new IConverter<String>() {
private static final long serialVersionUID = -2754107934642211828L;
@Override
public String convertToObject(final String label, final Locale locale) throws ConversionException {
return properties.getObject().stream().
filter(property -> property.getValue().equalsIgnoreCase(label)).
findFirst().
map(Pair::getKey).
orElse(label);
}
@Override
public String convertToString(final String key, final Locale locale) {
return properties.getObject().stream().
filter(property -> property.getKey().equalsIgnoreCase(key)).
findFirst().
map(Pair::getValue).
orElse(key);
}
});
}
};
property.hideLabel().setOutputMarkupId(true).setEnabled(true);
property.setChoices(properties.getObject().stream().map(Pair::getValue).collect(Collectors.toList()));
field.add(property);
property.getField().add(PREVENT_DEFAULT_RETURN);
property.getField().add(new IndicatorAjaxEventBehavior(Constants.ON_KEYUP) {
private static final long serialVersionUID = -957948639666058749L;
@Override
protected void onEvent(final AjaxRequestTarget target) {
if (field.getModel().getObject() != null
&& field.getModel().getObject().getType() == Type.GROUP_MEMBERSHIP) {
String[] inputAsArray = property.getField().getInputAsArray();
if (ArrayUtils.isEmpty(inputAsArray)) {
property.setChoices(properties.getObject().stream().map(Pair::getKey)
.collect(Collectors.toList()));
} else if (groupInfo.getRight().getObject() > Constants.MAX_GROUP_LIST_SIZE) {
String inputValue = inputAsArray.length > 1 && inputAsArray[1] != null
? inputAsArray[1]
: property.getField().getInput();
if (!inputValue.startsWith("*")) {
inputValue = "*" + inputValue;
}
if (!inputValue.endsWith("*")) {
inputValue += "*";
}
property.setChoices(groupRestClient.search(
SyncopeConstants.ROOT_REALM,
SyncopeClient.getGroupSearchConditionBuilder().
is(Constants.NAME_FIELD_NAME).equalToIgnoreCase(inputValue).
query(),
1,
Constants.MAX_GROUP_LIST_SIZE,
new SortParam<>(Constants.NAME_FIELD_NAME, true),
null).stream().map(GroupTO::getName).collect(Collectors.toList()));
}
}
}
});
property.getField().add(new IndicatorAjaxEventBehavior(Constants.ON_KEYDOWN) {
private static final long serialVersionUID = -7133385027739964990L;
@Override
protected void onEvent(final AjaxRequestTarget target) {
target.focusComponent(null);
property.getField().inputChanged();
property.getField().validate();
if (property.getField().isValid()) {
property.getField().valid();
property.getField().updateModel();
}
}
@Override
protected void updateAjaxAttributes(final AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
AJAX_SUBMIT_ON_RETURN.accept(attributes);
}
});
AjaxDropDownChoicePanel<SearchClause.Comparator> comparator = new AjaxDropDownChoicePanel<>(
"comparator", "comparator", new PropertyModel<>(searchClause, "comparator"));
comparator.setChoices(comparators);
comparator.setNullValid(false).hideLabel().setOutputMarkupId(true);
comparator.setRequired(required);
comparator.setChoiceRenderer(getComparatorRender(field.getModel()));
field.add(comparator);
renderSearchValueField(searchClause, property);
field.addOrReplace(value);
property.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
private static final long serialVersionUID = -1107858522700306810L;
@Override
protected void onUpdate(final AjaxRequestTarget target) {
renderSearchValueField(searchClause, property);
field.addOrReplace(value);
target.add(value);
}
});
AjaxDropDownChoicePanel<SearchClause.Type> type = new AjaxDropDownChoicePanel<>(
"type", "type", new PropertyModel<>(searchClause, "type"));
type.setChoices(types).setChoiceRenderer(customizer.typeRenderer()).
hideLabel().setRequired(required).setOutputMarkupId(true);
type.setNullValid(false);
type.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
private static final long serialVersionUID = -1107858522700306810L;
@Override
protected void onUpdate(final AjaxRequestTarget target) {
final SearchClause searchClause = new SearchClause();
if (StringUtils.isNotEmpty(type.getDefaultModelObjectAsString())) {
searchClause.setType(Type.valueOf(type.getDefaultModelObjectAsString()));
}
SearchClausePanel.this.clause.setObject(searchClause);
setFieldAccess(searchClause.getType(), property, comparator, value);
// reset property value in case and just in case of change of type
property.setModelObject(StringUtils.EMPTY);
target.add(property);
target.add(comparator);
target.add(value);
}
});
field.add(type);
comparator.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
private static final long serialVersionUID = -1107858522700306810L;
@Override
protected void onUpdate(final AjaxRequestTarget target) {
if (type.getModelObject() == SearchClause.Type.ATTRIBUTE
|| type.getModelObject() == SearchClause.Type.RELATIONSHIP) {
if (comparator.getModelObject() == SearchClause.Comparator.IS_NULL
|| comparator.getModelObject() == SearchClause.Comparator.IS_NOT_NULL) {
value.setModelObject(StringUtils.EMPTY);
value.setEnabled(false);
} else {
value.setEnabled(true);
}
target.add(value);
}
if (type.getModelObject() == SearchClause.Type.RELATIONSHIP) {
property.setEnabled(true);
SearchClause searchClause = new SearchClause();
searchClause.setType(Type.valueOf(type.getDefaultModelObjectAsString()));
searchClause.setComparator(comparator.getModelObject());
SearchClausePanel.this.clause.setObject(searchClause);
target.add(property);
}
}
});
setFieldAccess(searchClause.getType(), property, comparator, value);
return this;
}