blob: 7a599f3092705916725ecb9e2d9be2209bdb35bd [file] [log] [blame]
/*
* 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.
*/
#ifndef CELIX_BUNDLE_CACHE_H_
#define CELIX_BUNDLE_CACHE_H_
#include "celix_types.h"
#include "celix_errno.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* Type definition for the celix_bundle_cache_t* abstract data type.
*/
typedef struct celix_bundle_cache celix_bundle_cache_t;
/**
* @brief Creates the bundle cache using the supplied configuration map.
*
* @param fw The Celix framework to create bundle cache for.
* Its UUID can be used in cache directory naming if a tmp dir used.
* Its configuration is checked for cache behaviour configuration:
* - CELIX_FRAMEWORK_FRAMEWORK_STORAGE
* - CELIX_FRAMEWORK_CACHE_USE_TMP_DIR
* @param out The bundle cache output param. Cannot be NULL.
* @return CELIX_SUCCESS if bundle cache is successfully created.
*/
celix_status_t
celix_bundleCache_create(celix_framework_t* fw, celix_bundle_cache_t** out);
/**
* @brief Destroy the bundle cache, releasing all resources allocated in celix_bundleCache_create
*
* @param cache The bundle cache to destroy.
* @return Status code indication failure or success:
* - CELIX_SUCCESS when no errors are encountered.
*/
celix_status_t celix_bundleCache_destroy(celix_bundle_cache_t* cache);
/**
* @brief Creates a new archive for the given bundle (using the id and location).
*
* @param cache The bundle cache to create an archive in.
* @param id The id of the bundle
* @param location The location identifier of the bundle
* @param archive The archive to create
*
* @return Status code indication failure or success:
* - CELIX_SUCCESS when no errors are encountered.
* - CELIX_ILLEGAL_ARGUMENT If <code>bundle_archive</code> not is null.
* - CELIX_ENOMEM If allocating memory for <code>bundle_archive</code> failed.
*/
celix_status_t
celix_bundleCache_createArchive(celix_bundle_cache_t* cache, long id, const char* location, celix_bundle_archive_t** archive);
/**
* @@brief Creates a new system archive for framework bundle.
* @param[in] fw The Celix framework to create an archive in
* @param[out] archive The archive to create
* @return Status code indication failure or success:
* - CELIX_SUCCESS when no errors are encountered.
* - CELIX_ILLEGAL_ARGUMENT If <code>bundle_archive</code> not is null.
* - CELIX_ENOMEM If allocating memory for <code>bundle_archive</code> failed.
* - CELIX_FILE_IO_EXCEPTION If the cache cannot be opened or read.
* - CELIX_BUNDLE_EXCEPTION If the bundle cannot be created.
*/
celix_status_t celix_bundleCache_createSystemArchive(celix_framework_t* fw, celix_bundle_archive_t** archive);
/**
* @brief Destroy the archive from the cache.
* It releases all resources allocated in celix_bundleCache_createArchive and deletes invalid directories if any.
* @param [in] cache The bundle cache to destroy archive from.
* @param [in] archive The archive to destroy.
*/
void celix_bundleCache_destroyArchive(celix_bundle_cache_t* cache, celix_bundle_archive_t* archive);
/**
* @brief Deletes the entire bundle cache.
*
* @param cache the cache to delete
* @return Status code indication failure or success:
* - CELIX_SUCCESS when no errors are encountered.
* - CELIX_ILLEGAL_ARGUMENT If the cache is invalid
* - CELIX_FILE_IO_EXCEPTION If the cache cannot be opened or read.
*/
celix_status_t celix_bundleCache_deleteCacheDir(celix_bundle_cache_t* cache);
/**
* @brief Find if the there is already a bundle cache for the provided bundle zip location and if this is true
* return the bundle id for the bundle cache entry.
*
* @param[in] cache The cache.
* @param[in] location The location of the bundle zip to find the id for.
* @param[out] outBndId The bundle id for the bundle cache entry.
* @return CELIX_SUCCESS if the bundle id is found and CELIX_FILE_IO_EXCEPTION if the cache cannot be opened or read.
*/
celix_status_t
celix_bundleCache_findBundleIdForLocation(celix_bundle_cache_t* cache, const char* location, long* outBndId);
/**
* @brief Find if the there is already a bundle cache for the provided bundle id.
* @param cache The bundle cache.
* @param bndId The bundle id to find the bundle cache for.
* @return Whether the bundle id is already used in a bundle cache entry.
*/
bool celix_bundleCache_isBundleIdAlreadyUsed(celix_bundle_cache_t* cache, long bndId);
/**
* Clean existing cache dir and create the bundle archives cache for all the bundles configured for starting and
* installed.
*
* For bundle ids, the first bundle will have CELIX_FRAMEWORK_BUNDLE_ID+1 and the next CELIX_FRAMEWORK_BUNDLE_ID+2 etc.
*
* CELIX_AUTO_START_0, CELIX_AUTO_START_1, CELIX_AUTO_START_2, CELIX_AUTO_START_3, CELIX_AUTO_START_4,
* CELIX_AUTO_START_5, CELIX_AUTO_START_6 and lastly CELIX_AUTO_INSTALL.
*
* @param[in] fw The framework to create the archives for.
* @param[in] printProgress Whether report progress of bundle archive creation.
* @return Status code indication failure or success.
*/
celix_status_t celix_bundleCache_createBundleArchivesCache(celix_framework_t* fw, bool printProgress);
#ifdef __cplusplus
}
#endif
#endif /* CELIX_BUNDLE_CACHE_H_ */