javax.servlet.Registration#com.vaadin.flow.router.RouteConfiguration源码实例Demo

下面列出了javax.servlet.Registration#com.vaadin.flow.router.RouteConfiguration 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: vaadin-app-layout   文件: UpNavigationHelper.java
public static Optional<RouteData> getClosestRoute(String url) {
    if (url.lastIndexOf("/") > 0) {
        Optional<RouteSimilarity> result = RouteConfiguration.forApplicationScope()
                .getAvailableRoutes()
                .stream()
                .filter(routeData -> !routeData.getUrl().equals(url) ||
                        routeData.getRouteAliases().stream().anyMatch(routeAliasData -> routeAliasData.getUrl().equals(url)))
                .map(routeData -> new RouteSimilarity(routeData, url))
                .filter(routeSimilarity -> routeSimilarity.getSimilarity() > 0)
                .max(Comparator.comparingInt(RouteSimilarity::getSimilarity));
        if (result.isPresent()) {
            return Optional.ofNullable(result.get().getRouteData());
        }
    }
    return Optional.empty();
}
 
源代码2 项目: flow   文件: RouteRegistryInitializerTest.java
@Test
public void routeRegistry_fails_for_multiple_registration_of_same_route() {
    expectedEx.expect(InvalidRouteConfigurationException.class);
    expectedEx.expectMessage(
            "Navigation targets must have unique routes, found navigation targets "
                    + "'com.vaadin.flow.server.startup.RouteRegistryInitializerTest$NavigationTargetFoo' and "
                    + "'com.vaadin.flow.server.startup.RouteRegistryInitializerTest$NavigationTargetFoo2' with the same route.");

    RouteConfiguration.forRegistry(registry)
            .setAnnotatedRoute(NavigationTargetFoo.class);

    Assert.assertTrue("RouteRegistry should be initialized",
            registry.hasNavigationTargets());

    // Test should fail on this as there already exists a route for this
    // route
    RouteConfiguration.forRegistry(registry)
            .setAnnotatedRoute(NavigationTargetFoo2.class);
}
 
源代码3 项目: flow   文件: VaadinServiceTest.java
@Test
public void should_reported_routing_hybrid() {
    VaadinServiceInitListener initListener = event -> {
        RouteConfiguration.forApplicationScope().setRoute("test",
                TestView.class);
    };
    UsageStatistics.markAsUsed(Constants.STATISTIC_ROUTING_CLIENT, Version.getFullVersion());
    MockInstantiator instantiator = new MockInstantiator(initListener);

    MockVaadinServletService service = new MockVaadinServletService();

    service.init(instantiator);

    Assert.assertTrue(UsageStatistics.getEntries().anyMatch(
            e -> Constants.STATISTIC_ROUTING_HYBRID.equals(e.getName())));
    Assert.assertFalse(UsageStatistics.getEntries().anyMatch(
            e -> Constants.STATISTIC_ROUTING_CLIENT.equals(e.getName())));
    Assert.assertFalse(UsageStatistics.getEntries().anyMatch(
            e -> Constants.STATISTIC_ROUTING_SERVER.equals(e.getName())));
}
 
源代码4 项目: flow   文件: BootstrapHandlerTest.java
private void initUI(UI ui, VaadinRequest request,
        Set<Class<? extends Component>> navigationTargets)
        throws InvalidRouteConfigurationException {

    RouteConfiguration routeConfiguration = RouteConfiguration
            .forRegistry(service.getRouteRegistry());
    routeConfiguration.update(() -> {
        routeConfiguration.getHandledRegistry().clean();
        navigationTargets.forEach(routeConfiguration::setAnnotatedRoute);
    });

    this.request = request;

    ui.doInit(request, 0);
    ui.getRouter().initializeUI(ui, request);
    context = new BootstrapContext(request, null, session, ui,
            this::contextRootRelativePath);
    ui.getInternals().setContextRoot(contextRootRelativePath(request));
}
 
private void assertPushConfigurationForComponent(
        Class<? extends Component> annotatedClazz,
        Class<? extends PushConnection> pushConnectionType)
        throws InvalidRouteConfigurationException {
    BootstrapHandler bootstrapHandler = new BootstrapHandler();
    VaadinResponse response = mock(VaadinResponse.class);
    RouteConfiguration routeConfiguration = RouteConfiguration
            .forRegistry(service.getRouteRegistry());
    routeConfiguration.update(() -> {
        routeConfiguration.getHandledRegistry().clean();
        routeConfiguration.setAnnotatedRoute(annotatedClazz);
    });

    final BootstrapHandler.BootstrapContext context = bootstrapHandler
            .createAndInitUI(UI.class, createVaadinRequest(), response,
                    session);
    Push pushAnnotation = annotatedClazz.getAnnotation(Push.class);
    Assert.assertNotNull("Should have @Push annotated component",
            pushAnnotation);
    PushConfiguration pushConfiguration = context.getUI()
            .getPushConfiguration();
    assertPushConfiguration(pushConfiguration, pushAnnotation);
    assertThat(context.getUI().getInternals().getPushConnection(),
            instanceOf(pushConnectionType));
}
 
源代码6 项目: flow   文件: LocationObserverTest.java
@Test
public void navigation_and_locale_change_should_fire_locale_change_observer()
        throws InvalidRouteConfigurationException {
    router = new Router(new TestRouteRegistry());
    ui = new RouterTestUI(router);

    RouteConfiguration.forRegistry(router.getRegistry()).setAnnotatedRoute(Translations.class);

    ui.navigate("");

    Assert.assertEquals("Expected event amount was wrong", 1,
            eventCollector.size());
    Assert.assertEquals(
            "Received locale change event for locale: "
                    + Locale.getDefault().getDisplayName(),
            eventCollector.get(0));

    ui.setLocale(Locale.CANADA);

    Assert.assertEquals("Expected event amount was wrong", 2,
            eventCollector.size());
    Assert.assertEquals(
            "Received locale change event for locale: "
                    + Locale.CANADA.getDisplayName(),
            eventCollector.get(1));
}
 
源代码7 项目: flow   文件: NavigationStateRendererTest.java
@Test
public void getRouterLayoutForMulipleLayers() throws Exception {
    NavigationStateRenderer childRenderer = new NavigationStateRenderer(
            navigationStateFromTarget(ChildConfiguration.class));
    RouteConfiguration.forRegistry(router.getRegistry())
            .setAnnotatedRoute(ChildConfiguration.class);

    List<Class<? extends RouterLayout>> routerLayoutTypes = childRenderer
            .getRouterLayoutTypes(ChildConfiguration.class, router);

    Assert.assertEquals("Not all expected layouts were found", 2,
            routerLayoutTypes.size());
    Assert.assertEquals("Wrong class found as first in array",
            MiddleLayout.class, routerLayoutTypes.get(0));
    Assert.assertEquals("Wrong class found as second in array",
            RouteParentLayout.class, routerLayoutTypes.get(1));
}
 
源代码8 项目: flow   文件: ErrorStateRendererTest.java
@Test(expected = ExceptionsTrace.class)
public void handle_openNPEErrorTarget_infiniteReroute_noStackOverflow_throws() {
    UI ui = configureMocks();

    NavigationState state = new NavigationStateBuilder(ui.getRouter())
            .withTarget(InfiniteLoopErrorTarget.class).build();
    ErrorStateRenderer renderer = new ErrorStateRenderer(state);

    RouteConfiguration.forRegistry(ui.getRouter().getRegistry())
            .setAnnotatedRoute(InfiniteLoopNPEView.class);

    ErrorParameter<Exception> parameter = new ErrorParameter<>(
            Exception.class, new NullPointerException());
    ErrorNavigationEvent event = new ErrorNavigationEvent(ui.getRouter(),
            new Location("error"), ui, NavigationTrigger.CLIENT_SIDE,
            parameter);
    // event should route to ErrorTarget whose layout forwards to NPEView
    // which reroute to ErrorTarget and this is an infinite loop
    renderer.handle(event);
}
 
源代码9 项目: flow   文件: ErrorStateRendererTest.java
@Test
public void handle_errorViewLayoutForwardsToAView_viewIsNavigated() {
    UI ui = configureMocks();

    NavigationState state = new NavigationStateBuilder(ui.getRouter())
            .withTarget(HappyPathErrorTarget.class).build();
    ErrorStateRenderer renderer = new ErrorStateRenderer(state);

    RouteConfiguration.forRegistry(ui.getRouter().getRegistry())
            .setAnnotatedRoute(HappyPathViewView.class);

    ErrorParameter<Exception> parameter = new ErrorParameter<>(
            Exception.class, new NullPointerException());
    ErrorNavigationEvent event = new ErrorNavigationEvent(ui.getRouter(),
            new Location("error"), ui, NavigationTrigger.CLIENT_SIDE,
            parameter);
    Assert.assertEquals(200, renderer.handle(event));

    List<HasElement> chain = ui.getInternals()
            .getActiveRouterTargetsChain();
    Assert.assertEquals(1, chain.size());
    Assert.assertEquals(HappyPathViewView.class, chain.get(0).getClass());
}
 
源代码10 项目: flow   文件: TestingServiceInitListener.java
@Override
public void serviceInit(ServiceInitEvent event) {
    event.getSource().addUIInitListener(this::handleUIInit);
    initCount.incrementAndGet();

    RouteConfiguration configuration = RouteConfiguration
            .forApplicationScope();
    if (!configuration
            .isPathAvailable(DYNAMICALLY_REGISTERED_ROUTE)) {
        configuration.setRoute(DYNAMICALLY_REGISTERED_ROUTE,
                DynamicallyRegisteredRoute.class);
    }

    event.addRequestHandler((session, request, response) -> {
        requestCount.incrementAndGet();
        return false;
    });
}
 
源代码11 项目: flow   文件: RouteRegistryInitializer.java
private void setAnnotatedRoutes(RouteConfiguration routeConfiguration,
        Set<Class<? extends Component>> routes) {
    routeConfiguration.getHandledRegistry().clean();
    for (Class<? extends Component> navigationTarget : routes) {
        try {
            routeConfiguration.setAnnotatedRoute(navigationTarget);
        } catch (AmbiguousRouteConfigurationException exception) {
            if (!handleAmbiguousRoute(routeConfiguration,
                    exception.getConfiguredNavigationTarget(),
                    navigationTarget)) {
                throw exception;
            }
        }
    }
}
 
源代码12 项目: flow   文件: RouteRegistryInitializer.java
private boolean handleAmbiguousRoute(RouteConfiguration routeConfiguration,
        Class<? extends Component> configuredNavigationTarget,
        Class<? extends Component> navigationTarget) {
    if (GenericTypeReflector.isSuperType(navigationTarget,
            configuredNavigationTarget)) {
        return true;
    } else if (GenericTypeReflector.isSuperType(configuredNavigationTarget,
            navigationTarget)) {
        routeConfiguration.removeRoute(configuredNavigationTarget);
        routeConfiguration.setAnnotatedRoute(navigationTarget);
        return true;
    }
    return false;
}
 
源代码13 项目: flow   文件: UidlWriterTest.java
private UI initializeUIForDependenciesTest(UI ui) throws Exception {
    mocks = new MockServletServiceSessionSetup();

    VaadinSession session = mocks.getSession();
    session.lock();
    ui.getInternals().setSession(session);

    RouteConfiguration routeConfiguration = RouteConfiguration
            .forRegistry(ui.getRouter().getRegistry());
    routeConfiguration.update(() -> {
        routeConfiguration.getHandledRegistry().clean();
        routeConfiguration.setAnnotatedRoute(BaseClass.class);
    });

    for (String type : new String[] { "html", "js", "css" }) {
        mocks.getServlet().addServletContextResource("inline." + type,
                "inline." + type);
    }

    HttpServletRequest servletRequestMock = mock(HttpServletRequest.class);

    VaadinServletRequest vaadinRequestMock = mock(
            VaadinServletRequest.class);

    when(vaadinRequestMock.getHttpServletRequest())
            .thenReturn(servletRequestMock);

    ui.doInit(vaadinRequestMock, 1);
    ui.getRouter().initializeUI(ui, vaadinRequestMock);

    return ui;
}
 
源代码14 项目: flow   文件: VaadinServiceTest.java
@Test
public void should_reported_routing_server() {
    VaadinServiceInitListener initListener = event -> {
        RouteConfiguration.forApplicationScope().setRoute("test",
                TestView.class);
    };
    MockInstantiator instantiator = new MockInstantiator(initListener);

    MockVaadinServletService service = new MockVaadinServletService();

    service.init(instantiator);

    Assert.assertTrue(UsageStatistics.getEntries().anyMatch(
            e -> Constants.STATISTIC_ROUTING_SERVER.equals(e.getName())));
}
 
源代码15 项目: flow   文件: VaadinServiceTest.java
@Test
public void testServiceInitListener_accessApplicationRouteRegistry_registryAvailable() {

    VaadinServiceInitListener initListener = event -> {
        Assert.assertNotNull("service init should have set thread local",
                VaadinService.getCurrent());

        Router router = event.getSource().getRouter();
        Assert.assertNotEquals("Router should be initialized", router);

        Assert.assertNotEquals("registry should be initialized",
                router.getRegistry());

        RouteConfiguration.forApplicationScope().setRoute("test",
                TestView.class);
    };
    MockInstantiator instantiator = new MockInstantiator(initListener);

    MockVaadinServletService service = new MockVaadinServletService();

    service.init(instantiator);

    // the following will allow the route configuration call to work
    VaadinService.setCurrent(service);
    List<RouteData> availableRoutes = RouteConfiguration
            .forApplicationScope().getAvailableRoutes();
    VaadinService.setCurrent(null);

    Assert.assertEquals(1, availableRoutes.size());
    Assert.assertEquals(availableRoutes.get(0).getUrl(), "test");
}
 
源代码16 项目: flow   文件: NavigationStateRendererTest.java
@Test
public void getRouterLayoutForSingleParent() throws Exception {
    NavigationStateRenderer childRenderer = new NavigationStateRenderer(
            navigationStateFromTarget(SingleView.class));
    RouteConfiguration.forRegistry(router.getRegistry())
            .setAnnotatedRoute(SingleView.class);

    List<Class<? extends RouterLayout>> routerLayoutTypes = childRenderer
            .getRouterLayoutTypes(SingleView.class, router);

    Assert.assertEquals("Not all expected layouts were found", 1,
            routerLayoutTypes.size());
    Assert.assertEquals("Wrong class found", RouteParentLayout.class,
            routerLayoutTypes.get(0));
}
 
源代码17 项目: flow   文件: ErrorStateRendererTest.java
@Test(expected = ExceptionsTrace.class)
public void handle_openNPEView_infiniteReroute_noStackOverflow_throws() {
    UI ui = configureMocks();

    NavigationState state = new NavigationStateBuilder(ui.getRouter())
            .withTarget(InfiniteLoopNPEView.class).build();
    NavigationStateRenderer renderer = new NavigationStateRenderer(state);

    RouteConfiguration.forRegistry(ui.getRouter().getRegistry())
            .setAnnotatedRoute(InfiniteLoopNPEView.class);
    ((ApplicationRouteRegistry) ui.getRouter().getRegistry())
            .setErrorNavigationTargets(
                    Collections.singleton(InfiniteLoopErrorTarget.class));

    NavigationEvent event = new NavigationEvent(ui.getRouter(),
            new Location("npe"), ui, NavigationTrigger.CLIENT_SIDE);
    // event should route to ErrorTarget whose layout forwards to NPEView
    // which reroute to ErrorTarget and this is an infinite loop
    renderer.handle(event);

    JsonObject routerLinkState = Json.createObject();
    routerLinkState.put("href", "router_link");
    routerLinkState.put("scrollPositionX", 0d);
    routerLinkState.put("scrollPositionY", 0d);

    event = new NavigationEvent(ui.getRouter(), new Location("npe"), ui,
            NavigationTrigger.ROUTER_LINK, routerLinkState, false);
    // event should route to ErrorTarget whose layout forwards to NPEView
    // which reroute to ErrorTarget and this is an infinite loop
    renderer.handle(event);
}
 
源代码18 项目: vaadin-app-layout   文件: UpNavigationHelper.java
private static Stream<RouteData> getRoutesForClassName(Class<? extends Component> className) {
    return RouteConfiguration.forSessionScope()
            .getAvailableRoutes()
            .stream()
            .filter(routeData -> routeData.getNavigationTarget() == className);
}
 
源代码19 项目: vaadin-app-layout   文件: UpNavigationHelper.java
public static void performUpNavigation(Class<? extends Component> currentNavigation) {
    getClosestRoute(RouteConfiguration.forSessionScope().getUrl(currentNavigation))
            .ifPresent(routeData -> UI.getCurrent().navigate(routeData.getUrl()));
}
 
源代码20 项目: vaadin-app-layout   文件: UpNavigationHelper.java
public void register(Class<? extends Component> className) {
    getRoutesForClassName(className)
            .forEach(routeData -> {
                registeredRoutes.put(routeData, RouteConfiguration.forSessionScope().getUrl(className));
            });
}
 
源代码21 项目: flow   文件: ScannerTestComponents.java
@SuppressWarnings("unchecked")
private void registerRoute() {
    RouteConfiguration.forSessionScope().setRoute("foo",
            DynamicComponentClass.class,
            DynamicLayoutClass.class);
}
 
源代码22 项目: flow   文件: ScannerTestComponents.java
public RouteWithService() {
    UserRouteService.registerUserRoute(RouteConfiguration.forSessionScope(), "donald");
}
 
源代码23 项目: flow   文件: ScannerTestComponents.java
@SuppressWarnings("unchecked")
public static void registerUserRoute(RouteConfiguration config, String userId) {
    config.setRoute(userId, DynamicComponentClass.class, DynamicLayoutClass.class);
}
 
源代码24 项目: flow   文件: UITest.java
private static void initUI(UI ui, String initialLocation,
                           ArgumentCaptor<Integer> statusCodeCaptor)
        throws InvalidRouteConfigurationException {
    try {
        VaadinServletRequest request = Mockito
                .mock(VaadinServletRequest.class);
        VaadinResponse response = Mockito.mock(VaadinResponse.class);

        String pathInfo;
        if (initialLocation.isEmpty()) {
            pathInfo = null;
        } else {
            Assert.assertFalse(initialLocation.startsWith("/"));
            pathInfo = "/" + initialLocation;
        }
        Mockito.when(request.getPathInfo()).thenReturn(pathInfo);

        ServletConfig servletConfig = new MockServletConfig();
        VaadinServlet servlet = new VaadinServlet();
        servlet.init(servletConfig);
        VaadinService service = servlet.getService();
        service.setCurrentInstances(request, response);

        MockVaadinSession session = new AlwaysLockedVaadinSession(service);

        DeploymentConfiguration config = Mockito
                .mock(DeploymentConfiguration.class);
        Mockito.when(config.isProductionMode()).thenReturn(false);

        session.lock();
        session.setConfiguration(config);

        ui.getInternals().setSession(session);

        RouteConfiguration routeConfiguration = RouteConfiguration
                .forRegistry(ui.getRouter().getRegistry());

        routeConfiguration.update(() -> {
            routeConfiguration.getHandledRegistry().clean();
            Arrays.asList(RootNavigationTarget.class,
                    FooBarNavigationTarget.class, Parameterized.class,
                    FooBarParamNavigationTarget.class)
                    .forEach(routeConfiguration::setAnnotatedRoute);
        });

        ui.doInit(request, 0);
        ui.getRouter().initializeUI(ui, request);

        session.unlock();

        if (statusCodeCaptor != null) {
            Mockito.verify(response).setStatus(statusCodeCaptor.capture());
        }
    } catch (ServletException e) {
        throw new RuntimeException(e);
    }
}
 
源代码25 项目: flow   文件: InvalidUrlTest.java
private static void initUI(UI ui, String initialLocation,
                           ArgumentCaptor<Integer> statusCodeCaptor)
        throws InvalidRouteConfigurationException {
    try {
        VaadinServletRequest request = Mockito
                .mock(VaadinServletRequest.class);
        VaadinResponse response = Mockito.mock(VaadinResponse.class);

        String pathInfo;
        if (initialLocation.isEmpty()) {
            pathInfo = null;
        } else {
            Assert.assertFalse(initialLocation.startsWith("/"));
            pathInfo = "/" + initialLocation;
        }
        Mockito.when(request.getPathInfo()).thenReturn(pathInfo);

        ServletConfig servletConfig = new MockServletConfig();
        VaadinServlet servlet = new VaadinServlet();
        servlet.init(servletConfig);
        VaadinService service = servlet.getService();
        service.setCurrentInstances(request, response);

        MockVaadinSession session = new AlwaysLockedVaadinSession(service);

        DeploymentConfiguration config = Mockito
                .mock(DeploymentConfiguration.class);
        Mockito.when(config.isProductionMode()).thenReturn(false);

        session.lock();
        session.setConfiguration(config);

        ui.getInternals().setSession(session);

        RouteConfiguration routeConfiguration = RouteConfiguration
                .forRegistry(ui.getRouter().getRegistry());
        routeConfiguration.update(() -> {
            routeConfiguration.getHandledRegistry().clean();
            Arrays.asList(UITest.RootNavigationTarget.class,
                    UITest.FooBarNavigationTarget.class).forEach(routeConfiguration::setAnnotatedRoute);
        });

        ui.doInit(request, 0);
        ui.getRouter().initializeUI(ui, request);

        session.unlock();

        if (statusCodeCaptor != null) {
            Mockito.verify(response).setStatus(statusCodeCaptor.capture());
        }
    } catch (ServletException e) {
        throw new RuntimeException(e);
    }
}
 
源代码26 项目: flow   文件: UI.java
/**
 * Updates this UI to show the view corresponding to the given navigation
 * target with the specified parameters. The parameters needs to comply with
 * the ones defined in one of the {@link com.vaadin.flow.router.Route} or
 * {@link com.vaadin.flow.router.RouteAlias} annotating the navigationTarget
 * and with any {@link com.vaadin.flow.router.RoutePrefix} annotating the
 * parent layouts of the navigationTarget.
 * <p>
 * Besides the navigation to the {@code location} this method also updates
 * the browser location (and page history).
 *
 * @param navigationTarget
 *            navigation target to navigate to.
 * @param parameters
 *            parameters to pass to view.
 * @throws IllegalArgumentException
 *             if navigationTarget is a {@link HasUrlParameter} with a
 *             mandatory parameter, but parameters argument doesn't
 *             provide {@link HasUrlParameterFormat#PARAMETER_NAME}
 *             parameter.
 * @throws NotFoundException
 *             in case there is no route defined for the given
 *             navigationTarget matching the parameters.
 */
public void navigate(Class<? extends Component> navigationTarget,
        RouteParameters parameters) {
    RouteConfiguration configuration = RouteConfiguration
            .forRegistry(getRouter().getRegistry());
    navigate(configuration.getUrl(navigationTarget, parameters));
}