/*
* Copyright (c) OSGi Alliance (2012, 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.namespace;
import org.osgi.resource.Namespace;
Package Capability and Requirement Namespace.
A resource provides zero or more package capabilities (this is, exported
packages) and requires zero or more package requirements (that is, imported
packages).
This class defines the names for the attributes and directives for this namespace. All unspecified capability attributes are of type String
and are used as arbitrary matching attributes for the capability. The values associated with the specified directive and attribute keys are of type String
, unless otherwise indicated.
Unless otherwise noted, all directives specified on the Export-Package
header are visible in the capability and all directives specified on the Import-Package
and DynamicImport-Package
headers are visible in the requirement.
- The
effective
directives
must be ignored. This namespace is only effective at
resolve
time. An effective
directive specified on the Export-Package
, Import-Package
or DynamicImport-Package
headers must be ignored. An effective
directive must not be present in a capability or requirement.
- The
cardinality
directive has limited applicability to this namespace. A cardinality
directive specified on the Import-Package
or DynamicImport-Package
headers must be ignored. Only requirements with resolution
set to dynamic
and the package name contains a wildcard must have the cardinality
directive set to multiple
. Otherwise, a cardinality
directive must not be present in a requirement.
Author: $Id: 5f241fb0804d477ab8f2d33f247d45e62caf72df $ @Immutable
/**
* Package Capability and Requirement Namespace.
*
* <p>
* A resource provides zero or more package capabilities (this is, exported
* packages) and requires zero or more package requirements (that is, imported
* packages).
*
* <p>
* This class defines the names for the attributes and directives for this
* namespace. All unspecified capability attributes are of type {@code String}
* and are used as arbitrary matching attributes for the capability. The values
* associated with the specified directive and attribute keys are of type
* {@code String}, unless otherwise indicated.
*
* <p>
* Unless otherwise noted, all directives specified on the
* {@code Export-Package} header are visible in the capability and all
* directives specified on the {@code Import-Package} and
* {@code DynamicImport-Package} headers are visible in the requirement.
*
* <ul>
* <li>The {@link Namespace#CAPABILITY_EFFECTIVE_DIRECTIVE effective}
* {@link Namespace#REQUIREMENT_EFFECTIVE_DIRECTIVE directives} must be ignored.
* This namespace is only effective at {@link Namespace#EFFECTIVE_RESOLVE
* resolve} time. An {@code effective} directive specified on the
* {@code Export-Package}, {@code Import-Package} or
* {@code DynamicImport-Package} headers must be ignored. An {@code effective}
* directive must not be present in a capability or requirement.</li>
* <li>The {@link Namespace#REQUIREMENT_CARDINALITY_DIRECTIVE cardinality}
* directive has limited applicability to this namespace. A {@code cardinality}
* directive specified on the {@code Import-Package} or
* {@code DynamicImport-Package} headers must be ignored. Only requirements with
* {@link Namespace#REQUIREMENT_RESOLUTION_DIRECTIVE resolution} set to
* {@link #RESOLUTION_DYNAMIC dynamic} and the package name contains a wildcard
* must have the {@code cardinality} directive set to
* {@link Namespace#CARDINALITY_MULTIPLE multiple}. Otherwise, a
* {@code cardinality} directive must not be present in a requirement.</li>
* </ul>
*
* @Immutable
* @author $Id: 5f241fb0804d477ab8f2d33f247d45e62caf72df $
*/
public final class PackageNamespace extends AbstractWiringNamespace {
Namespace name for package capabilities and requirements.
Also, the capability attribute used to specify the name of the package.
/**
* Namespace name for package capabilities and requirements.
*
* <p>
* Also, the capability attribute used to specify the name of the package.
*/
public static final String PACKAGE_NAMESPACE = "osgi.wiring.package";
The capability directive used to specify the comma separated list of
classes which must be allowed to be exported.
/**
* The capability directive used to specify the comma separated list of
* classes which must be allowed to be exported.
*/
public final static String CAPABILITY_INCLUDE_DIRECTIVE = "include";
The capability directive used to specify the comma separated list of
classes which must not be allowed to be exported.
/**
* The capability directive used to specify the comma separated list of
* classes which must not be allowed to be exported.
*/
public final static String CAPABILITY_EXCLUDE_DIRECTIVE = "exclude";
The capability attribute contains the Version
of the package if one is specified or 0.0.0
if not specified. The value of this attribute must be of type Version
. /**
* The capability attribute contains the {@code Version} of the package if
* one is specified or {@code 0.0.0} if not specified. The value of this
* attribute must be of type {@code Version}.
*/
public final static String CAPABILITY_VERSION_ATTRIBUTE = "version";
The capability attribute contains the symbolic name of the resource
providing the package.
/**
* The capability attribute contains the symbolic name of the resource
* providing the package.
*/
public final static String CAPABILITY_BUNDLE_SYMBOLICNAME_ATTRIBUTE = "bundle-symbolic-name";
The directive value identifying a dynamic requirement resolution type. A
dynamic resolution type indicates that the requirement is resolved
dynamically at runtime (such as a dynamically imported package) and the
resource will be resolved without the requirement being resolved.
See Also: - REQUIREMENT_RESOLUTION_DIRECTIVE.REQUIREMENT_RESOLUTION_DIRECTIVE
/**
* The directive value identifying a dynamic requirement resolution type. A
* dynamic resolution type indicates that the requirement is resolved
* dynamically at runtime (such as a dynamically imported package) and the
* resource will be resolved without the requirement being resolved.
*
* @see Namespace#REQUIREMENT_RESOLUTION_DIRECTIVE
*/
public final static String RESOLUTION_DYNAMIC = "dynamic";
private PackageNamespace() {
// empty
}
}