/*******************************************************************************
* Copyright (c) 2007 Versant Corp.
* 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:
* Markus Kuppe (mkuppe <at> versant <dot> com) - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.provider.discovery;
import org.eclipse.ecf.core.*;
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.discovery.*;
import org.eclipse.ecf.discovery.identity.IServiceID;
import org.eclipse.ecf.discovery.identity.IServiceTypeID;
import org.eclipse.equinox.concurrent.future.IFuture;
/**
*
*/
public class SingletonDiscoveryContainer implements IDiscoveryContainerAdapter, IContainer {
private final IDiscoveryContainerAdapter discovery;
private final IContainer container;
private boolean initialized = false;
/**
* @param container
*/
public SingletonDiscoveryContainer(final IContainer container) {
super();
this.container = container;
this.discovery = (IDiscoveryContainerAdapter) container.getAdapter(IDiscoveryContainerAdapter.class);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.core.IContainer#connect(org.eclipse.ecf.core.identity.ID, org.eclipse.ecf.core.security.IConnectContext)
*/
public synchronized void connect(final ID targetID, final IConnectContext connectContext) throws ContainerConnectException {
if (initialized == false) {
initialized = true;
container.connect(targetID, connectContext);
}
//TODO do some meaningful logging
// clients aren't allowed to call this;
}
/* (non-Javadoc)
* @see org.eclipse.ecf.core.IContainer#disconnect()
*/
public void disconnect() {
//TODO do some meaningful logging
// clients aren't allowed to call this;
}
/* (non-Javadoc)
* @see org.eclipse.ecf.core.IContainer#dispose()
*/
public void dispose() {
//TODO do some meaningful logging
// clients aren't allowed to call this;
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
*/
public Object getAdapter(final Class adapter) {
if (adapter == null)
return null;
if (adapter.isInstance(this))
return this;
return null;
}
//******************* below just delegates ******************//
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#addServiceListener(org.eclipse.ecf.discovery.identity.IServiceTypeID, org.eclipse.ecf.discovery.IServiceListener)
*/
public void addServiceListener(final IServiceTypeID type, final IServiceListener listener) {
discovery.addServiceListener(type, listener);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#addServiceTypeListener(org.eclipse.ecf.discovery.IServiceTypeListener)
*/
public void addServiceTypeListener(final IServiceTypeListener listener) {
discovery.addServiceTypeListener(listener);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#getServiceInfo(org.eclipse.ecf.discovery.identity.IServiceID)
*/
public IServiceInfo getServiceInfo(final IServiceID service) {
return discovery.getServiceInfo(service);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#getServices(org.eclipse.ecf.discovery.identity.IServiceTypeID)
*/
public IServiceInfo[] getServices(final IServiceTypeID type) {
return discovery.getServices(type);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#getServicesNamespace()
*/
public Namespace getServicesNamespace() {
return discovery.getServicesNamespace();
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#registerService(org.eclipse.ecf.discovery.IServiceInfo)
*/
public void registerService(final IServiceInfo serviceInfo) {
discovery.registerService(serviceInfo);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#removeServiceListener(org.eclipse.ecf.discovery.identity.IServiceTypeID, org.eclipse.ecf.discovery.IServiceListener)
*/
public void removeServiceListener(final IServiceTypeID type, final IServiceListener listener) {
discovery.removeServiceListener(type, listener);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#removeServiceTypeListener(org.eclipse.ecf.discovery.IServiceTypeListener)
*/
public void removeServiceTypeListener(final IServiceTypeListener listener) {
discovery.removeServiceTypeListener(listener);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#unregisterService(org.eclipse.ecf.discovery.IServiceInfo)
*/
public void unregisterService(final IServiceInfo serviceInfo) {
discovery.unregisterService(serviceInfo);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.core.IContainer#addListener(org.eclipse.ecf.core.IContainerListener)
*/
public void addListener(final IContainerListener listener) {
container.addListener(listener);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.core.IContainer#getConnectedID()
*/
public ID getConnectedID() {
return container.getConnectedID();
}
/* (non-Javadoc)
* @see org.eclipse.ecf.core.IContainer#getConnectNamespace()
*/
public Namespace getConnectNamespace() {
return container.getConnectNamespace();
}
/* (non-Javadoc)
* @see org.eclipse.ecf.core.identity.IIdentifiable#getID()
*/
public ID getID() {
return container.getID();
}
/* (non-Javadoc)
* @see org.eclipse.ecf.core.IContainer#removeListener(org.eclipse.ecf.core.IContainerListener)
*/
public void removeListener(final IContainerListener listener) {
container.removeListener(listener);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#getServices()
*/
public IServiceInfo[] getServices() {
return discovery.getServices();
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#getServiceTypes()
*/
public IServiceTypeID[] getServiceTypes() {
return discovery.getServiceTypes();
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#addServiceListener(org.eclipse.ecf.discovery.IServiceListener)
*/
public void addServiceListener(final IServiceListener listener) {
discovery.addServiceListener(listener);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryContainerAdapter#removeServiceListener(org.eclipse.ecf.discovery.IServiceListener)
*/
public void removeServiceListener(final IServiceListener listener) {
discovery.removeServiceListener(listener);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryLocator#purgeCache()
*/
public IServiceInfo[] purgeCache() {
return discovery.purgeCache();
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryAsyncLocator#getAsyncServiceInfo(org.eclipse.ecf.discovery.identity.IServiceID)
*/
public IFuture getAsyncServiceInfo(IServiceID aServiceID) {
return discovery.getAsyncServiceInfo(aServiceID);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryAsyncLocator#getAsyncServiceTypes()
*/
public IFuture getAsyncServiceTypes() {
return discovery.getAsyncServiceTypes();
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryAsyncLocator#getAsyncServices()
*/
public IFuture getAsyncServices() {
return discovery.getAsyncServices();
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryAsyncLocator#getAsyncServices(org.eclipse.ecf.discovery.identity.IServiceTypeID)
*/
public IFuture getAsyncServices(IServiceTypeID aServiceTypeID) {
return discovery.getAsyncServices(aServiceTypeID);
}
/* (non-Javadoc)
* @see org.eclipse.ecf.discovery.IDiscoveryAdvertiser#unregisterAllServices()
*/
public void unregisterAllServices() {
discovery.unregisterAllServices();
}
}