package com.constellio.app.ui.framework.buttons;
import static com.constellio.app.ui.i18n.i18n.$;
import org.vaadin.dialogs.ConfirmDialog;
import org.vaadin.dialogs.ConfirmDialog.ContentMode;
import org.vaadin.dialogs.DefaultConfirmDialogFactory;
import com.constellio.app.ui.framework.components.BaseWindow;
import com.vaadin.server.Resource;
import com.vaadin.ui.UI;
@SuppressWarnings("serial")
public abstract class ConfirmDialogButton extends IconButton {
public static enum DialogMode {
TEXT, INFO, WARNING, ERROR, STOP
};
private static ConfirmDialog.Factory factory = new DefaultConfirmDialogFactory();
private DialogMode dialogMode = DialogMode.TEXT;
static {
ConfirmDialog.setFactory(new ConfirmDialog.Factory() {
@Override
public ConfirmDialog create(String windowCaption, String message, String okTitle, String cancelTitle,
String notOKCaption) {
ConfirmDialog confirmDialog = factory.create(windowCaption, message, okTitle, cancelTitle, notOKCaption);
confirmDialog.setContentMode(ContentMode.HTML);
confirmDialog.addAttachListener(new AttachListener() {
@Override
public void attach(AttachEvent event) {
BaseWindow.executeZIndexAdjustJavascript(BaseWindow.OVER_ADVANCED_SEARCH_FORM_Z_INDEX + 1);
}
});
return confirmDialog;
}
});
}
public ConfirmDialogButton(String caption) {
this(null, caption, false);
}
public ConfirmDialogButton(Resource iconResource, String caption) {
super(iconResource, caption);
}
public ConfirmDialogButton(Resource iconResource, String caption, boolean iconOnly) {
super(iconResource, caption, iconOnly);
}
public DialogMode getDialogMode() {
return dialogMode;
}
public void setDialogMode(DialogMode dialogMode) {
this.dialogMode = dialogMode;
}
@Override
protected final void buttonClick(ClickEvent event) {
showDialog(dialogMode,
getConfirmDialogTitle(),
getConfirmDialogMessage(),
getConfirmDialogOKCaption(),
getConfirmDialogCancelCaption(),
new ConfirmDialog.Listener() {
public void onClose(ConfirmDialog dialog) {
if (dialog.isConfirmed()) {
confirmButtonClick(dialog);
} else {
dialogClosedWitoutConfirm(dialog);
}
}
});
}
public static void showDialog(DialogMode dialogMode, String title, String message, String okCaption, String cancelCaption, ConfirmDialog.Listener closeListener) {
String iconName;
switch (dialogMode) {
case INFO:
iconName = "info";
break;
case WARNING:
iconName = "warn";
break;
case ERROR:
iconName = "error";
break;
case STOP:
iconName = "stop";
break;
case TEXT:
default:
iconName = null;
break;
};
if (iconName != null) {
StringBuilder html = new StringBuilder();
html.append("<span class=\"confirm-dialog-" + iconName + "\">");
html.append("<span class=\"confirm-dialog-message\">");
html.append(message);
html.append("</span>");
html.append("</span>");
message = html.toString();
}
ConfirmDialog.show(
UI.getCurrent(),
title,
message,
okCaption,
cancelCaption,
closeListener);
}
protected String getConfirmDialogTitle() {
return $("ConfirmDialog.title");
}
protected String getConfirmDialogOKCaption() {
return $("ConfirmDialog.yes");
}
protected String getConfirmDialogCancelCaption() {
return $("ConfirmDialog.no");
}
protected void dialogClosedWitoutConfirm(ConfirmDialog dialog) {
}
protected abstract String getConfirmDialogMessage();
protected abstract void confirmButtonClick(ConfirmDialog dialog);
}