/*
* Copyright (c) OSGi Alliance (2008, 2009). 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.apache.tuscany.sca.osgi.remoteserviceadmin;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.osgi.framework.ServiceReference;
/**
* A Remote Service Admin manages the import and export of services.
*
* A Distribution Provider can expose a control interface. This interface allows
* the a remote manager to control the export and import of services.
*
* The API allows a remote manager to export a service, to import a service, and
* find out about the current imports and exports.
*
*
*
* @ThreadSafe
*/
public interface RemoteServiceAdmin {
/**
* Export a service to a given endpoint. The Remote Service Admin must
* create an endpoint from the given description that can be used by other
* Distrbution Providers to connect to this Remote Service Admin and use the
* exported service. This method can return null if the service could not be
* exported because the endpoint could not be implemented by this Remote
* Service Admin.
*
* The properties on a Service Reference are case insensitive while the
* properties on a properties
are case sensitive. A value in
* the properties
must therefore override any case variant in
* the properties of the Service Reference.
*
* If an endpoint can not be created because no
* {@link EndpointPermission#EXPORT} can be obtained to export this service,
* then this endpoint must be ignored and no Export Registration must be
* included in the returned list.
*
* @param ref The Service Reference to export
* @param properties The properties to create a local endpoint that can be
* implemented by this Remote Service Admin. If this is null, the
* endpoint will be determined by the properties on the service. The
* properties are the same as given for an exported service. They are
* overlaid over any properties the service defines (case
* insensitive). This parameter can be null
, this
* should be treated as an empty map.
* @return An Export Registration that combines the Endpoint Description and
* the Service Reference or null
if the service could
* not be exported
* @throws IllegalArgumentException
* @throws UnsupportedOperationException
*
* TODO discuss case difference in properties
*
* TODO More exceptions?
* TODO Can you export ANY service by providing the proper properties?
*/
List/* */exportService(ServiceReference ref, Map/* */properties)
throws IllegalArgumentException, UnsupportedOperationException;
/**
* Import a service from an endpoint. The Remote Service Admin must use the
* given endpoint to create a proxy. This method can return null if the
* service could not be imported.
*
* TODO if the import reg. is valid (getException==null), can we then assume the
* service is registered?
*
* If an endpoint can not be imported because no
* {@link EndpointPermission#IMPORT} can be obtained, then this endpoint
* must be ignored and no Import Registration must included in the returned
* list.
*
* @param endpoint The Endpoint Description to be used for import
* @return An Import Registration that combines the Endpoint Description and
* the Service Reference or null
if the endpoint
* could not be imported
*/
ImportRegistration importService(EndpointDescription endpoint);
/**
* Answer the currently active Export References.
*
* @return A collection of Export Registrations that are currently active.
* @throws SecurityException When the caller no
* {@link EndpointPermission#READ} could be obtained
*/
Collection/* */getExportedServices();
/**
* Answer the currently active Import References.
*
* @throws SecurityException When the caller no EndpointPermission LIST
* could be obtained
* @return A collection of Import Registrations that are currently active.
* @throws SecurityException When the caller no
* {@link EndpointPermission#READ} could be obtained
*/
Collection/* */getImportedEndpoints();
}