| /* |
| * Copyright (c) OSGi Alliance (2000, 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. |
| */ |
| |
| package org.osgi.framework; |
| |
| import java.util.EventObject; |
| |
| /** |
| * An event from the Framework describing a bundle lifecycle change. |
| * <p> |
| * {@code BundleEvent} objects are delivered to |
| * {@code SynchronousBundleListener}s and {@code BundleListener}s when a change |
| * occurs in a bundle's lifecycle. A type code is used to identify the event |
| * type for future extendability. |
| * |
| * <p> |
| * OSGi Alliance reserves the right to extend the set of types. |
| * |
| * @Immutable |
| * @see BundleListener |
| * @see SynchronousBundleListener |
| * @author $Id: cd49848213816c4f76541b70be12ac3af7900972 $ |
| */ |
| |
| public class BundleEvent extends EventObject { |
| static final long serialVersionUID = 4080640865971756012L; |
| /** |
| * Bundle that had a change occur in its lifecycle. |
| */ |
| private final Bundle bundle; |
| |
| /** |
| * Type of bundle lifecycle change. |
| */ |
| private final int type; |
| |
| /** |
| * The bundle has been installed. |
| * |
| * @see BundleContext#installBundle(String) |
| */ |
| public final static int INSTALLED = 0x00000001; |
| |
| /** |
| * The bundle has been started. |
| * <p> |
| * The bundle's {@link BundleActivator#start(BundleContext) BundleActivator |
| * start} method has been executed if the bundle has a bundle activator |
| * class. |
| * |
| * @see Bundle#start() |
| */ |
| public final static int STARTED = 0x00000002; |
| |
| /** |
| * The bundle has been stopped. |
| * <p> |
| * The bundle's {@link BundleActivator#stop(BundleContext) BundleActivator |
| * stop} method has been executed if the bundle has a bundle activator |
| * class. |
| * |
| * @see Bundle#stop() |
| */ |
| public final static int STOPPED = 0x00000004; |
| |
| /** |
| * The bundle has been updated. |
| * |
| * @see Bundle#update() |
| */ |
| public final static int UPDATED = 0x00000008; |
| |
| /** |
| * The bundle has been uninstalled. |
| * |
| * @see Bundle#uninstall() |
| */ |
| public final static int UNINSTALLED = 0x00000010; |
| |
| /** |
| * The bundle has been resolved. |
| * |
| * @see Bundle#RESOLVED |
| * @since 1.3 |
| */ |
| public final static int RESOLVED = 0x00000020; |
| |
| /** |
| * The bundle has been unresolved. |
| * |
| * @see Bundle#INSTALLED |
| * @since 1.3 |
| */ |
| public final static int UNRESOLVED = 0x00000040; |
| |
| /** |
| * The bundle is about to be activated. |
| * <p> |
| * The bundle's {@link BundleActivator#start(BundleContext) BundleActivator |
| * start} method is about to be called if the bundle has a bundle activator |
| * class. This event is only delivered to {@link SynchronousBundleListener} |
| * s. It is not delivered to {@code BundleListener}s. |
| * |
| * @see Bundle#start() |
| * @since 1.3 |
| */ |
| public final static int STARTING = 0x00000080; |
| |
| /** |
| * The bundle is about to deactivated. |
| * <p> |
| * The bundle's {@link BundleActivator#stop(BundleContext) BundleActivator |
| * stop} method is about to be called if the bundle has a bundle activator |
| * class. This event is only delivered to {@link SynchronousBundleListener} |
| * s. It is not delivered to {@code BundleListener}s. |
| * |
| * @see Bundle#stop() |
| * @since 1.3 |
| */ |
| public final static int STOPPING = 0x00000100; |
| |
| /** |
| * The bundle will be lazily activated. |
| * <p> |
| * The bundle has a {@link Constants#ACTIVATION_LAZY lazy activation policy} |
| * and is waiting to be activated. It is now in the {@link Bundle#STARTING |
| * STARTING} state and has a valid {@code BundleContext}. This event is only |
| * delivered to {@link SynchronousBundleListener}s. It is not delivered to |
| * {@code BundleListener}s. |
| * |
| * @since 1.4 |
| */ |
| public final static int LAZY_ACTIVATION = 0x00000200; |
| |
| /** |
| * Bundle that was the origin of the event. For install event type, this is |
| * the bundle whose context was used to install the bundle. Otherwise it is |
| * the bundle itself. |
| * |
| * @since 1.6 |
| */ |
| private final Bundle origin; |
| |
| /** |
| * Creates a bundle event of the specified type. |
| * |
| * @param type The event type. |
| * @param bundle The bundle which had a lifecycle change. |
| * @param origin The bundle which is the origin of the event. For the event |
| * type {@link #INSTALLED}, this is the bundle whose context was used |
| * to install the bundle. Otherwise it is the bundle itself. |
| * @since 1.6 |
| */ |
| public BundleEvent(int type, Bundle bundle, Bundle origin) { |
| super(bundle); |
| if (origin == null) { |
| throw new IllegalArgumentException("null origin"); |
| } |
| this.bundle = bundle; |
| this.type = type; |
| this.origin = origin; |
| } |
| |
| /** |
| * Creates a bundle event of the specified type. |
| * |
| * @param type The event type. |
| * @param bundle The bundle which had a lifecycle change. This bundle is |
| * used as the origin of the event. |
| */ |
| public BundleEvent(int type, Bundle bundle) { |
| super(bundle); |
| this.bundle = bundle; |
| this.type = type; |
| this.origin = bundle; |
| } |
| |
| /** |
| * Returns the bundle which had a lifecycle change. This bundle is the |
| * source of the event. |
| * |
| * @return The bundle that had a change occur in its lifecycle. |
| */ |
| public Bundle getBundle() { |
| return bundle; |
| } |
| |
| /** |
| * Returns the type of lifecyle event. The type values are: |
| * <ul> |
| * <li>{@link #INSTALLED}</li> |
| * <li>{@link #RESOLVED}</li> |
| * <li>{@link #LAZY_ACTIVATION}</li> |
| * <li>{@link #STARTING}</li> |
| * <li>{@link #STARTED}</li> |
| * <li>{@link #STOPPING}</li> |
| * <li>{@link #STOPPED}</li> |
| * <li>{@link #UPDATED}</li> |
| * <li>{@link #UNRESOLVED}</li> |
| * <li>{@link #UNINSTALLED}</li> |
| * </ul> |
| * |
| * @return The type of lifecycle event. |
| */ |
| public int getType() { |
| return type; |
| } |
| |
| /** |
| * Returns the bundle that was the origin of the event. |
| * |
| * <p> |
| * For the event type {@link #INSTALLED}, this is the bundle whose context |
| * was used to install the bundle. Otherwise it is the bundle itself. |
| * |
| * @return The bundle that was the origin of the event. |
| * @since 1.6 |
| */ |
| public Bundle getOrigin() { |
| return origin; |
| } |
| } |