MCPcopy Create free account
hub / github.com/SeleniumHQ/selenium / GridUiRoute

Class GridUiRoute

java/src/org/openqa/selenium/grid/web/GridUiRoute.java:37–101  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

35import org.openqa.selenium.remote.http.Route;
36
37public class GridUiRoute implements Routable {
38
39 private static final Logger LOG = Logger.getLogger("selenium");
40
41 private static final String GRID_RESOURCE = "grid-ui";
42 private static final String GRID_RESOURCE_WITH_PREFIX = String.format("/%s", GRID_RESOURCE);
43
44 private final Route routes;
45
46 public GridUiRoute(String prefix) {
47 Require.nonNull(prefix, "Prefix cannot be null");
48 URL uiRoot = GridUiRoute.class.getResource(GRID_RESOURCE_WITH_PREFIX);
49 if (uiRoot != null) {
50 ResourceHandler uiHandler = new ResourceHandler(new ClassPathResource(uiRoot, GRID_RESOURCE));
51 HttpResponse uiRedirect =
52 new HttpResponse()
53 .setStatus(HTTP_MOVED_TEMP)
54 .addHeader("Location", prefix.concat("/ui/"));
55
56 Supplier<HttpHandler> redirectHandler = () -> req -> uiRedirect;
57
58 Routable appendRoute =
59 Route.combine(consoleRoute(prefix, redirectHandler), uiRoute(prefix, () -> uiHandler));
60 if (!prefix.isEmpty()) {
61 appendRoute = Route.combine(appendRoute, redirectRoute(prefix, redirectHandler));
62 }
63
64 routes = Route.combine(get("/").to(redirectHandler), appendRoute);
65 } else {
66 LOG.warning("It was not possible to load the Grid UI.");
67 Json json = new Json();
68 routes = Route.matching(req -> false).to(() -> new NoHandler(json));
69 }
70 }
71
72 @Override
73 public boolean matches(HttpRequest req) {
74 return routes.matches(req);
75 }
76
77 @Override
78 public HttpResponse execute(HttpRequest req) {
79 return routes.execute(req);
80 }
81
82 private static Routable uiRoute(String prefix, Supplier<HttpHandler> handler) {
83 return buildRoute(
84 "/ui", prefix, path -> Route.prefix(path).to(Route.matching(req -> true).to(handler)));
85 }
86
87 private static Routable consoleRoute(String prefix, Supplier<HttpHandler> handler) {
88 return buildRoute("/grid/console", prefix, path -> get(path).to(handler));
89 }
90
91 private static Routable buildRoute(String url, String prefix, Function<String, Route> mapper) {
92 List<String> subPaths =
93 prefix.isEmpty() ? Collections.singletonList(url) : List.of(prefix + url, url);
94 return subPaths.stream().map(mapper).reduce(Route::combine).get();

Callers

nothing calls this directly

Calls 2

getLoggerMethod · 0.80
formatMethod · 0.45

Tested by

no test coverage detected