libs/framework/src/celix_bundle_manifest.h (38 lines of code) (raw):

/* * 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_MANIFEST_H_ #define CELIX_MANIFEST_H_ #include "celix_array_list.h" #include "celix_cleanup.h" #include "celix_errno.h" #include "celix_properties_type.h" #include "celix_version_type.h" #include "celix_array_list_type.h" #include "celix_bundle_manifest_type.h" #ifdef __cplusplus extern "C" { #endif // Mandatory manifest attributes #define CELIX_BUNDLE_MANIFEST_VERSION "CELIX_BUNDLE_MANIFEST_VERSION" #define CELIX_BUNDLE_SYMBOLIC_NAME "CELIX_BUNDLE_SYMBOLIC_NAME" #define CELIX_BUNDLE_VERSION "CELIX_BUNDLE_VERSION" #define CELIX_BUNDLE_NAME "CELIX_BUNDLE_NAME" // Optional manifest attributes #define CELIX_BUNDLE_ACTIVATOR_LIBRARY "CELIX_BUNDLE_ACTIVATOR_LIBRARY" #define CELIX_BUNDLE_PRIVATE_LIBRARIES "CELIX_BUNDLE_PRIVATE_LIBRARIES" #define CELIX_BUNDLE_DESCRIPTION "CELIX_BUNDLE_DESCRIPTION" #define CELIX_BUNDLE_GROUP "CELIX_BUNDLE_GROUP" /** * @file celix_bundle_manifest.h * @brief Header file for celix_bundle_manifest_t. * * * The bundle manifest consists of a set of attributes, including a set of mandatory attributes. * A bundle manifest is used to describe the contents of a bundle. * * A bundle manifest must contain the following attributes: * - CELIX_BUNDLE_MANIFEST_VERSION, type celix_version_t, the version of the manifest. * - CELIX_BUNDLE_SYMBOLIC_NAME, type string, the symbolic name of the bundle. * - CELIX_BUNDLE_VERSION, type celix_version_t, the version of the bundle. * - CELIX_BUNDLE_NAME, type string, the name of the bundle. * * The bundle manifest may contain the following attributes: * - CELIX_BUNDLE_ACTIVATOR_LIBRARY, type string, the activator library of the bundle. * - CELIX_BUNDLE_PRIVATE_LIBRARIES, type string array, the private libraries of the bundle. * - CELIX_BUNDLE_GROUP, type string, the group of the bundle. Helps in grouping sets of bundles. * * And a manifest may contain any other attributes of any type, this can be retrieved using * celix_bundleManifest_getAttributes. * * A bundle symbolic name can only contain the following characters: [a-zA-Z0-9_-:] */ /** * Create a new manifest using the provided properties. * * If an error occurs, an error message is logged on celix_err and in case of an CELIX_ILLEGAL_ARGUMENT error, there * can be multiple error messages. * * @param[in] properties The properties to use for the manifest. Takes ownership of the properties. * @param[out] manifest The created manifest. * @return CELIX_SUCCESS if no errors occurred, ENOMEM if memory allocation failed and CELIX_INVALID_SYNTAX if the * provided attributes is incorrect. In case of an error, the provided attributes are destroyed. */ celix_status_t celix_bundleManifest_create(celix_properties_t* attributes, celix_bundle_manifest_t** manifest); /** * Create a new manifest by reading the manifest from the provided file. * * If an error occurs, an error message is logged on celix_err. * * @param[in] filename The file to read the manifest from. * @param[out] manifest The created manifest. * @return CELIX_SUCCESS if no errors occurred, ENOMEM if memory allocation failed, CELIX_FILE_IO_EXCEPTION if the file * could not be read and CELIX_INVALID_SYNTAX if the manifest file is invalid. */ celix_status_t celix_bundleManifest_createFromFile(const char* filename, celix_bundle_manifest_t** manifest); /** * @brief Create a new framework manifest. * * The framework manifest is a special manifest that contains the following manifest attributes: * - CELIX_BUNDLE_SYMBOLIC_NAME="celix.framework" * - CELIX_BUNDLE_NAME="Celix Framework" * - CELIX_BUNDLE_VERSION=CELIX_FRAMEWORK_VERSION * - CELIX_BUNDLE_MANIFEST_VERSION="2.0.0" * - CELIX_BUNDLE_GROUP="Celix" * - CELIX_BUNDLE_DESCRIPTION="Celix Framework" * * @param manifest The created framework manifest. * @return CELIX_SUCCESS if no errors occurred, ENOMEM if memory allocation failed. If an error occurs, an error message * is logged on celix_err. */ celix_status_t celix_bundleManifest_createFrameworkManifest(celix_bundle_manifest_t** manifest); /** * @brief Destroy the provided manifest. */ void celix_bundleManifest_destroy(celix_bundle_manifest_t* manifest); /** * Define the cleanup function for a celix_bundleManifest_t, so that it can be used with celix_autoptr. */ CELIX_DEFINE_AUTOPTR_CLEANUP_FUNC(celix_bundle_manifest_t, celix_bundleManifest_destroy) /** * @brief Get the manifest attributes. * The manifest attributes are valid as long as the manifest is valid. * * @param[in] manifest The bundle manifest to get the manifest version from. Cannot be NULL. * @return The manifest attributes. Will never be NULL. */ const celix_properties_t* celix_bundleManifest_getAttributes(const celix_bundle_manifest_t* manifest); /** * @brief Get the manifest version. Returned value is valid as long as the manifest is valid. * * @param[in] manifest The bundle manifest to get the bundle name from. Cannot be NULL. * @return The bundle name. Will never be NULL. */ const char* celix_bundleManifest_getBundleName(const celix_bundle_manifest_t* manifest); /** * @brief Get the manifest version. Returned value is valid as long as the manifest is valid. * * @param[in] manifest The bundle manifest to get the bundle symbolic name from. Cannot be NULL. * @return The bundle symbolic name. Will never be NULL. */ const char* celix_bundleManifest_getBundleSymbolicName(const celix_bundle_manifest_t* manifest); /** * @brief Get the bundle version. Returned value is valid as long as the manifest is valid. * * @param[in] manifest The bundle manifest to get the bundle version from. Cannot be NULL. * @return The bundle version. Will never be NULL. */ const celix_version_t* celix_bundleManifest_getBundleVersion(const celix_bundle_manifest_t* manifest); /** * @brief Get the bundle version. Returned value is valid as long as the manifest is valid. * * @param[in] manifest The bundle manifest to get the manifest version from. Cannot be NULL. * @return The manifest version. Will never be NULL. */ const celix_version_t* celix_bundleManifest_getManifestVersion(const celix_bundle_manifest_t* manifest); /** * @brief Get the bundle activator library. Returned value is valid as long as the manifest is valid. * * @param[in] manifest The bundle manifest to get the bundle private library from. Cannot be NULL. * @return The bundle activator library. Will be NULL if the manifest does not contain the attribute. */ const char* celix_bundleManifest_getBundleActivatorLibrary(const celix_bundle_manifest_t* manifest); /** * @brief Get the bundle private libraries. Returned value is valid as long as the manifest is valid. * * @param[in] manifest The bundle manifest to get the bundle private libraries from. Cannot be NULL. * @return The bundle private libraries as a celix_array_list_t* with strings. Will be NULL if the manifest does not * contain the attribute. */ const celix_array_list_t* celix_bundleManifest_getBundlePrivateLibraries(const celix_bundle_manifest_t* manifest); /** * @brief Get the bundle description. Returned value is valid as long as the manifest is valid. * * @param[in] manifest The bundle manifest to get the bundle description from. Cannot be NULL. * @return The bundle description. Will be NULL if the manifest does not contain the attribute. */ const char* celix_bundleManifest_getBundleDescription(const celix_bundle_manifest_t* manifest); /** * @brief Get the bundle group. Returned value is valid as long as the manifest is valid. * * @param[in] manifest The bundle manifest to get the bundle group from. Cannot be NULL. * @return The bundle group. Will be NULL if the manifest does not contain the attribute. */ const char* celix_bundleManifest_getBundleGroup(const celix_bundle_manifest_t* manifest); #ifdef __cplusplus } #endif #endif /* CELIX_MANIFEST_H_ */