blob: 9f7114cac2bb4cd57933fef0a240ab9e230d7e8c [file] [log] [blame]
/*
* 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.
*
* <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.
*
* <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.
*/
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.
*/
public final static String CAPABILITY_EXCLUDE_DIRECTIVE = "exclude";
/**
* 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.
*/
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 Namespace#REQUIREMENT_RESOLUTION_DIRECTIVE
*/
public final static String RESOLUTION_DYNAMIC = "dynamic";
private PackageNamespace() {
// empty
}
}