package com.constellio.app.ui.framework.buttons; import static com.constellio.app.ui.i18n.i18n.$; import org.apache.commons.lang3.StringUtils; import com.constellio.app.ui.framework.components.fields.BaseTextArea; import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextArea; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; public abstract class DeleteWithJustificationButton extends WindowButton { public static final String CONFIRM_DELETION = "confirm-deletion"; public static final String CANCEL_DELETION = "cancel-deletion"; public static final String DELETION_REASON = "deletion-reason"; public DeleteWithJustificationButton(String caption, boolean iconOnly) { super((iconOnly ? DeleteButton.ICON_RESOURCE : null), DeleteButton.computeCaption(caption, iconOnly), iconOnly, WindowConfiguration.modalDialog("35%", "290px")); } public DeleteWithJustificationButton(boolean iconOnly) { this(DeleteButton.CAPTION, iconOnly); } public DeleteWithJustificationButton() { this(DeleteButton.CAPTION, true); } @Override protected Component buildWindowContent() { Label message = new Label($("DeleteWithJustificationButton.pleaseConfirm")); final TextArea reason = new BaseTextArea(); reason.setId(DELETION_REASON); reason.setWidth("90%"); reason.setHeight("75%"); final Button confirm = new Button($(DeleteButton.CAPTION)); confirm.addStyleName(CONFIRM_DELETION); confirm.addStyleName(ValoTheme.BUTTON_PRIMARY); confirm.setEnabled(false); confirm.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { getWindow().close(); deletionConfirmed(reason.getValue()); } }); Button cancel = new Button($("cancel")); cancel.addStyleName(CANCEL_DELETION); cancel.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { getWindow().close(); deletionCancelled(); } }); reason.addTextChangeListener(new TextChangeListener() { @Override public void textChange(TextChangeEvent event) { confirm.setEnabled(StringUtils.isNotBlank(event.getText())); } }); HorizontalLayout buttons = new HorizontalLayout(confirm, cancel); buttons.setSpacing(true); VerticalLayout layout = new VerticalLayout(message, reason, buttons); layout.setComponentAlignment(buttons, Alignment.MIDDLE_CENTER); layout.setSpacing(true); return layout; } protected abstract void deletionConfirmed(String reason); protected void deletionCancelled() { // Do nothing by default } }