| /* |
| * Copyright (c) OSGi Alliance (2011, 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.hooks.bundle; |
| |
| import java.util.Collection; |
| import org.osgi.annotation.versioning.ConsumerType; |
| import org.osgi.framework.Bundle; |
| import org.osgi.framework.BundleContext; |
| import org.osgi.framework.Constants; |
| |
| /** |
| * OSGi Framework Bundle Collision Hook Service. |
| * |
| * <p> |
| * If the framework was launched with the {@link Constants#FRAMEWORK_BSNVERSION |
| * org.osgi.framework.bsnversion} framework launching property set to |
| * {@link Constants#FRAMEWORK_BSNVERSION_MANAGED managed}, then all registered |
| * collision hook services will be called during framework bundle install and |
| * update operations to determine if an install or update operation will result |
| * in a bundle symbolic name and version collision. |
| * |
| * @ThreadSafe |
| * @author $Id: b05e0c3819aff6df35c2ec034242596d04f53408 $ |
| */ |
| @ConsumerType |
| public interface CollisionHook { |
| |
| /** |
| * Specifies a bundle install operation is being performed. |
| */ |
| int INSTALLING = 1; |
| |
| /** |
| * Specifies a bundle update operation is being performed. |
| */ |
| int UPDATING = 2; |
| |
| /** |
| * Filter bundle collisions hook method. This method is called during the |
| * install or update operation. The operation type will be |
| * {@link #INSTALLING installing} or {@link #UPDATING updating}. Depending |
| * on the operation type the target bundle and the collision candidate |
| * collection are the following: |
| * <ul> |
| * <li>{@link #INSTALLING installing} - The target is the bundle associated |
| * with the {@link BundleContext} used to call one of the |
| * {@link BundleContext#installBundle(String) install} methods. The |
| * collision candidate collection contains the existing bundles installed |
| * which have the same symbolic name and version as the bundle being |
| * installed.</li> |
| * <li>{@link #UPDATING updating} - The target is the bundle used to call |
| * one of the {@link Bundle#update() update} methods. The collision |
| * candidate collection contains the existing bundles installed which have |
| * the same symbolic name and version as the content the target bundle is |
| * being updated to.</li> |
| * </ul> |
| * This method can filter the collection of collision candidates by removing |
| * potential collisions. For the specified operation to succeed, the |
| * collection of collision candidates must be empty after all registered |
| * collision hook services have been called. |
| * |
| * @param operationType The operation type. Must be the value of |
| * {@link #INSTALLING installing} or {@link #UPDATING updating}. |
| * @param target The target bundle used to determine what collision |
| * candidates to filter. |
| * @param collisionCandidates The collection of collision candidates. The |
| * collection supports all the optional {@code Collection} operations |
| * except {@code add} and {@code addAll}. Attempting to add to the |
| * collection will result in an {@code UnsupportedOperationException} |
| * . The collection is not synchronized. |
| */ |
| void filterCollisions(int operationType, Bundle target, Collection<Bundle> collisionCandidates); |
| } |