package org.ovirt.engine.ui.webadmin.section.main.presenter.popup;
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.ui.uicommonweb.models.users.AdElementListModel;
import org.ovirt.engine.ui.webadmin.widget.HasUiCommandClickHandlers;
import org.ovirt.engine.ui.webadmin.widget.dialog.PopupNativeKeyPressHandler;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.HasBlurHandlers;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasFocusHandlers;
import com.google.gwt.event.dom.client.HasKeyPressHandlers;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.HasHandlers;
import com.google.gwt.user.client.ui.HasValue;
import com.google.inject.Inject;
public class PermissionsPopupPresenterWidget extends AbstractModelBoundPopupPresenterWidget<AdElementListModel, PermissionsPopupPresenterWidget.ViewDef> {
public interface ViewDef extends AbstractModelBoundPopupPresenterWidget.ViewDef<AdElementListModel> {
HasUiCommandClickHandlers getSearchButton();
HasKeyPressHandlers getKeyPressSearchInputBox();
HasValue<String> getSearchString();
HasClickHandlers getEveryoneRadio();
HasClickHandlers getSpecificUserOrGroupRadio();
HasHandlers getSearchStringEditor();
PopupNativeKeyPressHandler getNativeKeyPressHandler();
void changeStateOfElementsWhenAccessIsForEveryone(boolean isEveryone);
void hideRoleSelection(Boolean indic);
void hideEveryoneSelection(Boolean indic);
}
@Inject
public PermissionsPopupPresenterWidget(EventBus eventBus, ViewDef view) {
super(eventBus, view);
}
@Override
public void init(final AdElementListModel model) {
// Let the parent do its work:
super.init(model);
getView().getSearchButton().setCommand(model.getSearchCommand());
registerHandler(getView().getSearchButton().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
getView().getSearchButton().getCommand().Execute();
}
}));
registerHandler(getView().getKeyPressSearchInputBox().addKeyPressHandler(new KeyPressHandler() {
@Override
public void onKeyPress(KeyPressEvent event) {
if (KeyCodes.KEY_ENTER == event.getNativeEvent().getKeyCode()) {
model.setSearchString(getView().getSearchString().getValue());
getView().getSearchButton().getCommand().Execute();
}
}
}));
registerHandler(getView().getEveryoneRadio().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
model.setIsEveryoneSelected(true);
getView().changeStateOfElementsWhenAccessIsForEveryone(true);
// Disable relevant elements
}
}));
registerHandler(getView().getSpecificUserOrGroupRadio().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
model.setIsEveryoneSelected(false);
getView().changeStateOfElementsWhenAccessIsForEveryone(false);
}
}));
model.getIsRoleListHiddenModel().getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
getView().hideRoleSelection(Boolean.parseBoolean(model.getIsRoleListHiddenModel()
.getEntity()
.toString()));
}
});
model.getIsEveryoneSelectionHidden().getPropertyChangedEvent().addListener(new IEventListener() {
@Override
public void eventRaised(Event ev, Object sender, EventArgs args) {
getView().hideEveryoneSelection(Boolean.parseBoolean(model.getIsRoleListHiddenModel()
.getEntity()
.toString()));
}
});
getView().setPopupKeyPressHandler(new PermissionPopupNativeKeyPressHandler(getView().getNativeKeyPressHandler()));
}
class PermissionPopupNativeKeyPressHandler implements PopupNativeKeyPressHandler {
private PopupNativeKeyPressHandler decorated;
private boolean hasFocus = false;
public PermissionPopupNativeKeyPressHandler(PopupNativeKeyPressHandler decorated) {
this.decorated = decorated;
((HasFocusHandlers) getView().getSearchStringEditor()).addFocusHandler(new FocusHandler() {
@Override
public void onFocus(FocusEvent event) {
hasFocus = true;
}
});
((HasBlurHandlers) getView().getSearchStringEditor()).addBlurHandler(new BlurHandler() {
@Override
public void onBlur(BlurEvent event) {
hasFocus = false;
}
});
}
@Override
public void onKeyPress(NativeEvent event) {
if (hasFocus && KeyCodes.KEY_ENTER == event.getKeyCode()) {
getView().getSearchButton().getCommand().Execute();
} else {
decorated.onKeyPress(event);
}
}
}
}