Package org.eclipse.orion.server.tests

Source Code of org.eclipse.orion.server.tests.ServerTestsActivator

/*******************************************************************************
* Copyright (c) 2010, 2014 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.orion.server.tests;

import org.eclipse.orion.internal.server.servlets.Activator;
import org.eclipse.orion.server.jetty.WebApplication;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.ServiceReference;
import org.osgi.service.http.HttpService;
import org.osgi.service.packageadmin.PackageAdmin;
import org.osgi.util.tracker.ServiceTracker;

@SuppressWarnings("deprecation")
// PackageAdmin is deprecated but is not being removed during Luna
public class ServerTestsActivator implements BundleActivator {
  private static final String EQUINOX_HTTP_JETTY = "org.eclipse.equinox.http.jetty"; //$NON-NLS-1$
  private static final String EQUINOX_HTTP_REGISTRY = "org.eclipse.equinox.http.registry"; //$NON-NLS-1$
  public static final String PI_TESTS = "org.eclipse.orion.server.tests";

  public static BundleContext bundleContext;
  private static ServiceTracker<HttpService, HttpService> httpServiceTracker;
  private static ServiceTracker<PackageAdmin, PackageAdmin> packageAdminTracker;

  private static boolean initialized = false;
  private static String serverHost = null;
  private static int serverPort = 0;
  private static WebApplication webapp;

  public static BundleContext getContext() {
    return bundleContext;
  }

  public static String getServerLocation() {
    if (!initialized) {
      try {
        //make sure the http registry is started
        ensureBundleStarted(EQUINOX_HTTP_JETTY);
        ensureBundleStarted(EQUINOX_HTTP_REGISTRY);
        //get the webide bundle started via lazy activation.
        org.eclipse.orion.server.authentication.Activator.getDefault();
        Activator.getDefault();
        webapp = new WebApplication();
        webapp.start(null);
        initialize();
      } catch (Exception e) {
        e.printStackTrace();
        return null;
      }
    }
    return "http://" + serverHost + ':' + String.valueOf(serverPort) + "/";// + "cc/";
  }

  private static void initialize() throws Exception {
    ServiceReference<HttpService> reference = httpServiceTracker.getServiceReference();
    String port = (String) reference.getProperty("http.port"); //$NON-NLS-1$
    serverHost = "localhost"; //$NON-NLS-1$
    serverPort = Integer.parseInt(port);
    initialized = true;
  }

  public void start(BundleContext context) throws Exception {
    bundleContext = context;
    httpServiceTracker = new ServiceTracker<HttpService, HttpService>(context, HttpService.class, null);
    httpServiceTracker.open();

    packageAdminTracker = new ServiceTracker<PackageAdmin, PackageAdmin>(context, PackageAdmin.class.getName(), null);
    packageAdminTracker.open();
  }

  public void stop(BundleContext context) throws Exception {
    if (webapp != null)
      webapp.stop();

    if (httpServiceTracker != null)
      httpServiceTracker.close();
    if (packageAdminTracker != null)
      packageAdminTracker.close();

    httpServiceTracker = null;
    packageAdminTracker = null;
    bundleContext = null;
  }

  static private Bundle getBundle(String symbolicName) {
    PackageAdmin packageAdmin = packageAdminTracker.getService();
    if (packageAdmin == null)
      return null;
    Bundle[] bundles = packageAdmin.getBundles(symbolicName, null);
    if (bundles == null)
      return null;
    // Return the first bundle that is not installed or uninstalled
    for (int i = 0; i < bundles.length; i++) {
      if ((bundles[i].getState() & (Bundle.INSTALLED | Bundle.UNINSTALLED)) == 0) {
        return bundles[i];
      }
    }
    return null;
  }

  static private void ensureBundleStarted(String name) throws BundleException {
    Bundle bundle = getBundle(name);
    if (bundle != null) {
      if (bundle.getState() == Bundle.RESOLVED || bundle.getState() == Bundle.STARTING) {
        bundle.start(Bundle.START_TRANSIENT);
      }
    }
  }
}
TOP

Related Classes of org.eclipse.orion.server.tests.ServerTestsActivator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.