/*
 * Copyright (c) OSGi Alliance (2010, 2013). All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * Framework Start Level Package Version 1.0.
 * 
 * <p>
 * The Framework Start Level package allows management agents to manage a start
 * level assigned to each bundle and the active start level of the Framework.
 * This package is a replacement for the now deprecated
 * {@code org.osgi.service.startlevel} package.
 * 
 * <p>
 * A start level is defined to be a state of execution in which the Framework
 * exists. Start level values are defined as unsigned integers with 0 (zero)
 * being the state where the Framework is not launched. Progressively higher
 * integral values represent progressively higher start levels. For example, 2
 * is a higher start level than 1.
 * 
 * <p>
 * {@code AdminPermission} is required to modify start level information.
 * 
 * <p>
 * Start Level support in the Framework includes the ability to modify the
 * active start level of the Framework and to assign a specific start level to a
 * bundle. The beginning start level of a Framework is specified via the
 * {@link org.osgi.framework.Constants#FRAMEWORK_BEGINNING_STARTLEVEL} framework
 * property when configuring a framework.
 * 
 * <p>
 * When the Framework is first started it must be at start level zero. In this
 * state, no bundles are running. This is the initial state of the Framework
 * before it is launched. When the Framework is launched, the Framework will
 * enter start level one and all bundles which are assigned to start level one
 * and whose autostart setting indicates the bundle should be started are
 * started as described in the {@link org.osgi.framework.Bundle#start(int)}
 * method. The Framework will continue to increase the start level, starting
 * bundles at each start level, until the Framework has reached a beginning
 * start level. At this point the Framework has completed starting bundles and
 * will then fire a Framework event of type
 * {@link org.osgi.framework.FrameworkEvent#STARTED} to announce it has
 * completed its launch.
 * 
 * <p>
 * Within a start level, bundles may be started in an order defined by the
 * Framework implementation. This may be something like ascending
 * {@link org.osgi.framework.Bundle#getBundleId()} order or an order based upon
 * dependencies between bundles. A similar but reversed order may be used when
 * stopping bundles within a start level.
 * 
 * <p>
 * The Framework Start Level package can be used by management bundles to alter
 * the active start level of the framework.
 * 
 * <p>
 * Bundles wishing to use this package must list the package in the
 * Import-Package header of the bundle's manifest. For example:
 * 
 * <pre>
 * Import-Package: org.osgi.framework.startlevel; version=&quot;[1.0,2.0)&quot;
 * </pre>
 * 
 * @author $Id: 27d775bbe53df5e1dd5d7fe6f5e1c95b294c2301 $
 */

@Version("1.0")
package org.osgi.framework.startlevel;

import org.osgi.annotation.versioning.Version;

