@Override public boolean handleException(Exception ex) { boolean handled = wrappedTask.handleException(ex); if (handled || wrappedTask.getOwnerScreen() == null) { Screens screens = getScreenContext().getScreens(); screens.remove(screen); } else { Screens screens = getScreenContext().getScreens(); screens.remove(screen); showExecutionError(ex); log.error("Exception occurred in background task", ex); handled = true; } return handled; }
/** * Removes all windows from all UIs. */ public void removeAllWindows() { log.debug("Closing all windows in all UIs"); try { for (AppUI ui : getAppUIs()) { Screens screens = ui.getScreens(); if (screens != null) { Screen rootScreen = screens.getOpenedScreens().getRootScreenOrNull(); if (rootScreen != null) { screens.removeAll(); screens.remove(rootScreen); } } // also remove all native Vaadin windows, that is not under CUBA control Window[] windows = ui.getWindows().toArray(new Window[0]); for (com.vaadin.ui.Window win : windows) { ui.removeWindow(win); } // todo also remove all notifications } } catch (Throwable e) { log.error("Error closing all windows", e); } }
@Override public void done(V result) { Screens screens = getScreenContext().getScreens(); screens.remove(screen); try { wrappedTask.done(result); } catch (Exception ex) { // we should show exception messages immediately showExecutionError(ex); } }
@Override public boolean handleTimeoutException() { boolean handled = wrappedTask.handleTimeoutException(); if (handled || wrappedTask.getOwnerScreen() == null) { Screens screens = getScreenContext().getScreens(); screens.remove(screen); } else { Screens screens = getScreenContext().getScreens(); screens.remove(screen); Notifications notifications = getScreenContext().getNotifications(); Messages messages = AppBeans.get(Messages.NAME); notifications.create(Notifications.NotificationType.WARNING) .withCaption(messages.getMessage(LocalizedTaskWrapper.class, "backgroundWorkProgress.timeout")) .withDescription(messages.getMessage(LocalizedTaskWrapper.class, "backgroundWorkProgress.timeoutMessage")) .show(); handled = true; } return handled; }
/** * Requests closing of the screen caused by the given action. * * @param action close action which is propagated to {@link BeforeCloseEvent} and {@link AfterCloseEvent} * @return result of operation */ public OperationResult close(CloseAction action) { BeforeCloseEvent beforeCloseEvent = new BeforeCloseEvent(this, action); fireEvent(BeforeCloseEvent.class, beforeCloseEvent); if (beforeCloseEvent.isClosePrevented()) { if (beforeCloseEvent.getCloseResult() != null) { return beforeCloseEvent.getCloseResult(); } return OperationResult.fail(); } // save settings right before removing if (isSaveSettingsOnClose(action)) { saveSettings(); } if (isSaveScreenHistoryOnClose(action)) { ScreenHistorySupport screenHistorySupport = beanLocator.get(ScreenHistorySupport.NAME); screenHistorySupport.saveScreenHistory(this); } screenContext.getScreens().remove(this); AfterCloseEvent afterCloseEvent = new AfterCloseEvent(this, action); fireEvent(AfterCloseEvent.class, afterCloseEvent); return OperationResult.success(); }