use of io.jmix.ui.screen.Screen in project jmix by jmix-framework.
the class WebUrlRouting method buildDialogRoute.
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;
}
use of io.jmix.ui.screen.Screen in project jmix by jmix-framework.
the class ParamsNavigationHandler method doHandle.
@Override
public boolean doHandle(NavigationState requestedState, AppUI ui) {
UrlChangeHandler urlChangeHandler = ui.getUrlChangeHandler();
if (urlChangeHandler.isEmptyState(requestedState)) {
return false;
}
Screen screen = urlChangeHandler.getActiveScreen();
if (screen == null) {
log.debug("Unable to find a screen for state: '{}", requestedState);
return false;
}
Map<String, String> params = requestedState.getParams() != null ? requestedState.getParams() : Collections.emptyMap();
WindowImpl window = (WindowImpl) screen.getWindow();
NavigationState resolvedState = window.getResolvedState();
if (resolvedState == null || params.equals(resolvedState.getParams())) {
return false;
}
NavigationState newState = new NavigationState(resolvedState.getRoot(), resolvedState.getStateMark(), resolvedState.getNestedRoute(), params);
window.setResolvedState(newState);
UiControllerUtils.fireEvent(screen, UrlParamsChangedEvent.class, new UrlParamsChangedEvent(screen, params));
return true;
}
use of io.jmix.ui.screen.Screen in project jmix by jmix-framework.
the class RootNavigationHandler method doHandle.
@Override
public boolean doHandle(NavigationState requestedState, AppUI ui) {
UrlChangeHandler urlChangeHandler = ui.getUrlChangeHandler();
if (urlChangeHandler.isEmptyState(requestedState)) {
urlChangeHandler.revertNavigationState();
return false;
}
if (!rootChanged(requestedState, ui)) {
return false;
}
String rootRoute = requestedState.getRoot();
WindowInfo windowInfo = windowConfig.findWindowInfoByRoute(rootRoute);
if (windowInfo == null) {
log.info("No registered screen found for route: '{}'", rootRoute);
urlChangeHandler.revertNavigationState();
handle404(rootRoute, ui);
return true;
}
if (urlChangeHandler.shouldRedirect(windowInfo)) {
urlChangeHandler.redirect(requestedState);
return true;
}
if (!urlChangeHandler.isPermittedToNavigate(requestedState, windowInfo)) {
return true;
}
Screen screen = ui.getScreens().create(windowInfo.getId(), OpenMode.ROOT);
boolean hasNestedRoute = StringUtils.isNotEmpty(requestedState.getNestedRoute());
if (!hasNestedRoute && MapUtils.isNotEmpty(requestedState.getParams())) {
UiControllerUtils.fireEvent(screen, UrlParamsChangedEvent.class, new UrlParamsChangedEvent(screen, requestedState.getParams()));
((WindowImpl) screen.getWindow()).setResolvedState(requestedState);
}
screen.show();
return !hasNestedRoute;
}
use of io.jmix.ui.screen.Screen in project jmix by jmix-framework.
the class RootNavigationHandler method rootChanged.
protected boolean rootChanged(NavigationState requestedState, AppUI ui) {
Screen rootScreen = ui.getScreens().getOpenedScreens().getRootScreenOrNull();
if (rootScreen == null) {
return false;
}
String rootRoute = ((WindowImpl) rootScreen.getWindow()).getResolvedState().getRoot();
return !StringUtils.equals(rootRoute, requestedState.getRoot());
}
use of io.jmix.ui.screen.Screen in project jmix by jmix-framework.
the class UrlChangeHandler method redirect.
public void redirect(NavigationState navigationState) {
String loginScreenId = uiProperties.getLoginScreenId();
Screen loginScreen = ui.getScreens().create(loginScreenId, OpenMode.ROOT);
loginScreen.show();
RedirectHandler redirectHandler = applicationContext.getBean(RedirectHandler.class, ui);
redirectHandler.schedule(navigationState);
setRedirectHandler(redirectHandler);
}
Aggregations