package org.ovirt.engine.ui.webadmin.section.main.presenter.popup;
import org.ovirt.engine.ui.common.presenter.AbstractPopupPresenterWidget;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.CloseDynamicPopupEvent.CloseDynamicPopupHandler;
import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.SetDynamicPopupContentUrlEvent.SetDynamicPopupContentUrlHandler;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.EventBus;
import com.google.inject.Inject;
/**
* Implements a dialog with content loaded from the given URL.
* <p>
* This presenter widget is bound as non-singleton to allow showing multiple dialog instances.
*/
public class DynamicUrlContentPopupPresenterWidget extends AbstractPopupPresenterWidget<DynamicUrlContentPopupPresenterWidget.ViewDef> implements SetDynamicPopupContentUrlHandler, CloseDynamicPopupHandler {
public interface ViewDef extends AbstractPopupPresenterWidget.ViewDef {
void init(String title, String width, String height, boolean closeIconVisible);
void setContentUrl(String contentUrl);
HasClickHandlers addFooterButton(String label);
}
private String dialogToken;
private boolean closeOnEscKey;
@Inject
public DynamicUrlContentPopupPresenterWidget(EventBus eventBus, ViewDef view) {
super(eventBus, view);
}
@Override
protected void onBind() {
super.onBind();
registerHandler(getEventBus().addHandler(SetDynamicPopupContentUrlEvent.getType(), this));
registerHandler(getEventBus().addHandler(CloseDynamicPopupEvent.getType(), this));
}
@Override
public void onSetDynamicPopupContentUrl(SetDynamicPopupContentUrlEvent event) {
if (dialogTokenMatches(event.getDialogToken())) {
setContentUrl(event.getContentUrl());
}
}
@Override
public void onCloseDynamicPopup(CloseDynamicPopupEvent event) {
if (dialogTokenMatches(event.getDialogToken())) {
onClose();
}
}
boolean dialogTokenMatches(String value) {
return dialogToken != null && dialogToken.equals(value);
}
@Override
protected void handleEscapeKey() {
if (closeOnEscKey) {
onClose();
}
}
public void init(String dialogToken, String title, String width, String height,
boolean closeIconVisible, boolean closeOnEscKey) {
this.dialogToken = dialogToken;
this.closeOnEscKey = closeOnEscKey;
getView().init(title, width, height, closeIconVisible);
}
public void setContentUrl(String contentUrl) {
getView().setContentUrl(contentUrl);
}
public void addFooterButton(String label, ClickHandler clickHandler) {
registerHandler(getView().addFooterButton(label).addClickHandler(clickHandler));
}
}