blob: c3685ad0905d3b4415804256fafaccffb7e2051a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Composent, Inc. and others. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Composent, Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.remoteservice;
import java.util.Dictionary;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.identity.Namespace;
/**
* @since 5.0
*/
public interface IRemoteServiceHost extends IAdaptable {
/**
* Register a new remote service. This method is to be called by the service
* server...i.e. the client that wishes to make available a service to other
* client within this container.
*
* @param clazzes
* the interface classes that the service exposes to remote
* clients. Must not be <code>null</code> and must not be an
* empty array.
* @param service
* the service object. Under normal conditions this object must
* <ul><li>not be <code>null</code></li>
* <li>implement all of the classes specified by the first parameter</li>
* </ul>
* The only situation when the service object may be <code>null</code> is if
* the service property {@link Constants#SERVICE_REGISTER_PROXY} is set
* in the properties. If {@link Constants#SERVICE_REGISTER_PROXY} is set
* in the properties parameter (to an arbitrary value), then the service
* object may then be <code>null</code>.
* @param properties
* to be associated with service
* @return IRemoteServiceRegistration the service registration. Will not
* return <code>null</code> .
*/
public IRemoteServiceRegistration registerRemoteService(String[] clazzes, Object service, Dictionary properties);
/**
* Add listener for remote service registration/unregistration for this
* container
*
* @param listener
* notified of service registration/unregistration events. Must
* not be <code>null</code> .
*/
public void addRemoteServiceListener(IRemoteServiceListener listener);
/**
* Remove remote service registration/unregistration listener for this
* container.
*
* @param listener
* to remove. Must not be <code>null</code> .
*/
public void removeRemoteServiceListener(IRemoteServiceListener listener);
/**
* Get namespace to use for this remote service provider.
* @return Namespace to use for creating IRemoteServiceID for this remote service provider. Will
* not return <code>null</code>.
* @since 3.0
*/
public Namespace getRemoteServiceNamespace();
/**
* Get a remote service ID from a containerID and a containerRelative long value. Will return a non-null value
* if the IRemoteServiceRegistration/Reference is currently 'known' to this container adapter. <code>null</code>
* if not.
* @param containerID the containerID that is the server/host for the remote service. Must not be <code>null</code>. This
* must be the containerID for the <b>server</b>/host of the remote service.
* @param containerRelativeID the long value identifying the remote service relative to the container ID.
* @return IRemoteServiceID instance if the associated IRemoteServiceRegistration/Reference is known to this container
* adapter, <code>null</code> if it is not.
* @since 3.0
*/
public IRemoteServiceID getRemoteServiceID(ID containerID, long containerRelativeID);
}