use of com.vaadin.flow.server.AppShellRegistry in project flow by vaadin.
the class IndexHtmlRequestHandlerTest method should_throwUnSupportedException_when_usingAppShellToConfigureLoadingIndicator.
@Test(expected = UnsupportedOperationException.class)
public void should_throwUnSupportedException_when_usingAppShellToConfigureLoadingIndicator() throws Exception {
// Set class in context and do not call initializer
AppShellRegistry registry = AppShellRegistry.getInstance(context);
registry.setShell(MyAppShellWithLoadingIndicatorConfig.class);
mocks.setAppShellRegistry(registry);
indexHtmlRequestHandler.synchronizedHandleRequest(session, createVaadinRequest("/"), response);
}
use of com.vaadin.flow.server.AppShellRegistry in project flow by vaadin.
the class IndexHtmlRequestHandlerTest method should_throwUnSupportedException_when_usingAppShellToConfigureReconnectionDialog.
@Test(expected = UnsupportedOperationException.class)
public void should_throwUnSupportedException_when_usingAppShellToConfigureReconnectionDialog() throws Exception {
// Set class in context and do not call initializer
AppShellRegistry registry = AppShellRegistry.getInstance(context);
registry.setShell(MyAppShellWithReconnectionDialogConfig.class);
mocks.setAppShellRegistry(registry);
indexHtmlRequestHandler.synchronizedHandleRequest(session, createVaadinRequest("/"), response);
}
use of com.vaadin.flow.server.AppShellRegistry in project flow by vaadin.
the class IndexHtmlRequestHandlerTest method should_add_metaAndPwa_Inline_Elements_when_appShellPresent.
@Test
public void should_add_metaAndPwa_Inline_Elements_when_appShellPresent() throws Exception {
// Set class in context and do not call initializer
AppShellRegistry registry = AppShellRegistry.getInstance(context);
registry.setShell(AppShellWithPWA.class);
mocks.setAppShellRegistry(registry);
indexHtmlRequestHandler.synchronizedHandleRequest(session, createVaadinRequest("/"), response);
String indexHtml = responseOutput.toString(StandardCharsets.UTF_8.name());
Document document = Jsoup.parse(indexHtml);
Elements elements = document.head().getElementsByTag("meta");
assertEquals(5, elements.size());
assertEquals("viewport", elements.get(1).attr("name"));
assertEquals("my-viewport", elements.get(1).attr("content"));
assertEquals("apple-mobile-web-app-capable", elements.get(2).attr("name"));
assertEquals("yes", elements.get(2).attr("content"));
assertEquals("theme-color", elements.get(3).attr("name"));
assertEquals("#ffffff", elements.get(3).attr("content"));
assertEquals("apple-mobile-web-app-status-bar-style", elements.get(4).attr("name"));
assertEquals("#ffffff", elements.get(4).attr("content"));
Elements headInlineAndStyleElements = document.head().getElementsByTag("style");
assertEquals(2, headInlineAndStyleElements.size());
assertEquals("text/css", headInlineAndStyleElements.get(1).attr("type"));
assertEquals("body,#outlet{width:my-width;height:my-height;}", headInlineAndStyleElements.get(1).childNode(0).toString());
}
use of com.vaadin.flow.server.AppShellRegistry in project flow by vaadin.
the class IndexHtmlRequestHandlerTest method should_throwUnSupportedException_when_usingAppShellToConfigurePushMode.
@Test(expected = UnsupportedOperationException.class)
public void should_throwUnSupportedException_when_usingAppShellToConfigurePushMode() throws Exception {
// Set class in context and do not call initializer
AppShellRegistry registry = AppShellRegistry.getInstance(context);
registry.setShell(MyAppShellWithPushConfig.class);
mocks.setAppShellRegistry(registry);
indexHtmlRequestHandler.synchronizedHandleRequest(session, createVaadinRequest("/"), response);
}
use of com.vaadin.flow.server.AppShellRegistry in project flow by vaadin.
the class VaadinAppShellInitializer method init.
/**
* Initializes the {@link AppShellRegistry} for the application.
*
* @param classes
* a set of classes that matches the {@link HandlesTypes} set in
* this class.
* @param context
* the {@link VaadinContext}.
*/
@SuppressWarnings("unchecked")
public static void init(Set<Class<?>> classes, VaadinContext context) {
ApplicationConfiguration config = ApplicationConfiguration.get(context);
if (config.useV14Bootstrap()) {
return;
}
boolean disregardOffendingAnnotations = config.getBooleanProperty(Constants.ALLOW_APPSHELL_ANNOTATIONS, false);
AppShellRegistry registry = AppShellRegistry.getInstance(context);
registry.reset();
if (classes == null || classes.isEmpty()) {
return;
}
List<String> offendingAnnotations = new ArrayList<>();
classes.stream().sorted((a, b) -> registry.isShell(a) ? -1 : registry.isShell(b) ? 1 : 0).forEach(clz -> {
if (registry.isShell(clz)) {
registry.setShell((Class<? extends AppShellConfigurator>) clz);
getLogger().debug("Using {} class for configuring `index.html` response", clz.getName());
} else {
String error = registry.validateClass(clz);
if (error != null) {
offendingAnnotations.add(error);
}
}
});
if (!offendingAnnotations.isEmpty()) {
if (disregardOffendingAnnotations) {
boolean hasPwa = offendingAnnotations.stream().anyMatch(err -> err.matches(".*@PWA.*"));
String message = String.format(hasPwa ? ERROR_HEADER_OFFENDING_PWA : ERROR_HEADER_NO_SHELL, String.join("\n ", offendingAnnotations));
getLogger().error(message);
} else {
String message = String.format(ERROR_HEADER_NO_SHELL, String.join("\n ", offendingAnnotations));
throw new InvalidApplicationConfigurationException(message);
}
}
List<String> classesImplementingPageConfigurator = classes.stream().filter(clz -> PageConfigurator.class.isAssignableFrom(clz)).map(Class::getName).collect(Collectors.toList());
if (!classesImplementingPageConfigurator.isEmpty()) {
String message = String.join("\n - ", classesImplementingPageConfigurator);
if (registry.getShell() != null) {
message = String.format(ERROR_HEADER_OFFENDING_CONFIGURATOR, registry.getShell().getName(), message);
throw new InvalidApplicationConfigurationException(message);
} else {
message = String.format(ERROR_HEADER_NO_APP_CONFIGURATOR, message);
getLogger().error(message);
}
}
}
Aggregations