/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.sling.installer.api; import org.osgi.annotation.versioning.ProviderType; /** * Service for installing/updating/removing installable resources * {@link InstallableResource} in an OSGi framework. * * The resources are provided by provider components which are * clients of this API. For example a file directory provider might * scan a directory in the file system and provide the artifacts * contained in the configured directory. * * When such a client starts it should first call * {@link #registerResources(String, InstallableResource[])} and * inform this service about all available resources. In the case * of a file directory provider, this list would contain all * files found in the directory (and sub directories). This is * the rendezvous point. The OSGi installer service compares this * complete list with previous lists it might have and triggers * corresponding tasks like installing new artifacts and * uninstalling removed artifacts. * * Once this rendezvous has been done between a client and the * OSGi installe, the client calls * {@link #updateResources(String, InstallableResource[], String[])} * to inform about changes like new resources or removed resources. * * A single provider should never call these methods in parallel, * before calling any method a previous call must have finished! * * The OSGi installer detects the resources and based on their type * and metadata, the installer decides whether to install them, * update an already installed artifact or simply ignore them. * For example, for bundles the symbolic name and the version is used. */ @ProviderType public interface OsgiInstaller { /** * Provide the installer with the complete list of installable * resources for a given client. * * Client must call this at startup and/or when the installer * service becomes available. The installer stores the list of * previously registered/added resources, compares with the new * list and removes resources that have disappeared. * * Invalid resources are ignored. * * @param urlScheme identifies the client. * @param resources the list of available resources */ void registerResources(String urlScheme, InstallableResource[] resources); /** * Inform the installer that resources are available for installation * and/or other resources are no longer available. * This method is called if * - installed resources have been modified * - new resources are available * - installed resources should be uninstalled * Invalid resources are ignored. * @param urlScheme identifies the client. * @param resources An array of updated/new resources - might be null * @param ids An array of identifiers for removed resources - might be null */ void updateResources(String urlScheme, InstallableResource[] resources, String[] ids); }