/******************************************************************************* * Copyright (c) 2012, 2015 EclipseSource and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * EclipseSource - initial API and implementation ******************************************************************************/ package org.eclipse.rap.rwt.internal.service; import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.CONNECTION_ID; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.eclipse.rap.rwt.internal.SingletonManager; import org.eclipse.rap.rwt.internal.application.ApplicationContextImpl; import org.eclipse.rap.rwt.internal.client.ClientMessages; import org.eclipse.rap.rwt.internal.textsize.MeasurementUtil; import org.eclipse.rap.rwt.internal.theme.ThemeUtil; public class UISessionBuilder { private final ServiceContext serviceContext; private final UISessionImpl uiSession; public UISessionBuilder( ServiceContext serviceContext ) { this.serviceContext = serviceContext; ApplicationContextImpl applicationContext = serviceContext.getApplicationContext(); HttpServletRequest request = serviceContext.getRequest(); HttpSession httpSession = request.getSession( true ); uiSession = new UISessionImpl( applicationContext, httpSession, generateConnectionId() ); } public UISessionImpl buildUISession() { uiSession.attachToHttpSession(); serviceContext.setUISession( uiSession ); SingletonManager.install( uiSession ); MeasurementUtil.installMeasurementOperator( uiSession ); setCurrentTheme(); selectClient(); updateClientMessages(); renderConnectionId(); return uiSession; } private void setCurrentTheme() { String servletPath = serviceContext.getRequest().getServletPath(); ThemeUtil.setCurrentThemeId( uiSession, ThemeUtil.getThemeIdFor( servletPath ) ); } private void selectClient() { ApplicationContextImpl applicationContext = uiSession.getApplicationContext(); applicationContext.getClientSelector().selectClient( serviceContext.getRequest(), uiSession ); } private void updateClientMessages() { ClientMessages clientMessages = uiSession.getClient().getService( ClientMessages.class ); if( clientMessages != null ) { clientMessages.update( uiSession.getLocale() ); } } private void renderConnectionId() { String connectionId = uiSession.getConnectionId(); serviceContext.getProtocolWriter().appendHead( CONNECTION_ID, connectionId ); } private static String generateConnectionId() { return UUID.randomUUID().toString().substring( 0, 8 ); } }