protected Screens.OpenedScreens getOpenedScreens() { return getScreens().getOpenedScreens(); }
protected String buildScreenRoute(Screen screen) { List<Screen> screens = new ArrayList<>(ui.getScreens().getOpenedScreens().getCurrentBreadcrumbs()); if (screens.isEmpty() || screens.get(0) != screen) { log.debug("Current breadcrumbs doesn't contain the given screen '{}'", screen.getId()); return ""; } Collections.reverse(screens); StringBuilder state = new StringBuilder(); String prevSubRoute = null; for (int i = 0; i < screens.size() && i < MAX_NESTING; i++) { String subRoute = buildSubRoute(prevSubRoute, screens.get(i)); if (StringUtils.isNotEmpty(state) && StringUtils.isNotEmpty(subRoute)) { state.append('/'); } state.append(subRoute); prevSubRoute = subRoute; } return state.toString(); }
protected String buildDialogRoute(Screen dialog) { RouteDefinition dialogRouteDefinition = getRouteDef(dialog); Iterator<Screen> currentTabScreens = ui.getScreens().getOpenedScreens().getCurrentBreadcrumbs().iterator(); Screen currentScreen = currentTabScreens.hasNext() ? currentTabScreens.next() : null; String currentScreenRoute = currentScreen != null ? buildScreenRoute(currentScreen) : ""; if (dialogRouteDefinition == null) { return currentScreenRoute; } String dialogRoute = dialogRouteDefinition.getPath(); if (dialogRoute == null || dialogRoute.isEmpty()) { return currentScreenRoute; } String parentPrefix = dialogRouteDefinition.getParentPrefix(); if (StringUtils.isNotEmpty(parentPrefix) && dialogRoute.startsWith(parentPrefix + '/') && currentScreenRoute.endsWith(parentPrefix)) { dialogRoute = dialogRoute.substring(parentPrefix.length() + 1); } return currentScreenRoute == null || currentScreenRoute.isEmpty() ? dialogRoute : currentScreenRoute + '/' + dialogRoute; }
protected boolean omitParams(Screen screen) { Screens.LaunchMode launchMode = screen.getWindow().getContext().getLaunchMode(); if (OpenMode.THIS_TAB != launchMode) { return false; } return ui.getScreens().getOpenedScreens().getCurrentBreadcrumbs().size() > MAX_NESTING; }
protected void closeAllTabWindows(ComponentContainer container) { AppUI ui = (AppUI) component.getUI(); OpenedScreens openedScreens = ui.getScreens().getOpenedScreens(); for (WindowStack windowStack : openedScreens.getWorkAreaStacks()) { boolean closed = closeWindowStack(windowStack); if (!closed) { break; } } }
protected boolean notAttachedToUi(Screen screen) { boolean notAttached; Screens.OpenedScreens openedScreens = ui.getScreens().getOpenedScreens(); if (screen.getWindow() instanceof RootWindow) { Screen rootScreen = openedScreens.getRootScreenOrNull(); notAttached = rootScreen == null || rootScreen != screen; } else if (screen.getWindow() instanceof DialogWindow) { notAttached = !openedScreens.getDialogScreens() .contains(screen); } else { notAttached = !openedScreens.getActiveScreens() .contains(screen); } return notAttached; } }
protected void closeOtherTabWindows(ComponentContainer container) { AppUI ui = (AppUI) component.getUI(); OpenedScreens openedScreens = ui.getScreens().getOpenedScreens(); for (WindowStack windowStack : openedScreens.getWorkAreaStacks()) { if (!windowStack.isSelected()) { boolean closed = closeWindowStack(windowStack); if (!closed) { break; } } } }
/** * 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); } }
protected NavigationState buildNavState(Screen screen, Map<String, String> urlParams) { NavigationState state; if (screen.getWindow() instanceof RootWindow) { state = new NavigationState(getRoute(screen), "", "", urlParams); } else { String rootRoute = getRoute(ui.getScreens().getOpenedScreens().getRootScreen()); String stateMark = getStateMark(screen); String nestedRoute = buildNestedRoute(screen); Map<String, String> params = buildParams(screen, urlParams); state = new NavigationState(rootRoute, stateMark, nestedRoute, params); } return state; }