/**
* Copyright (c) 2006 Ecliptical Software 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:
* Ecliptical Software Inc. - initial API and implementation
*/
package org.eclipse.ecf.pubsub.impl;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.identity.IDFactory;
import org.eclipse.ecf.core.identity.IDCreateException;
import org.eclipse.ecf.core.sharedobject.ISharedObjectContainer;
import org.eclipse.ecf.core.sharedobject.ISharedObjectManager;
import org.eclipse.ecf.core.sharedobject.SharedObjectCreateException;
import org.eclipse.ecf.core.sharedobject.SharedObjectDescription;
import org.eclipse.ecf.pubsub.IPublishedServiceDirectory;
import org.eclipse.ecf.pubsub.IPublishedServiceRequestor;
public class PubSubAdapterFactory implements IAdapterFactory {
private static final Class[] ADAPTERS = { IPublishedServiceDirectory.class, IPublishedServiceRequestor.class };
public Object getAdapter(Object adaptableObject, Class adapterType) {
if (!(adaptableObject instanceof ISharedObjectContainer))
return null;
if (IPublishedServiceDirectory.class.isAssignableFrom(adapterType))
return getDirectory((ISharedObjectContainer) adaptableObject);
if (IPublishedServiceRequestor.class.isAssignableFrom(adapterType))
return getRequestor((ISharedObjectContainer) adaptableObject);
return null;
}
protected IPublishedServiceDirectory getDirectory(ISharedObjectContainer container) {
ID directoryID;
try {
directoryID = IDFactory.getDefault().createStringID(PublishedServiceDirectory.SHARED_OBJECT_ID);
} catch (IDCreateException e) {
throw new RuntimeException(e);
}
final ISharedObjectManager mgr = container.getSharedObjectManager();
IPublishedServiceDirectory directory = (IPublishedServiceDirectory) mgr.getSharedObject(directoryID);
if (directory != null)
return directory;
try {
SharedObjectDescription desc = createDirectoryDescription(directoryID);
mgr.createSharedObject(desc);
return (IPublishedServiceDirectory) mgr.getSharedObject(directoryID);
} catch (SharedObjectCreateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
protected SharedObjectDescription createDirectoryDescription(ID directoryID) {
return new SharedObjectDescription(PublishedServiceDirectory.class, directoryID, null);
}
protected IPublishedServiceRequestor getRequestor(ISharedObjectContainer container) {
return new ServiceRequestor(container.getSharedObjectManager());
}
public Class[] getAdapterList() {
return ADAPTERS;
}
}