/******************************************************************************* * Copyright (c) 2016 Composent, Inc. 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: Scott Lewis <slewis@composent.com> - initial API and implementation ******************************************************************************/ package org.eclipse.ecf.remoteservice; import java.util.Map; import org.eclipse.ecf.core.AbstractContainer; import org.eclipse.ecf.core.ContainerConnectException; import org.eclipse.ecf.core.identity.ID; import org.eclipse.ecf.core.identity.Namespace; import org.eclipse.ecf.core.security.IConnectContext; import org.eclipse.ecf.remoteservice.RSARemoteServiceContainerAdapter.RSARemoteServiceRegistration; /** * Abstract container that is intended for use by RSA distribution providers. Subclasses may extend * and override to create custom container adapter types. By default, an instance of RSARemoteServiceContainerAdapter * is created by this class upon construction. * * @since 8.9 */ public abstract class AbstractRSAContainer extends AbstractContainer { private final ID id; private final RSARemoteServiceContainerAdapter containerAdapter; public AbstractRSAContainer(ID id) { this.id = id; this.containerAdapter = createContainerAdapter(); } /** * Export an endpoint specified by the RSARemoteServiceRegistration. Subclasses must * implement to respond to a remote service export. This method will be called by * the ECF RemoteServiceAdmin.exportService when this container should handle the export. * * @param registration the RSARemoteServiceRegistration that is being registered. Will not * be <code>null</code>. * * @return Map of extra properties to add to the RSA EndpointDescription. * Any properties in the returned map will override or add to the endpoint description. For example, * if one of the properties in the returned Map is a String value for the key 'ecf.endpoint.id', * then the value from the map will override this property in the endpoint description. The result * may be <code>null</code>, in which case no properties will be overridden or added. */ protected abstract Map<String, Object> exportRemoteService(RSARemoteServiceRegistration registration); /** * Unregister the endpoint for the given RSARemoteServiceRegistration. Subclasses must implement * to respond to a remote service export. This method will be called when a remote service * is unregistered, or unexported. * * @param registration the registration identifying the remote service to unregister. Will not * be <code>null</code>. */ protected abstract void unexportRemoteService(RSARemoteServiceRegistration registration); protected RSARemoteServiceContainerAdapter createContainerAdapter() { return new RSARemoteServiceContainerAdapter(this); } public void connect(ID targetID, IConnectContext connectContext) throws ContainerConnectException { throw new ContainerConnectException("Cannot connect this container"); //$NON-NLS-1$ } public ID getConnectedID() { return null; } public Namespace getConnectNamespace() { return getID().getNamespace(); } public void disconnect() { // do nothing } public ID getID() { return id; } @Override public Object getAdapter(Class serviceType) { Object result = super.getAdapter(serviceType); if (result == null && serviceType.isAssignableFrom(IRemoteServiceContainerAdapter.class)) return containerAdapter; return null; } }