/*
* 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.tuscany.sca.implementation.osgi;
import javax.xml.namespace.QName;
/**
* <tuscany:osgi.property>
*/
public interface OSGiProperty {
String NAME = "name";
String TYPE = "type";
String VALUE = "value";
QName PROPERTY_QNAME = new QName(OSGiImplementation.SCA11_TUSCANY_NS, "osgi.property");
String REMOTE_CONFIG_SCA = "org.osgi.sca";
String SCA_BINDINGS = "org.osgi.sca.bindings";
String SCA_REFERENCE = "sca.reference";
String SCA_SERVICE = "sca.service";
String SCA_REFERENCE_BINDING = "sca.reference.binding";
String SCA_SERVICE_BINDING = "sca.service.binding";
/**
* Service property identifying the configuration types supported by a
* distribution provider. Registered by the distribution provider on one of
* its services to indicate the supported configuration types.
* <p>
* The value of this property must be of type <code>String</code>,
* <code>String[]</code>, or <code>Collection<String></code>.
*/
public static final String REMOTE_CONFIGS_SUPPORTED = "remote.configs.supported";
/**
* Service property identifying the intents supported by a distribution
* provider. Registered by the distribution provider on one of its services
* to indicate the vocabulary of implemented intents.
*
* <p>
* The value of this property must be of type <code>String</code>,
* <code>String[]</code>, or <code>Collection<String></code>.
*/
public static final String REMOTE_INTENTS_SUPPORTED = "remote.intents.supported";
/**
* Service property identifying the configuration types that should be used
* to export the service. Each configuration type represents the
* configuration parameters for an endpoint. A distribution provider should
* create an endpoint for each configuration type that it supports.
*
* <p>
* This property may be supplied in the <code>properties</code>
* <code>Dictionary</code> object passed to the
* <code>BundleContext.registerService</code> method. The value of this
* property must be of type <code>String</code>, <code>String[]</code>, or
* <code>Collection<String></code>.
*/
public static final String SERVICE_EXPORTED_CONFIGS = "service.exported.configs";
/**
* Service property identifying the intents that the distribution provider
* must implement to distribute the service. Intents listed in this property
* are reserved for intents that are critical for the code to function
* correctly, for example, ordering of messages. These intents should not be
* configurable.
*
* <p>
* This property may be supplied in the <code>properties</code>
* <code>Dictionary</code> object passed to the
* <code>BundleContext.registerService</code> method. The value of this
* property must be of type <code>String</code>, <code>String[]</code>, or
* <code>Collection<String></code>.
*/
public static final String SERVICE_EXPORTED_INTENTS = "service.exported.intents";
/**
* Service property identifying the extra intents that the distribution
* provider must implement to distribute the service. This property is
* merged with the <code>service.exported.intents</code> property before the
* distribution provider interprets the listed intents; it has therefore the
* same semantics but the property should be configurable so the
* administrator can choose the intents based on the topology. Bundles
* should therefore make this property configurable, for example through the
* Configuration Admin service.
*
* <p>
* This property may be supplied in the <code>properties</code>
* <code>Dictionary</code> object passed to the
* <code>BundleContext.registerService</code> method. The value of this
* property must be of type <code>String</code>, <code>String[]</code>, or
* <code>Collection<String></code>.
*/
public static final String SERVICE_EXPORTED_INTENTS_EXTRA = "service.exported.intents.extra";
/**
* Service property marking the service for export. It defines the
* interfaces under which this service can be exported. This list must be a
* subset of the types under which the service was registered. The single
* value of an asterisk ("*", \u002A) indicates all the
* interface types under which the service was registered excluding the
* non-interface types. It is strongly recommended to only export interface
* types and not concrete classes due to the complexity of creating proxies
* for some type of concrete classes.
*
* <p>
* This property may be supplied in the <code>properties</code>
* <code>Dictionary</code> object passed to the
* <code>BundleContext.registerService</code> method. The value of this
* property must be of type <code>String</code>, <code>String[]</code>, or
* <code>Collection<String></code>.
*/
public static final String SERVICE_EXPORTED_INTERFACES = "service.exported.interfaces";
/**
* Service property identifying the service as imported. This service
* property must be set by a distribution provider to any value when it
* registers the endpoint proxy as an imported service. A bundle can use
* this property to filter out imported services.
*
* <p>
* The value of this property may be of any type.
*/
public static final String SERVICE_IMPORTED = "service.imported";
/**
* Service property identifying the configuration types used to import the
* service. Any associated properties for this configuration types must be
* properly mapped to the importing system. For example, a URL in these
* properties must point to a valid resource when used in the importing
* framework. If multiple configuration types are listed in this property,
* then they must be synonyms for exactly the same remote endpoint that is
* used to export this service.
*
* <p>
* The value of this property must be of type <code>String</code>,
* <code>String[]</code>, or <code>Collection<String></code>.
*
* @see #SERVICE_EXPORTED_CONFIGS
*/
public static final String SERVICE_IMPORTED_CONFIGS = "service.imported.configs";
/**
* Service property identifying the intents that this service implement.
* This property has a dual purpose:
* <ul>
* <li>A bundle can use this service property to notify the distribution
* provider that these intents are already implemented by the exported
* service object.</li>
* <li>A distribution provider must use this property to convey the combined
* intents of: The exporting service, and, the intents that the exporting
* distribution provider adds, and the intents that the importing
* distribution provider adds.</li>
* </ul>
* To export a service, a distribution provider must expand any qualified
* intents. Both the exporting and importing distribution providers must
* recognize all intents before a service can be distributed.
*
* <p>
* The value of this property must be of type <code>String</code>,
* <code>String[]</code>, or <code>Collection<String></code>.
*/
public static final String SERVICE_INTENTS = "service.intents";
/* above are from Ch 13 Remote Service spec. */
/**
* Endpoint property identifying the id for this endpoint. This service
* property must always be set.
*
* <p>
* The value of this property must be of type <code>String</code>.
*/
String ENDPOINT_ID = "endpoint.id";
/**
* Endpoint property identifying the service id of the exported service. Can
* be absent or 0 if the corresponding endpoint is not for an OSGi service.
*
* <p>
* The value of this property must be of type <code>Long</code>.
*/
String ENDPOINT_SERVICE_ID = "endpoint.service.id";
/**
* Endpoint property identifying the universally unique id of the exporting
* framework. Can be absent if the corresponding endpoint is not for an OSGi
* service.
*
* <p>
* The value of this property must be of type <code>String</code>.
*/
String ENDPOINT_FRAMEWORK_UUID = "endpoint.framework.uuid";
/**
* Prefix for an endpoint property identifying the interface Java package
* version for an interface. For example, the property
* endpoint.package.version.com.acme=1.3 describes the version of the
* package for the com.acme.Foo interface. This endpoint property for an
* interface package does not have to be set. If not set, the value must be
* assumed to be 0.
*
* <p>
* Since endpoint properties are stored in a case insensitive map, case
* variants of a package name are folded together.
*
* <p>
* The value of this property must be of type <code>String</code>.
*/
String ENDPOINT_PACKAGE_VERSION_ = "endpoint.package.version.";
Object getValue();
void setValue(Object value);
String getName();
void setName(String name);
String getType();
void setType(String type);
String getStringValue();
void setStringValue(String value);
}