Package org.eclipse.osgi.framework.internal.core

Source Code of org.eclipse.osgi.framework.internal.core.SystemBundleActivator

/*******************************************************************************
* Copyright (c) 2003, 2009 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.osgi.framework.internal.core;

import java.util.Dictionary;
import java.util.Hashtable;
import org.eclipse.osgi.framework.debug.FrameworkDebugOptions;
import org.osgi.framework.*;
import org.osgi.service.condpermadmin.ConditionalPermissionAdmin;

/**
* This class activates the System Bundle.
*/

public class SystemBundleActivator implements BundleActivator {
  private BundleContext context;
  private InternalSystemBundle bundle;
  private Framework framework;
  private ServiceRegistration packageAdmin;
  private ServiceRegistration securityAdmin;
  private ServiceRegistration startLevel;
  private ServiceRegistration debugOptions;
  private ServiceRegistration contextFinder;

  public SystemBundleActivator() {
  }

  public void start(BundleContext context) throws Exception {
    this.context = context;
    bundle = (InternalSystemBundle) context.getBundle();
    framework = bundle.framework;

    if (framework.packageAdmin != null)
      packageAdmin = register(new String[] {Constants.OSGI_PACKAGEADMIN_NAME}, framework.packageAdmin, null);
    if (framework.securityAdmin != null)
      securityAdmin = register(new String[] {Constants.OSGI_PERMISSIONADMIN_NAME, ConditionalPermissionAdmin.class.getName()}, framework.securityAdmin, null);
    if (framework.startLevelManager != null)
      startLevel = register(new String[] {Constants.OSGI_STARTLEVEL_NAME}, framework.startLevelManager, null);
    FrameworkDebugOptions dbgOptions = null;
    if ((dbgOptions = FrameworkDebugOptions.getDefault()) != null) {
      dbgOptions.start(context);
      debugOptions = register(new String[] {org.eclipse.osgi.service.debug.DebugOptions.class.getName()}, dbgOptions, null);
    }
    ClassLoader tccl = framework.getContextFinder();
    if (tccl != null) {
      Hashtable props = new Hashtable(7);
      props.put("equinox.classloader.type", "contextClassLoader"); //$NON-NLS-1$ //$NON-NLS-2$
      contextFinder = register(new String[] {ClassLoader.class.getName()}, tccl, props);
    }

    // Always call the adaptor.frameworkStart() at the end of this method.
    framework.adaptor.frameworkStart(context);
    // attempt to resolve all bundles
    // this is done after the adaptor.frameworkStart has been called
    // this should be the first time the resolver State is accessed
    framework.packageAdmin.setResolvedBundles(bundle);
    // reinitialize the system bundles localization to take into account system bundle fragments
    framework.systemBundle.manifestLocalization = null;
  }

  public void stop(BundleContext context) throws Exception {
    // Always call the adaptor.frameworkStop() at the begining of this method.
    framework.adaptor.frameworkStop(context);

    if (packageAdmin != null)
      packageAdmin.unregister();
    if (securityAdmin != null)
      securityAdmin.unregister();
    if (startLevel != null)
      startLevel.unregister();
    if (debugOptions != null) {
      FrameworkDebugOptions dbgOptions = FrameworkDebugOptions.getDefault();
      if (dbgOptions != null)
        dbgOptions.stop(context);
      debugOptions.unregister();
    }
    if (contextFinder != null)
      contextFinder.unregister();

    framework = null;
    bundle = null;
    this.context = null;
  }

  /**
   * Register a service object.
   *
   */
  private ServiceRegistration register(String[] names, Object service, Hashtable properties) {
    if (properties == null)
      properties = new Hashtable(7);
    Dictionary headers = bundle.getHeaders();
    properties.put(Constants.SERVICE_VENDOR, headers.get(Constants.BUNDLE_VENDOR));
    properties.put(Constants.SERVICE_RANKING, new Integer(Integer.MAX_VALUE));
    properties.put(Constants.SERVICE_PID, bundle.getBundleId() + "." + service.getClass().getName()); //$NON-NLS-1$
    return context.registerService(names, service, properties);
  }

}
TOP

Related Classes of org.eclipse.osgi.framework.internal.core.SystemBundleActivator

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.