for (UIProvider p : uiProviders) {
// Check for existing LegacyWindow
if (p instanceof LegacyApplicationUIProvider) {
LegacyApplicationUIProvider legacyProvider = (LegacyApplicationUIProvider) p;
UI existingUi = legacyProvider
.getExistingUI(classSelectionEvent);
if (existingUi != null) {
reinitUI(existingUi, request);
return existingUi;
}
}
uiClass = p.getUIClass(classSelectionEvent);
if (uiClass != null) {
provider = p;
break;
}
}
if (provider == null || uiClass == null) {
return null;
}
// Check for an existing UI based on window.name
// Special parameter sent by vaadinBootstrap.js
String windowName = request.getParameter("v-wn");
Map<String, Integer> retainOnRefreshUIs = session
.getPreserveOnRefreshUIs();
if (windowName != null && !retainOnRefreshUIs.isEmpty()) {
// Check for a known UI
Integer retainedUIId = retainOnRefreshUIs.get(windowName);
if (retainedUIId != null) {
UI retainedUI = session.getUIById(retainedUIId.intValue());
if (uiClass.isInstance(retainedUI)) {
reinitUI(retainedUI, request);
return retainedUI;
} else {
getLogger().log(
Level.INFO,
"Not using retained UI in {0} because retained UI was of type {1}"
+ " but {2} is expected for the request.",
new Object[] { windowName, retainedUI.getClass(),
uiClass });
}
}
}
// No existing UI found - go on by creating and initializing one
Integer uiId = Integer.valueOf(session.getNextUIid());
// Explicit Class.cast to detect if the UIProvider does something
// unexpected
UICreateEvent event = new UICreateEvent(request, uiClass, uiId);
UI ui = uiClass.cast(provider.createInstance(event));
// Initialize some fields for a newly created UI
if (ui.getSession() != session) {
// Session already set for LegacyWindow
ui.setSession(session);
}
// Set thread local here so it is available in init
UI.setCurrent(ui);
ui.doInit(request, uiId.intValue());
session.addUI(ui);
// Remember if it should be remembered
if (vaadinService.preserveUIOnRefresh(provider, event)) {