package org.ovirt.engine.ui.common.widget.editor; import org.ovirt.engine.ui.common.widget.editor.ListModelTypeAheadListBoxEditor.SuggestBoxRenderer; import org.ovirt.engine.ui.uicompat.external.StringUtils; /** * SuggestBox widget that adapts to UiCommon list model items and looks like a list box. The suggestion content can be rich (html). * <p> * Allows the user to edit the textbox without any enforcement. */ public class ListModelTypeAheadChangeableListBox extends ListModelTypeAheadListBox<String> { private String nullReplacementText; public ListModelTypeAheadChangeableListBox(SuggestBoxRenderer<String> renderer) { this(renderer, true, null); } public ListModelTypeAheadChangeableListBox(SuggestBoxRenderer<String> renderer, boolean autoAddToValidValues, String nullReplacementText) { super(renderer, autoAddToValidValues, new SuggestionMatcher.StartWithSuggestionMatcher()); if (nullReplacementText == null) { this.nullReplacementText = ""; //$NON-NLS-1$ } else { this.nullReplacementText = nullReplacementText; } } @Override protected void adjustSelectedValue() { String providedText = asSuggestBox().getText(); String newData = asEntity(providedText); setValue(newData); } @Override protected String asEntity(String provided) { return provided == null ? "" : provided; } @Override protected void render(String value, boolean fireEvents) { boolean isEmptyReplace = StringUtils.isEmpty(value) || value.equals(nullReplacementText); // handle null replacement asSuggestBox().setValue(isEmptyReplace ? nullReplacementText : value, fireEvents); grayOutPlaceholderText(isEmptyReplace); } protected void setNullReplacementString(String nullReplacementText) { this.nullReplacementText = nullReplacementText; } }