package org.ovirt.engine.ui.webadmin.section.main.presenter; import org.ovirt.engine.ui.uicommonweb.models.CommonModel; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.event.dom.client.HasKeyDownHandlers; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.shared.EventBus; import com.google.inject.Inject; import com.google.inject.Provider; import com.gwtplatform.mvp.client.PresenterWidget; import com.gwtplatform.mvp.client.View; public class SearchPanelPresenterWidget extends PresenterWidget<SearchPanelPresenterWidget.ViewDef> { public interface ViewDef extends View { String getSearchString(); void setSearchString(String searchString); void setSearchStringPrefix(String searchStringPrefix); void setHasSearchStringPrefix(boolean hasSearchStringPrefix); void setHasSelectedTags(boolean hasSelectedTags); HasClickHandlers getBookmarkButton(); HasClickHandlers getClearButton(); HasClickHandlers getSearchButton(); HasKeyDownHandlers getSearchInputHandlers(); void hideSuggestionBox(); void enableSearchBar(boolean status); void setCommonModel(CommonModel commonModel); } private CommonModel commonModel; private final Provider<CommonModel> commonProvider; @Inject public SearchPanelPresenterWidget(EventBus eventBus, ViewDef view, Provider<CommonModel> commonProvider) { super(eventBus, view); this.commonProvider = commonProvider; updateCommonModel(); addCommonModelListeners(); } void updateCommonModel() { commonModel = commonProvider.get(); getView().setCommonModel(commonModel); } void addCommonModelListeners() { commonModel.getPropertyChangedEvent().addListener((ev, sender, args) -> { // Update search string when 'SearchString' property changes if ("SearchString".equals(args.propertyName)) { //$NON-NLS-1$ updateViewSearchString(); } // Update search string prefix when 'SearchStringPrefix' property changes else if ("SearchStringPrefix".equals(args.propertyName)) { //$NON-NLS-1$ updateViewSearchStringPrefix(); } // Update search string prefix visibility when 'HasSearchStringPrefix' property changes else if ("HasSearchStringPrefix".equals(args.propertyName)) { //$NON-NLS-1$ updateViewHasSearchStringPrefix(); } else if ("HasSelectedTags".equals(args.propertyName)) { //$NON-NLS-1$ updateViewHasSelectedTags(); } else if ("SearchEnabled".equals(args.propertyName)) { //$NON-NLS-1$ updateViewSearchEnabled(); } }); } @Override protected void onBind() { super.onBind(); registerHandler(getView().getBookmarkButton().addClickHandler(event -> commonModel.getBookmarkList().getNewCommand().execute())); registerHandler(getView().getClearButton().addClickHandler(event -> commonModel.getClearSearchStringCommand().execute())); registerHandler(getView().getSearchButton().addClickHandler(event -> updateModelSearchString())); registerHandler(getView().getSearchInputHandlers().addKeyDownHandler(event -> { if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { updateModelSearchString(); } else if (event.getNativeKeyCode() == KeyCodes.KEY_ESCAPE) { getView().hideSuggestionBox(); } })); } @Override protected void onReveal() { super.onReveal(); updateViewSearchString(); updateViewSearchStringPrefix(); updateViewHasSearchStringPrefix(); } void updateModelSearchString() { commonModel.setSearchString(getView().getSearchString()); commonModel.search(); } void updateViewSearchString() { getView().setSearchString(commonModel.getSearchString()); } void updateViewSearchStringPrefix() { getView().setSearchStringPrefix(commonModel.getSearchStringPrefix()); } void updateViewHasSearchStringPrefix() { getView().setHasSearchStringPrefix(commonModel.getHasSearchStringPrefix()); } void updateViewHasSelectedTags() { getView().setHasSelectedTags(commonModel.getHasSelectedTags()); } void updateViewSearchEnabled() { getView().enableSearchBar(commonModel.getSearchEnabled()); } }