use of com.vaadin.flow.server.VaadinContext 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);
}
}
}
use of com.vaadin.flow.server.VaadinContext in project flow by vaadin.
the class RouteConfigurationTest method mockRegistry.
private RouteRegistry mockRegistry() {
RouteRegistry registry = Mockito.mock(RouteRegistry.class);
VaadinContext context = new MockVaadinContext();
Mockito.when(registry.getContext()).thenReturn(context);
return registry;
}
use of com.vaadin.flow.server.VaadinContext in project flow by vaadin.
the class FrontendUtilsTest method mockResourceProvider.
private ResourceProvider mockResourceProvider(VaadinService service) {
DeploymentConfiguration config = Mockito.mock(DeploymentConfiguration.class);
VaadinContext context = Mockito.mock(VaadinContext.class);
Lookup lookup = Mockito.mock(Lookup.class);
Mockito.when(context.getAttribute(Lookup.class)).thenReturn(lookup);
ResourceProvider provider = Mockito.mock(ResourceProvider.class);
Mockito.when(lookup.lookup(ResourceProvider.class)).thenReturn(provider);
Mockito.when(service.getDeploymentConfiguration()).thenReturn(config);
Mockito.when(service.getContext()).thenReturn(context);
Mockito.when(config.isProductionMode()).thenReturn(true);
Mockito.when(config.getStringProperty(SERVLET_PARAMETER_STATISTICS_JSON, VAADIN_SERVLET_RESOURCES + STATISTICS_JSON_DEFAULT)).thenReturn("foo");
return provider;
}
use of com.vaadin.flow.server.VaadinContext in project flow by vaadin.
the class FrontendUtilsTest method getServiceWithResource.
private VaadinService getServiceWithResource(String content) throws ServiceException, IOException {
MockDeploymentConfiguration configuration = new MockDeploymentConfiguration();
configuration.setProductionMode(true);
MockVaadinServletService service = new MockVaadinServletService(configuration);
VaadinContext context = service.getContext();
Lookup lookup = Mockito.mock(Lookup.class);
context.setAttribute(Lookup.class, lookup);
ResourceProvider provider = Mockito.mock(ResourceProvider.class);
Mockito.when(lookup.lookup(ResourceProvider.class)).thenReturn(provider);
if (content != null) {
File tmpFile = tmpDir.newFile();
try (FileOutputStream outputStream = new FileOutputStream(tmpFile)) {
IOUtils.write(content, outputStream, StandardCharsets.UTF_8);
}
Mockito.when(provider.getApplicationResource(VAADIN_SERVLET_RESOURCES + STATISTICS_JSON_DEFAULT)).thenReturn(tmpFile.toURI().toURL());
}
return service;
}
use of com.vaadin.flow.server.VaadinContext in project flow by vaadin.
the class DefaultApplicationConfigurationFactoryTest method create_tokenFileIsReadFromClassloader_externalStatsFileIsReadFromTokenFile_predefinedContext.
@Test
public void create_tokenFileIsReadFromClassloader_externalStatsFileIsReadFromTokenFile_predefinedContext() throws MalformedURLException, IOException {
VaadinContext context = Mockito.mock(VaadinContext.class);
VaadinConfig config = Mockito.mock(VaadinConfig.class);
ResourceProvider resourceProvider = mockResourceProvider(config, context);
String content = "{ 'externalStatsFile':true }";
mockClassPathTokenFile(resourceProvider, content);
DefaultApplicationConfigurationFactory factory = new DefaultApplicationConfigurationFactory();
ApplicationConfiguration configuration = factory.create(context);
List<String> propertyNames = Collections.list(configuration.getPropertyNames());
Assert.assertTrue(propertyNames.contains(Constants.EXTERNAL_STATS_FILE));
Assert.assertTrue(configuration.getBooleanProperty(Constants.EXTERNAL_STATS_FILE, false));
Assert.assertFalse(configuration.isProductionMode());
Assert.assertFalse(configuration.enableDevServer());
}
Aggregations