package pl.net.bluesoft.rnd.processtool.ui.buttons;
import com.vaadin.ui.Button;
import pl.net.bluesoft.rnd.processtool.model.BpmTask;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstance;
import pl.net.bluesoft.rnd.processtool.model.UserData;
import pl.net.bluesoft.rnd.processtool.model.config.ProcessStateAction;
import pl.net.bluesoft.rnd.processtool.ui.WidgetContextSupport;
import pl.net.bluesoft.rnd.processtool.ui.buttons.dialog.DialogWindow;
import pl.net.bluesoft.rnd.processtool.ui.buttons.dialog.SkipSavingDialog;
import pl.net.bluesoft.rnd.processtool.ui.widgets.ProcessToolDataWidget;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.AliasName;
import java.util.Collection;
import java.util.Map;
import java.util.logging.Logger;
/**
* @author tlipski@bluesoft.net.pl
* @author amichalak@bluesoft.net.pl
*/
@AliasName(name = "Default")
public class StandardValidatingButton extends BaseProcessToolVaadinActionButton {
protected Logger logger = Logger.getLogger(StandardValidatingButton.class.getName());
private ProcessStateAction psa;
protected static class PerformedActionParams {
private WidgetContextSupport support;
private Map<ProcessToolDataWidget, Collection<String>> validationErrors;
private boolean saveData;
public PerformedActionParams(WidgetContextSupport support, Map<ProcessToolDataWidget, Collection<String>> validationErrors, boolean saveData) {
this.support = support;
this.validationErrors = validationErrors;
this.saveData = saveData;
}
public WidgetContextSupport getSupport() {
return support;
}
public Map<ProcessToolDataWidget, Collection<String>> getValidationErrors() {
return validationErrors;
}
public boolean isSaveData() {
return saveData;
}
}
@Override
protected void performAction(WidgetContextSupport support) {
showValidationErrorsOrSave(support, support.getWidgetsErrors(task, false));
}
protected void showValidationErrorsOrSave(WidgetContextSupport support, Map<ProcessToolDataWidget, Collection<String>> validationErrors) {
if (validationErrors.isEmpty()) {
doShowValidationErrorsOrSave(new PerformedActionParams(support, validationErrors, true));
}
else if (skipSaving) {
showSkipSavingDialog(new PerformedActionParams(support, validationErrors, false));
}
else {
support.displayValidationErrors(validationErrors);
}
}
protected void doShowValidationErrorsOrSave(PerformedActionParams params) {
finalizeAction(params.isSaveData());
}
protected void finalizeAction(boolean saveData) {
if (saveData) {
invokeSaveTask();
}
else {
invokeSaveTaskWithoutData();
}
invokeBpmTransition();
callback.actionPerformed(definition);
}
@Override
public boolean isVisible(BpmTask task) {
return true; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean isEnabled(BpmTask task) {
return true; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void changeButton(Button button) {
}
@Override
public String getLabel(BpmTask task) {
return label;
}
@Override
public String getDescription(BpmTask task) {
return description; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public void setLoggedUser(UserData userData) {
//nothing
}
@Override
public boolean isAutoHide() {
return autoHide;
}
@Override
public void setDefinition(ProcessStateAction psa) {
this.psa = psa;
}
@Override
public void saveData(BpmTask task) {
super.saveData(task);
ProcessInstance pi = task.getProcessInstance();
pi.setSimpleAttribute("commentAdded", "false");
}
private void showSkipSavingDialog(final PerformedActionParams params) {
SkipSavingDialog dialog = showDialog(new SkipSavingDialog(params.getValidationErrors()));
dialog.getSaveIgnoringErrorsButton().addListener(new Button.ClickListener() {
@Override
public void buttonClick(Button.ClickEvent clickEvent) {
handleSaveIgnoringErrorsButtonClick(params);
}
});
}
protected <DialogType extends DialogWindow> DialogType showDialog(DialogType dialog) {
dialog.setI18NSource(messageSource);
dialog.buildLayout();
application.getMainWindow().addWindow(dialog);
return dialog;
}
protected void handleSaveIgnoringErrorsButtonClick(PerformedActionParams params) {
doShowValidationErrorsOrSave(params);
}
}