package org.ovirt.engine.ui.webadmin.section.main.presenter;
import org.ovirt.engine.core.compat.Event;
import org.ovirt.engine.core.compat.EventArgs;
import org.ovirt.engine.core.compat.IEventListener;
import org.ovirt.engine.core.compat.PropertyChangedEventArgs;
import org.ovirt.engine.ui.uicommonweb.models.CommonModel;
import org.ovirt.engine.ui.webadmin.uicommon.model.CommonModelChangeEvent;
import org.ovirt.engine.ui.webadmin.uicommon.model.CommonModelChangeEvent.CommonModelChangeHandler;
import org.ovirt.engine.ui.webadmin.uicommon.model.CommonModelManager;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.inject.Inject;
import com.gwtplatform.mvp.client.PresenterWidget;
import com.gwtplatform.mvp.client.View;
public class SearchPanelPresenterWidget extends PresenterWidget<SearchPanelPresenterWidget.ViewDef> implements CommonModelChangeHandler {
public interface ViewDef extends View {
String getSearchString();
String getSearchPrefixString();
void setSearchString(String searchString);
void setSearchStringPrefix(String searchStringPrefix);
void setHasSearchStringPrefix(boolean hasSearchStringPrefix);
void setHasSelectedTags(boolean hasSelectedTags);
HasClickHandlers getBookmarkButton();
HasClickHandlers getSearchButton();
HasKeyDownHandlers getSearchInputHandlers();
void hideSuggestionBox();
}
private CommonModel commonModel;
@Inject
public SearchPanelPresenterWidget(EventBus eventBus, ViewDef view) {
super(eventBus, view);
eventBus.addHandler(CommonModelChangeEvent.getType(), this);
this.commonModel = CommonModelManager.instance();
addCommonModelListeners();
}
@Override
public void onCommonModelChange(CommonModelChangeEvent event) {
commonModel = event.getCommonModel();
addCommonModelListeners();
}
void addCommonModelListeners() {
commonModel.getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
PropertyChangedEventArgs pcArgs = (PropertyChangedEventArgs) args;
// Update search string when 'SearchString' property changes
if ("SearchString".equals(pcArgs.PropertyName)) {
updateViewSearchString();
}
// Update search string prefix when 'SearchStringPrefix' property changes
else if ("SearchStringPrefix".equals(pcArgs.PropertyName)) {
updateViewSearchStringPrefix();
}
// Update search string prefix visibility when 'HasSearchStringPrefix' property changes
else if ("HasSearchStringPrefix".equals(pcArgs.PropertyName)) {
updateViewHasSearchStringPrefix();
}
else if ("HasSelectedTags".equals(pcArgs.PropertyName)) {
updateViewHasSelectedTags();
}
}
});
}
@Override
protected void onBind() {
super.onBind();
registerHandler(getView().getBookmarkButton().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
commonModel.getBookmarkList().getNewCommand().Execute();
}
}));
registerHandler(getView().getSearchButton().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
updateModelSearchString();
}
}));
registerHandler(getView().getSearchInputHandlers().addKeyDownHandler(new KeyDownHandler() {
@Override
public void onKeyDown(KeyDownEvent 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());
}
}