/*******************************************************************************
 * Copyright (c) 2011, 2012 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.cluster.testfixture;

import java.lang.reflect.Field;

import javax.servlet.http.HttpSession;

import org.eclipse.rap.rwt.cluster.testfixture.server.IServletEngine;
import org.eclipse.rap.rwt.internal.lifecycle.LifeCycleUtil;
import org.eclipse.rap.rwt.internal.lifecycle.UITestUtil;
import org.eclipse.rap.rwt.internal.service.UISessionImpl;
import org.eclipse.rap.rwt.service.UISession;
import org.eclipse.swt.widgets.Display;


@SuppressWarnings("restriction")
public class ClusterTestHelper {

  public static void enableUITests( boolean enable ) {
    try {
      Field field = UITestUtil.class.getDeclaredField( "enabled" );
      field.setAccessible( true );
      field.set( null, Boolean.valueOf( enable ) );
    } catch( Exception e ) {
      throw new RuntimeException( "Failed to change enablement of UI Tests", e );
    }
  }

  public static HttpSession getFirstHttpSession( IServletEngine servletEngine ) {
    return servletEngine.getSessions()[ 0 ];
  }

  public static UISession getFirstUISession( IServletEngine servletEngine ) {
    return getUISession( getFirstHttpSession( servletEngine ) );
  }

  public static UISession getUISession( HttpSession httpSession ) {
    return UISessionImpl.getInstanceFromSession( httpSession );
  }

  public static Display getSessionDisplay( HttpSession httpSession ) {
    return LifeCycleUtil.getSessionDisplay( getUISession( httpSession ) );
  }

  private ClusterTestHelper() {
    // prevent instantiation
  }
}
