From 0708bf4d1e1a9046c82c221170b3dd3709e71141 Mon Sep 17 00:00:00 2001 From: tkellner Date: Wed, 10 Apr 2013 18:57:50 +0000 Subject: Removed Error State and replaced it with ErrorDialog To get a stable user experience in case of an error. ErrorDialog was improved to let the user decide if he wants to retry an action. git-svn-id: https://joinup.ec.europa.eu/svn/pdf-over/trunk@58 174cde9d-5d70-4d2a-aa98-46368bc2aaf7 --- .../composites/AdvancedConfigurationComposite.java | 2 +- .../gui/composites/ConfigurationComposite.java | 44 ++++--- .../pdfover/gui/composites/ErrorComposite.java | 111 ++++++++++++++++- .../pdfover/gui/composites/OutputComposite.java | 2 +- .../composites/SimpleConfigurationComposite.java | 4 +- .../at/asit/pdfover/gui/controls/ErrorDialog.java | 138 +++++++++++++++------ .../at/asit/pdfover/gui/workflow/GUIProvider.java | 7 ++ .../pdfover/gui/workflow/StateMachineImpl.java | 25 +++- .../pdfover/gui/workflow/states/ErrorState.java | 122 ------------------ .../pdfover/gui/workflow/states/LocalBKUState.java | 81 ++++++------ .../gui/workflow/states/MobileBKUState.java | 11 +- .../pdfover/gui/workflow/states/OutputState.java | 2 +- .../workflow/states/PrepareConfigurationState.java | 12 +- .../gui/workflow/states/PrepareSigningState.java | 13 +- .../pdfover/gui/workflow/states/SigningState.java | 13 +- 15 files changed, 343 insertions(+), 244 deletions(-) delete mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/ErrorState.java (limited to 'pdf-over-gui/src') diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/AdvancedConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/AdvancedConfigurationComposite.java index e3869105..11f0914d 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/AdvancedConfigurationComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/AdvancedConfigurationComposite.java @@ -273,7 +273,7 @@ public class AdvancedConfigurationComposite extends BaseConfigurationComposite { this.performBKUSelectionChanged(bkuvalue); } catch (Exception ex) { log.error("Failed to parse BKU value: " + selected, ex); //$NON-NLS-1$ - ErrorDialog dialog = new ErrorDialog(getShell(), SWT.NONE, "Invalid BKU selection. Please check.", ex); + ErrorDialog dialog = new ErrorDialog(getShell(), SWT.NONE, "Invalid BKU selection. Please check.", ex, false); dialog.open(); } } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java index d95bb466..bb6d47a5 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ConfigurationComposite.java @@ -54,9 +54,9 @@ public class ConfigurationComposite extends StateComposite { */ private final class ConfigurationModeSelectionListener implements SelectionListener { - + /** - * Constructor + * Constructor */ public ConfigurationModeSelectionListener() { // Nothing to do @@ -117,13 +117,12 @@ public class ConfigurationComposite extends StateComposite { BaseConfigurationComposite configComposite; /** - * configuration container - * Keeps state for current configuration changes + * configuration container Keeps state for current configuration changes */ ConfigurationContainer configurationContainer = new ConfigurationContainerImpl(); /** - * The stack layout + * The stack layout */ StackLayout compositeStack = new StackLayout(); @@ -290,8 +289,7 @@ public class ConfigurationComposite extends StateComposite { this.configManipulator .setDefaultSignaturePosition(new SignaturePosition()); } else { - this.configManipulator - .setDefaultSignaturePosition(null); + this.configManipulator.setDefaultSignaturePosition(null); } this.configManipulator @@ -311,21 +309,29 @@ public class ConfigurationComposite extends StateComposite { getShell(), SWT.NONE, "Invalid settings are still present. Please check your input.", - e); + e, false); dialog.open(); return false; } - // Save current config to file - try { - this.configManipulator.saveCurrentConfiguration(); - } catch (IOException e) { - log.error("Failed to save configuration to file!", e); //$NON-NLS-1$ - ErrorDialog dialog = new ErrorDialog(getShell(), SWT.NONE, - "Failed to save configuration file!", e); - dialog.open(); - return false; - } - return true; + + boolean status = false; + boolean redo = false; + do { + // Save current config to file + try { + this.configManipulator.saveCurrentConfiguration(); + redo = false; + status = true; + } catch (IOException e) { + log.error("Failed to save configuration to file!", e); //$NON-NLS-1$ + ErrorDialog dialog = new ErrorDialog(getShell(), SWT.NONE, + "Failed to save configuration file!", e, true); + redo = dialog.open(); + + //return false; + } + } while (redo); + return status; } /** diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ErrorComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ErrorComposite.java index c85d046e..798ad7fb 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ErrorComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/ErrorComposite.java @@ -45,12 +45,71 @@ public class ErrorComposite extends StateComposite { @Override public void widgetSelected(SelectionEvent e) { ErrorComposite.this.userOk = true; + ErrorComposite.this.shouldTryToRecover = false; + ErrorComposite.this.state.updateStateMachine(); + } + } + + /** + * + */ + private final class RetrySelectionListener extends SelectionAdapter { + /** + * Empty constructor + */ + public RetrySelectionListener() { + } + + @Override + public void widgetSelected(SelectionEvent e) { + ErrorComposite.this.userOk = true; + ErrorComposite.this.shouldTryToRecover = true; ErrorComposite.this.state.updateStateMachine(); } } boolean userOk = false; + boolean canTryToRecover = false; + + boolean shouldTryToRecover = false; + + /** + * Checks if we should try to recover form the error + * @return the shouldTryToRecover + */ + public boolean getShouldTryToRecover() { + return this.shouldTryToRecover; + } + + /** + * Gets try to recover + * @return can try to recover + */ + public boolean getCanTryToRecover() { + return this.canTryToRecover; + } + + /** + * Sets try to recover + * @param value + */ + public void setCanTryToRecover(boolean value) { + this.canTryToRecover = value; + + if(this.canTryToRecover) { + this.btn_ok.setVisible(false); + this.btn_retry.setVisible(true); + this.btn_cancel.setVisible(true); + this.lbl_title.setText("Recoverable error ocurred"); + } else { + this.btn_ok.setVisible(true); + this.btn_retry.setVisible(false); + this.btn_cancel.setVisible(false); + this.lbl_title.setText("Fatal error ocurred"); + } + } + /** * Checks if the user has clicked OK * @return whether the user has clicked OK @@ -61,6 +120,14 @@ public class ErrorComposite extends StateComposite { private Exception exception; private Label lbl_message; + + private Button btn_ok; + + private Button btn_retry; + + private Button btn_cancel; + + private Label lbl_title; /** @@ -87,21 +154,54 @@ public class ErrorComposite extends StateComposite { FormData fd_lbl_message = new FormData(); fd_lbl_message.left = new FormAttachment(10, 0); fd_lbl_message.right = new FormAttachment(90, 0); - fd_lbl_message.top = new FormAttachment(10, 0); + fd_lbl_message.top = new FormAttachment(15, 5); fd_lbl_message.bottom = new FormAttachment(80, 0); this.lbl_message.setLayoutData(fd_lbl_message); //lbl_message.setText(this.exception.getMessage()); - Button btn_ok = new Button(this, SWT.NATIVE | SWT.RESIZE); - btn_ok.setText("OK"); + this.btn_ok = new Button(this, SWT.NATIVE | SWT.RESIZE); + this.btn_ok.setText("OK"); // Point mobile_size = btn_mobile.computeSize(SWT.DEFAULT, SWT.DEFAULT); FormData fd_btn_ok = new FormData(); fd_btn_ok.left = new FormAttachment(45, 0); fd_btn_ok.right = new FormAttachment(55, 0); fd_btn_ok.top = new FormAttachment(85, 0); fd_btn_ok.bottom = new FormAttachment(95, 0); - btn_ok.setLayoutData(fd_btn_ok); - btn_ok.addSelectionListener(new OkSelectionListener()); + this.btn_ok.setLayoutData(fd_btn_ok); + this.btn_ok.addSelectionListener(new OkSelectionListener()); + + this.btn_retry = new Button(this, SWT.NATIVE | SWT.RESIZE); + this.btn_retry.setText("OK"); + // Point mobile_size = btn_mobile.computeSize(SWT.DEFAULT, SWT.DEFAULT); + FormData fd_btn_retry = new FormData(); + fd_btn_retry.left = new FormAttachment(30, 0); + fd_btn_retry.right = new FormAttachment(50, -5); + fd_btn_retry.top = new FormAttachment(85, 0); + fd_btn_retry.bottom = new FormAttachment(95, 0); + this.btn_retry.setLayoutData(fd_btn_retry); + this.btn_retry.addSelectionListener(new RetrySelectionListener()); + this.btn_retry.setVisible(false); + + this.btn_cancel = new Button(this, SWT.NATIVE | SWT.RESIZE); + this.btn_cancel.setText("Cancel"); + // Point mobile_size = btn_mobile.computeSize(SWT.DEFAULT, SWT.DEFAULT); + FormData fd_btn_cancel = new FormData(); + fd_btn_cancel.left = new FormAttachment(50, 5); + fd_btn_cancel.right = new FormAttachment(80, 0); + fd_btn_cancel.top = new FormAttachment(85, 0); + fd_btn_cancel.bottom = new FormAttachment(95, 0); + this.btn_cancel.setLayoutData(fd_btn_cancel); + this.btn_cancel.addSelectionListener(new OkSelectionListener()); + this.btn_cancel.setVisible(false); + + this.lbl_title = new Label(this, SWT.NONE); + FormData fd_lbl_title = new FormData(); + fd_lbl_title.left = new FormAttachment(10, 0); + fd_lbl_title.right = new FormAttachment(90, 0); + fd_lbl_title.top = new FormAttachment(0, 5); + fd_lbl_title.bottom = new FormAttachment(15, -5); + this.lbl_title.setLayoutData(fd_lbl_title); + this.lbl_title.setText(""); //$NON-NLS-1$ } @Override @@ -116,5 +216,4 @@ public class ErrorComposite extends StateComposite { public void doLayout() { // Nothing to do } - } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java index afa2a2e7..9cdabe23 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/OutputComposite.java @@ -118,7 +118,7 @@ public class OutputComposite extends StateComposite { } } else { log.error("OutputComposite:OpenSelectionListener:widgetSelected -> source is null!!"); //$NON-NLS-1$ - ErrorDialog dialog = new ErrorDialog(getShell(), SWT.NONE, "Failed to get signed document.", ""); + ErrorDialog dialog = new ErrorDialog(getShell(), SWT.NONE, "Failed to get signed document.", "", false); dialog.open(); } } catch (Exception ex) { diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java index a0977b9e..6bac14ec 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/composites/SimpleConfigurationComposite.java @@ -226,7 +226,7 @@ public class SimpleConfigurationComposite extends BaseConfigurationComposite { plainEmblemSetter(filename); } catch (Exception ex) { log.error("processEmblemChanged: ", ex); //$NON-NLS-1$ - ErrorDialog dialog = new ErrorDialog(getShell(), SWT.NONE, "Failed to load the emblem", ex); + ErrorDialog dialog = new ErrorDialog(getShell(), SWT.NONE, "Failed to load the emblem", ex, false); dialog.open(); } } @@ -728,7 +728,7 @@ public class SimpleConfigurationComposite extends BaseConfigurationComposite { this.btnUseImage.setSelection(true); } catch (Exception e1) { log.error("Failed to load emblem: ", e1); //$NON-NLS-1$ - ErrorDialog dialog = new ErrorDialog(getShell(), SWT.NONE, "Failed to load emblem.", e1); + ErrorDialog dialog = new ErrorDialog(getShell(), SWT.NONE, "Failed to load emblem.", e1, false); dialog.open(); } } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorDialog.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorDialog.java index 1025c1fe..c6f7c19a 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorDialog.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/controls/ErrorDialog.java @@ -45,12 +45,14 @@ public class ErrorDialog extends Dialog { * @param style * @param message * @param exception + * @param canRetry */ public ErrorDialog(Shell parent, int style, String message, - Throwable exception) { + Throwable exception, + boolean canRetry) { super(parent, style); this.message = message; - + this.canRetry = canRetry; final StringBuilder result = new StringBuilder(); result.append(exception.getLocalizedMessage()); final String NEW_LINE = System.getProperty("line.separator"); //$NON-NLS-1$ @@ -71,15 +73,22 @@ public class ErrorDialog extends Dialog { * @param style * @param message * @param details + * @param canRetry */ - public ErrorDialog(Shell parent, int style, String message, String details) { + public ErrorDialog(Shell parent, int style, String message, String details, + boolean canRetry) { super(parent, style); this.message = message; this.details = details; + this.canRetry = canRetry; } private String message = null; + private boolean canRetry = false; + + private boolean doRetry = false; + private String details = null; /** @@ -91,8 +100,9 @@ public class ErrorDialog extends Dialog { /** * Open error dialog + * @return if the user wants to retry the action which caused the error */ - public void open() { + public boolean open() { Shell parent = getParent(); final Shell shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); @@ -131,39 +141,91 @@ public class ErrorDialog extends Dialog { fd_group.left = new FormAttachment(lblErrorImage, 5); group.setLayoutData(fd_group); group.setText("Details"); - Button btnOk = new Button(shell, SWT.NONE); - btnOk.addSelectionListener(new SelectionAdapter() { - @Override - public void widgetSelected(SelectionEvent e) { - shell.dispose(); - } - }); - fd_group.bottom = new FormAttachment(btnOk, -5); - - ScrolledComposite scrolledComposite = new ScrolledComposite(group, - SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); - FormData fd_scrolledComposite = new FormData(); - fd_scrolledComposite.top = new FormAttachment(0, 5); - fd_scrolledComposite.left = new FormAttachment(0, 5); - fd_scrolledComposite.bottom = new FormAttachment(100, -5); - fd_scrolledComposite.right = new FormAttachment(100, -5); - scrolledComposite.setLayoutData(fd_scrolledComposite); - scrolledComposite.setExpandHorizontal(true); - scrolledComposite.setExpandVertical(true); - - Label lblDetails = new Label(scrolledComposite, SWT.NONE); - - lblDetails.setText(this.details); - - scrolledComposite.setContent(lblDetails); - scrolledComposite.setMinSize(lblDetails.computeSize(SWT.DEFAULT, - SWT.DEFAULT)); - FormData fd_btnOk = new FormData(); - fd_btnOk.bottom = new FormAttachment(100, -5); - fd_btnOk.right = new FormAttachment(100, -5); - btnOk.setLayoutData(fd_btnOk); - btnOk.setText("Ok"); - + + if (!this.canRetry) { + + Button btnOk = new Button(shell, SWT.NONE); + btnOk.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + shell.dispose(); + } + }); + fd_group.bottom = new FormAttachment(btnOk, -5); + + ScrolledComposite scrolledComposite = new ScrolledComposite(group, + SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); + FormData fd_scrolledComposite = new FormData(); + fd_scrolledComposite.top = new FormAttachment(0, 5); + fd_scrolledComposite.left = new FormAttachment(0, 5); + fd_scrolledComposite.bottom = new FormAttachment(100, -5); + fd_scrolledComposite.right = new FormAttachment(100, -5); + scrolledComposite.setLayoutData(fd_scrolledComposite); + scrolledComposite.setExpandHorizontal(true); + scrolledComposite.setExpandVertical(true); + + Label lblDetails = new Label(scrolledComposite, SWT.NONE); + + lblDetails.setText(this.details); + + scrolledComposite.setContent(lblDetails); + scrolledComposite.setMinSize(lblDetails.computeSize(SWT.DEFAULT, + SWT.DEFAULT)); + FormData fd_btnOk = new FormData(); + fd_btnOk.bottom = new FormAttachment(100, -5); + fd_btnOk.right = new FormAttachment(100, -5); + btnOk.setLayoutData(fd_btnOk); + btnOk.setText("Ok"); + } else { + Button btnCancel = new Button(shell, SWT.NONE); + Button btnRetry = new Button(shell, SWT.NONE); + + btnCancel.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + shell.dispose(); + } + }); + + btnRetry.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + ErrorDialog.this.doRetry = true; + shell.dispose(); + } + }); + fd_group.bottom = new FormAttachment(btnCancel, -5); + + ScrolledComposite scrolledComposite = new ScrolledComposite(group, + SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); + FormData fd_scrolledComposite = new FormData(); + fd_scrolledComposite.top = new FormAttachment(0, 5); + fd_scrolledComposite.left = new FormAttachment(0, 5); + fd_scrolledComposite.bottom = new FormAttachment(100, -5); + fd_scrolledComposite.right = new FormAttachment(100, -5); + scrolledComposite.setLayoutData(fd_scrolledComposite); + scrolledComposite.setExpandHorizontal(true); + scrolledComposite.setExpandVertical(true); + + Label lblDetails = new Label(scrolledComposite, SWT.NONE); + + lblDetails.setText(this.details); + + scrolledComposite.setContent(lblDetails); + scrolledComposite.setMinSize(lblDetails.computeSize(SWT.DEFAULT, + SWT.DEFAULT)); + FormData fd_btnCancel = new FormData(); + fd_btnCancel.bottom = new FormAttachment(100, -5); + fd_btnCancel.right = new FormAttachment(100, -5); + btnCancel.setLayoutData(fd_btnCancel); + btnCancel.setText("Cancel"); + + FormData fd_btnRetry = new FormData(); + fd_btnRetry.bottom = new FormAttachment(100, -5); + fd_btnRetry.right = new FormAttachment(btnCancel, -10); + btnRetry.setLayoutData(fd_btnRetry); + btnRetry.setText("Retry"); + } shell.pack(); shell.open(); shell.pack(); @@ -172,5 +234,7 @@ public class ErrorDialog extends Dialog { if (!display.readAndDispatch()) display.sleep(); } + + return this.doRetry; } } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/GUIProvider.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/GUIProvider.java index 26bd3e1f..39aab13d 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/GUIProvider.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/GUIProvider.java @@ -16,6 +16,7 @@ package at.asit.pdfover.gui.workflow; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Shell; import at.asit.pdfover.gui.workflow.states.State; @@ -38,4 +39,10 @@ public interface GUIProvider { * @param composite the composite */ public void display(final Composite composite); + + /** + * Gets the main window shell + * @return the main window shell + */ + public Shell getMainShell(); } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/StateMachineImpl.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/StateMachineImpl.java index ece1cf7f..44ffd7f4 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/StateMachineImpl.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/StateMachineImpl.java @@ -18,7 +18,7 @@ package at.asit.pdfover.gui.workflow; //Imports import java.lang.reflect.Constructor; -import org.eclipse.swt.SWTException; +import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; @@ -26,7 +26,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import at.asit.pdfover.gui.MainWindow; -import at.asit.pdfover.gui.workflow.states.ErrorState; +import at.asit.pdfover.gui.controls.ErrorDialog; import at.asit.pdfover.gui.workflow.states.PrepareConfigurationState; import at.asit.pdfover.gui.workflow.states.State; @@ -86,9 +86,12 @@ public class StateMachineImpl implements StateMachine, GUIProvider { current.run(); } catch (Exception e) { log.error("StateMachine update: ", e); //$NON-NLS-1$ - ErrorState errorState = new ErrorState(this); - errorState.setException(e); - jumpToState(errorState); + ErrorDialog errorState = new ErrorDialog(this.getMainShell(), + SWT.NONE, "Unexpected Error", e, false); + //errorState.setException(e); + //jumpToState(errorState); + errorState.open(); + this.exit(); } if (this.exit) { @@ -355,4 +358,16 @@ public class StateMachineImpl implements StateMachine, GUIProvider { public ConfigManipulator getConfigManipulator() { return this.configProvider; } + + /* (non-Javadoc) + * @see at.asit.pdfover.gui.workflow.GUIProvider#getMainShell() + */ + @Override + public Shell getMainShell() { + if(this.shell == null) { + this.createMainWindow(); + } + + return this.shell; + } } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/ErrorState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/ErrorState.java deleted file mode 100644 index dd240616..00000000 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/ErrorState.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright 2012 by A-SIT, Secure Information Technology Center Austria - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by - * the European Commission - subsequent versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the Licence. - * You may obtain a copy of the Licence at: - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the Licence is distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and - * limitations under the Licence. - */ -package at.asit.pdfover.gui.workflow.states; - -// Imports -import org.eclipse.swt.SWT; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import at.asit.pdfover.gui.composites.ErrorComposite; -import at.asit.pdfover.gui.workflow.StateMachine; - -/** - * - */ -public class ErrorState extends State { - /** - * @param stateMachine - */ - public ErrorState(StateMachine stateMachine) { - super(stateMachine); - } - - private Exception exception; - - private State recoverState = null; - - /** - * @param recoverState the recoverState to set - */ - public void setRecoverState(State recoverState) { - this.recoverState = recoverState; - } - - /** - * SLF4J Logger instance - **/ - static final Logger log = LoggerFactory.getLogger(ErrorState.class); - - private ErrorComposite errorComposite = null; - - private ErrorComposite getComposite() { - if (this.errorComposite == null) { - this.errorComposite = - this.stateMachine.getGUIProvider().createComposite(ErrorComposite.class, SWT.RESIZE, this); - } - - return this.errorComposite; - } - - /* (non-Javadoc) - * @see at.asit.pdfover.gui.workflow.states.State#run() - */ - @Override - public void run() { - ErrorComposite errorComposite = this.getComposite(); - - if(this.exception != null && !errorComposite.isUserOk()) { - // Display Exception .... - this.errorComposite.setException(this.exception); - - this.stateMachine.getGUIProvider().display(errorComposite); - return; - } - - // User was informed! - if(this.recoverState != null) { - // see if we can recover! - this.setNextState(this.recoverState); - } else { - // we cannot recover exit! - this.stateMachine.exit(); - } - } - - /* (non-Javadoc) - * @see at.asit.pdfover.gui.workflow.states.State#cleanUp() - */ - @Override - public void cleanUp() { - if (this.errorComposite != null) - this.errorComposite.dispose(); - } - - /* (non-Javadoc) - * @see at.asit.pdfover.gui.workflow.states.State#updateMainWindowBehavior() - */ - @Override - public void updateMainWindowBehavior() { - // Stay in previous state behavior - } - - /** - * Gets the Exception - * @return the exception - */ - public Exception getException() { - return this.exception; - } - - /** - * Sets the Exception - * @param exception the exception to set - */ - public void setException(Exception exception) { - this.exception = exception; - } - -} diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/LocalBKUState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/LocalBKUState.java index 9962d968..58e957b9 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/LocalBKUState.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/LocalBKUState.java @@ -37,32 +37,32 @@ import at.asit.pdfover.signator.SLResponse; * Logical state for performing the BKU Request to a local BKU */ public class LocalBKUState extends State { - + /** * HTTP Response server HEADER */ public final static String BKU_REPSONE_HEADER_SERVER = "server"; //$NON-NLS-1$ - + /** * HTTP Response user-agent HEADER */ public final static String BKU_REPSONE_HEADER_USERAGENT = "user-agent"; //$NON-NLS-1$ - + /** * HTTP Response SignatureLayout HEADER */ public final static String BKU_REPSONE_HEADER_SIGNATURE_LAYOUT = "SignatureLayout"; //$NON-NLS-1$ - + /** * TODO: move to a better location ... */ public static final String PDF_OVER_USER_AGENT_STRING = "PDF-Over 4.0"; //$NON-NLS-1$ - + /** * */ private final class SignLocalBKUThread implements Runnable { - + private LocalBKUState state; /** @@ -81,44 +81,45 @@ public class LocalBKUState extends State { String sl_request = request.getBase64Request(); HttpClient client = new HttpClient(); - PostMethod method = new PostMethod( "http://127.0.0.1:3495/http-security-layer-request"); //$NON-NLS-1$ - + log.debug("SL REQUEST: " + sl_request); //$NON-NLS-1$ - + method.addParameter("XMLRequest", sl_request); //$NON-NLS-1$ - + int returnCode = client.executeMethod(method); - - if(returnCode == HttpStatus.SC_OK) - { + + if (returnCode == HttpStatus.SC_OK) { String server = ""; //$NON-NLS-1$ String userAgent = ""; //$NON-NLS-1$ String signatureLayout = ""; //$NON-NLS-1$ - - if(method.getResponseHeader(BKU_REPSONE_HEADER_SERVER) != null) - { - server = method.getResponseHeader(BKU_REPSONE_HEADER_SERVER).getValue(); + + if (method.getResponseHeader(BKU_REPSONE_HEADER_SERVER) != null) { + server = method.getResponseHeader( + BKU_REPSONE_HEADER_SERVER).getValue(); } - - if(method.getResponseHeader(BKU_REPSONE_HEADER_USERAGENT) != null) - { - userAgent = method.getResponseHeader(BKU_REPSONE_HEADER_USERAGENT).getValue(); + + if (method.getResponseHeader(BKU_REPSONE_HEADER_USERAGENT) != null) { + userAgent = method.getResponseHeader( + BKU_REPSONE_HEADER_USERAGENT).getValue(); } - - if(method.getResponseHeader(BKU_REPSONE_HEADER_SIGNATURE_LAYOUT) != null) - { - signatureLayout = method.getResponseHeader(BKU_REPSONE_HEADER_SIGNATURE_LAYOUT).getValue(); + + if (method + .getResponseHeader(BKU_REPSONE_HEADER_SIGNATURE_LAYOUT) != null) { + signatureLayout = method.getResponseHeader( + BKU_REPSONE_HEADER_SIGNATURE_LAYOUT).getValue(); } - + String response = method.getResponseBodyAsString(); log.debug("SL Response: " + response); //$NON-NLS-1$ - SLResponse slResponse = new SLResponse(response, server, userAgent, signatureLayout); + SLResponse slResponse = new SLResponse(response, server, + userAgent, signatureLayout); this.state.signingState.setSignatureResponse(slResponse); } else { - this.state.threadException = new HttpException(method.getResponseBodyAsString()); + this.state.threadException = new HttpException( + method.getResponseBodyAsString()); } } catch (Exception e) { @@ -141,13 +142,12 @@ public class LocalBKUState extends State { /** * SLF4J Logger instance **/ - static final Logger log = LoggerFactory - .getLogger(LocalBKUState.class); + static final Logger log = LoggerFactory.getLogger(LocalBKUState.class); at.asit.pdfover.signator.SigningState signingState; Exception threadException = null; - + /* * (non-Javadoc) * @@ -161,22 +161,27 @@ public class LocalBKUState extends State { this.signingState = status.getSigningState(); - if (!this.signingState.hasSignatureResponse() && - this.threadException == null - ) { + if (!this.signingState.hasSignatureResponse() + && this.threadException == null) { Thread t = new Thread(new SignLocalBKUThread(this)); t.start(); return; } - if(this.threadException != null) { - ErrorDialog dialog = new ErrorDialog(Display.getCurrent().getActiveShell(), SWT.NONE, "Please check if a local BKU is running", this.threadException); - dialog.open(); + if (this.threadException != null) { + ErrorDialog dialog = new ErrorDialog( + this.stateMachine.getGUIProvider().getMainShell(), SWT.NONE, + "Please check if a local BKU is running", + this.threadException, true); + if (!dialog.open()) { + this.stateMachine.exit(); + return; + } this.threadException = null; this.run(); return; } - + // OK this.setNextState(new SigningState(this.stateMachine)); } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/MobileBKUState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/MobileBKUState.java index f39deada..ed6d675f 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/MobileBKUState.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/MobileBKUState.java @@ -25,6 +25,7 @@ import at.asit.pdfover.gui.MainWindowBehavior; import at.asit.pdfover.gui.composites.MobileBKUEnterNumberComposite; import at.asit.pdfover.gui.composites.MobileBKUEnterTANComposite; import at.asit.pdfover.gui.composites.WaitingComposite; +import at.asit.pdfover.gui.controls.ErrorDialog; import at.asit.pdfover.gui.workflow.StateMachine; import at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUCommunicationState; import at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUStatus; @@ -148,9 +149,13 @@ public class MobileBKUState extends State { MobileBKUStatus mobileStatus = this.getStatus(); if (this.threadException != null) { - ErrorState error = new ErrorState(this.stateMachine); - error.setException(this.threadException); - this.setNextState(error); + ErrorDialog error = new ErrorDialog(this.stateMachine.getGUIProvider().getMainShell(), + SWT.NONE, + "Unexpected Error", this.threadException, false); + //error.setException(this.threadException); + //this.setNextState(error); + error.open(); + this.stateMachine.exit(); return; } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java index a1748287..5a42d3cc 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/OutputState.java @@ -89,7 +89,7 @@ public class OutputState extends State { output.close(); } catch (IOException e) { log.error("Failed to save signed document to configured output folder.", e); //$NON-NLS-1$ - ErrorDialog dialog = new ErrorDialog(outputComposite.getShell(), SWT.NONE, "Failed to save signed document to configured output folder.", e); + ErrorDialog dialog = new ErrorDialog(outputComposite.getShell(), SWT.NONE, "Failed to save signed document to configured output folder.", e, false); dialog.open(); } } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareConfigurationState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareConfigurationState.java index a1de09d0..3cf0861f 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareConfigurationState.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareConfigurationState.java @@ -21,6 +21,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import org.eclipse.swt.SWT; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,6 +30,7 @@ import at.asit.pdfover.gui.cliarguments.BKUArgument; import at.asit.pdfover.gui.cliarguments.ConfigFileArgument; import at.asit.pdfover.gui.cliarguments.HelpArgument; import at.asit.pdfover.gui.cliarguments.PhoneNumberArgument; +import at.asit.pdfover.gui.controls.ErrorDialog; import at.asit.pdfover.gui.exceptions.InitializationException; import at.asit.pdfover.gui.workflow.ConfigManipulator; import at.asit.pdfover.gui.workflow.StateMachine; @@ -143,9 +145,13 @@ public class PrepareConfigurationState extends State { } catch (InitializationException e) { log.error("Failed to initialize: ", e); //$NON-NLS-1$ - ErrorState error = new ErrorState(this.stateMachine); - error.setException(e); - this.setNextState(error); + ErrorDialog error = new ErrorDialog(this.stateMachine.getGUIProvider().getMainShell(), + SWT.NONE, "Initialization failed. Please check your configuration.", + e, false); + //error.setException(e); + //this.setNextState(error); + error.open(); + this.stateMachine.exit(); } } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java index af6cc3bd..4ed59e5a 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/PrepareSigningState.java @@ -23,6 +23,7 @@ import org.slf4j.LoggerFactory; import at.asit.pdfover.gui.MainWindow.Buttons; import at.asit.pdfover.gui.MainWindowBehavior; import at.asit.pdfover.gui.composites.WaitingComposite; +import at.asit.pdfover.gui.controls.ErrorDialog; import at.asit.pdfover.gui.workflow.ConfigProvider; import at.asit.pdfover.gui.workflow.StateMachine; import at.asit.pdfover.gui.workflow.Status; @@ -137,9 +138,15 @@ public class PrepareSigningState extends State { } if(this.threadException != null) { - ErrorState error = new ErrorState(this.stateMachine); - error.setException(this.threadException); - this.setNextState(error); + ErrorDialog error = new ErrorDialog(this.stateMachine.getGUIProvider().getMainShell(), + SWT.NONE, "Failed to prepare document for signature.", this.threadException, + true); + this.threadException = null; + if(error.open()) { + this.stateMachine.update(); + } else { + this.stateMachine.exit(); + } return; } diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/SigningState.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/SigningState.java index 413f125c..37877f12 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/SigningState.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/SigningState.java @@ -16,9 +16,11 @@ package at.asit.pdfover.gui.workflow.states; //Imports +import org.eclipse.swt.SWT; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import at.asit.pdfover.gui.controls.ErrorDialog; import at.asit.pdfover.gui.workflow.StateMachine; import at.asit.pdfover.gui.workflow.Status; import at.asit.pdfover.signator.Signer; @@ -84,9 +86,14 @@ public class SigningState extends State { } if(this.threadException != null) { - ErrorState error = new ErrorState(this.stateMachine); - error.setException(this.threadException); - this.setNextState(error); + ErrorDialog error = new ErrorDialog(this.stateMachine.getGUIProvider().getMainShell(), + SWT.NONE, "Signature error", this.threadException, true); + this.threadException = null; + if(error.open()) { + this.stateMachine.update(); + } else { + this.stateMachine.exit(); + } return; } -- cgit v1.2.3