org.eclipse.ecf.provider.xmpp.container
Class XMPPClientSOContainer

java.lang.Object
  extended by org.eclipse.ecf.provider.generic.SOContainer
      extended by org.eclipse.ecf.provider.generic.ClientSOContainer
          extended by org.eclipse.ecf.provider.xmpp.container.XMPPClientSOContainer
All Implemented Interfaces:
org.eclipse.core.runtime.IAdaptable, IContainer, IIdentifiable, IReliableContainer, ISharedObjectContainer, IOutgoingFileTransferContainerAdapter
Direct Known Subclasses:
XMPPSClientSOContainer

public class XMPPClientSOContainer
extends ClientSOContainer
implements IOutgoingFileTransferContainerAdapter


Field Summary
static int DEFAULT_KEEPALIVE
           
protected  XMPPPresenceSharedObject delegate
           
protected  ID delegateID
           
protected static java.lang.String GOOGLE_SERVICENAME
           
protected  IIMMessageSender messageSender
           
static java.lang.String NAMESPACE_IDENTIFIER
           
static java.lang.String XMPP_DELEGATE_ID
           
 
Fields inherited from class org.eclipse.ecf.provider.generic.ClientSOContainer
CONNECTED, CONNECTING, connection, connectionState, connectLock, DISCONNECTED, remoteServerID
 
Fields inherited from class org.eclipse.ecf.provider.generic.SOContainer
config, DEFAULT_OBJECT_ARG_KEY, DEFAULT_OBJECT_ARGTYPES_KEY, groupManager, isClosing, loadingThreadGroup, policy, receiver, sharedObjectManager, sharedObjectThreadGroup
 
Constructor Summary
  XMPPClientSOContainer()
           
  XMPPClientSOContainer(int ka)
           
protected XMPPClientSOContainer(SOContainerConfig config, int keepAlive)
           
  XMPPClientSOContainer(java.lang.String userhost, int ka)
           
 
Method Summary
protected  void addChat(IChatRoomContainer container)
           
protected  void addFileTransferListener(IFileTransferListener listener)
           
 void addListener(IIncomingFileTransferRequestListener listener)
          Add incoming file transfer listener.
protected  void addSharedObjectToContainer(ID remote)
           
 void connect(ID remote, IConnectContext joinContext)
          Connect to a target remote process or process group.
protected  Callback[] createAuthorizationCallbacks()
           
protected  java.lang.Object createConnectData(ID target, Callback[] cbs, java.lang.Object data)
           
protected  ISynchAsynchConnection createConnection(ID remoteSpace, java.lang.Object data)
           
protected  ID createIDFromHostedRoom(org.jivesoftware.smackx.muc.HostedRoom room)
           
protected  org.jivesoftware.smack.packet.Presence createPresenceFromIPresence(IPresence presence)
           
protected  SOContext createSharedObjectContext(SOConfig soconfig, IQueueEnqueue queue)
           
protected  void deliverEvent(Event evt)
           
 void disconnect()
          Disconnect.
 void dispose()
          Dispose this IContainer instance.
protected  void disposeChatRooms()
           
protected  void dumpStack(java.lang.Throwable t, java.lang.String msg)
           
protected  IChatRoomContainer findReceiverChatRoom(ID toID)
           
protected  void fireFileTransferEvent(IFileTransferEvent event)
           
 java.lang.Object getAdapter(java.lang.Class clazz)
          This specialization of IAdaptable.getAdapter() returns additional services supported by this container.
protected  IRoomInfo getChatRoomInfo(ID roomID)
           
protected  IRoomInfo getChatRoomInfo(java.lang.String roomname)
           
protected  ID[] getChatRooms()
           
 Namespace getConnectNamespace()
          Get the Namespace expected by the remote target container.
protected  int getConnectTimeout()
           
protected  java.util.Collection getHostedRoomForService(java.lang.String svc)
           
 Namespace getOutgoingFileTransferNamespace()
           
 org.jivesoftware.smack.Roster getRoster()
           
protected  boolean handleAsExtension(org.jivesoftware.smack.packet.Packet packet)
           
protected  ID handleConnectResponse(ID originalTarget, java.lang.Object serverData)
           
protected  void handleInvitationMessage(org.jivesoftware.smack.XMPPConnection arg0, java.lang.String arg1, java.lang.String arg2, java.lang.String arg3, java.lang.String arg4, org.jivesoftware.smack.packet.Message arg5)
           
protected  void handleXMPPMessage(org.jivesoftware.smack.packet.Packet aPacket)
           
protected  void processAsynch(AsynchConnectionEvent e)
           
protected  void removeChat(IChatRoomContainer container)
           
protected  void removeFileTransferListener(IFileTransferListener listener)
           
 boolean removeListener(IIncomingFileTransferRequestListener listener)
          Remove incoming file transfer listener
 void sendMessage(ID target, java.lang.String message)
           
 void sendOutgoingRequest(ID targetReceiver, java.io.File localFileToSend, IFileTransferListener transferListener)
          Send request for outgoing file transfer.
 void sendOutgoingRequest(ID targetReceiver, IFileTransferInfo localFileToSend, IFileTransferListener progressListener)
          Send request for outgoing file transfer.
protected  void sendPresenceUpdate(ID target, org.jivesoftware.smack.packet.Presence presence)
           
protected  void sendRosterAdd(java.lang.String user, java.lang.String name, java.lang.String[] groups)
           
protected  void sendRosterRemove(java.lang.String user)
           
protected  void trace(java.lang.String msg)
           
 
Methods inherited from class org.eclipse.ecf.provider.generic.ClientSOContainer
forwardExcluding, forwardExcluding, forwardToRemote, getConnectedID, getConnection, getConnectLock, getIDForConnection, getLeaveData, handleLeaveGroupMessage, handleViewChangeMessage, isConnected, isConnecting, isGroupManager, memberLeave, processDisconnect, processSynch, queueContainerMessage, sendCreateMsg, sendMessage
 
Methods inherited from class org.eclipse.ecf.provider.generic.SOContainer
addListener, addNewRemoteMember, addSharedObject0, addSharedObjectAndWait, addSharedObjectWrapper, addToLoading, checkRemoteCreate, createLoadingThreadGroup, createRemoteSharedObjectConfig, createRemoteSharedObjectContext, createRemoteSharedObjectWrapper, createSharedObjectConfig, createSharedObjectWrapper, debug, deserializeContainerMessage, deserializeSharedObjectMessage, destroySharedObject, dumpStack, fireContainerEvent, forward, getArgsFromProperties, getArgTypesFromProperties, getClassLoaderForContainer, getClassLoaderForSharedObject, getConfig, getContainerPropertiesForSharedObject, getGroupMemberIDs, getGroupMembershipLock, getID, getMaxGroupMembers, getNewSharedObjectThread, getNextSequenceNumber, getOSGIServiceInterface, getOtherMemberIDs, getReceiver, getSharedObject, getSharedObjectIDs, getSharedObjectManager, getSharedObjectThreadGroup, getSharedObjectWrapper, handleAsynchIOException, handleCreateMessage, handleCreateResponseMessage, handleSharedObjectDisposeMessage, handleSharedObjectMessage, handleUnidentifiedMessage, isClosing, killConnection, load, log, logException, memberLeave, moveFromLoadingToActive, notifySharedObjectActivated, notifySharedObjectDeactivated, removeFromLoading, removeListener, removeRemoteMember, removeSharedObject, sendCreate, sendCreateResponse, sendCreateResponseSharedObjectMessage, sendCreateSharedObjectMessage, sendDispose, sendDisposeSharedObjectMessage, sendMessage, sendSharedObjectMessage, serializeObject, serializeSharedObjectMessage, setIsClosing, setMaxGroupMembers, setRemoteAddPolicy, validateContainerMessage, verifyToIDForSharedObjectMessage
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_KEEPALIVE

public static final int DEFAULT_KEEPALIVE
See Also:
Constant Field Values

NAMESPACE_IDENTIFIER

public static final java.lang.String NAMESPACE_IDENTIFIER

XMPP_DELEGATE_ID

public static final java.lang.String XMPP_DELEGATE_ID

GOOGLE_SERVICENAME

protected static final java.lang.String GOOGLE_SERVICENAME
See Also:
Constant Field Values

messageSender

protected IIMMessageSender messageSender

delegate

protected XMPPPresenceSharedObject delegate

delegateID

protected ID delegateID
Constructor Detail

XMPPClientSOContainer

protected XMPPClientSOContainer(SOContainerConfig config,
                                int keepAlive)
                         throws java.lang.Exception
Throws:
java.lang.Exception

XMPPClientSOContainer

public XMPPClientSOContainer()
                      throws java.lang.Exception
Throws:
java.lang.Exception

XMPPClientSOContainer

public XMPPClientSOContainer(int ka)
                      throws java.lang.Exception
Throws:
java.lang.Exception

XMPPClientSOContainer

public XMPPClientSOContainer(java.lang.String userhost,
                             int ka)
                      throws java.lang.Exception
Throws:
java.lang.Exception
Method Detail

addChat

protected void addChat(IChatRoomContainer container)

removeChat

protected void removeChat(IChatRoomContainer container)

trace

protected void trace(java.lang.String msg)

dumpStack

protected void dumpStack(java.lang.Throwable t,
                         java.lang.String msg)

disposeChatRooms

protected void disposeChatRooms()

findReceiverChatRoom

protected IChatRoomContainer findReceiverChatRoom(ID toID)

handleInvitationMessage

protected void handleInvitationMessage(org.jivesoftware.smack.XMPPConnection arg0,
                                       java.lang.String arg1,
                                       java.lang.String arg2,
                                       java.lang.String arg3,
                                       java.lang.String arg4,
                                       org.jivesoftware.smack.packet.Message arg5)

handleConnectResponse

protected ID handleConnectResponse(ID originalTarget,
                                   java.lang.Object serverData)
                            throws java.lang.Exception
Overrides:
handleConnectResponse in class ClientSOContainer
Throws:
java.lang.Exception

addSharedObjectToContainer

protected void addSharedObjectToContainer(ID remote)
                                   throws SharedObjectAddException
Throws:
SharedObjectAddException

dispose

public void dispose()
Description copied from interface: IContainer
Dispose this IContainer instance. The container instance will be made inactive after the completion of this method and will be unavailable for subsequent usage. NOTE: This method is not intended to be called by clients.

Specified by:
dispose in interface IContainer
Overrides:
dispose in class ClientSOContainer

createConnection

protected ISynchAsynchConnection createConnection(ID remoteSpace,
                                                  java.lang.Object data)
                                           throws ConnectionInstantiationException
Specified by:
createConnection in class ClientSOContainer
Throws:
ConnectionInstantiationException

createConnectData

protected java.lang.Object createConnectData(ID target,
                                             Callback[] cbs,
                                             java.lang.Object data)
Overrides:
createConnectData in class ClientSOContainer

createAuthorizationCallbacks

protected Callback[] createAuthorizationCallbacks()
Overrides:
createAuthorizationCallbacks in class ClientSOContainer

getConnectTimeout

protected int getConnectTimeout()
Overrides:
getConnectTimeout in class ClientSOContainer

getRoster

public org.jivesoftware.smack.Roster getRoster()
                                        throws java.io.IOException
Throws:
java.io.IOException

getConnectNamespace

public Namespace getConnectNamespace()
Description copied from interface: IContainer
Get the Namespace expected by the remote target container. Must not return null.

Specified by:
getConnectNamespace in interface IContainer
Overrides:
getConnectNamespace in class SOContainer
Returns:
Namespace the namespace by the target for a call to connect()

deliverEvent

protected void deliverEvent(Event evt)

handleXMPPMessage

protected void handleXMPPMessage(org.jivesoftware.smack.packet.Packet aPacket)
                          throws java.io.IOException
Throws:
java.io.IOException

handleAsExtension

protected boolean handleAsExtension(org.jivesoftware.smack.packet.Packet packet)

connect

public void connect(ID remote,
                    IConnectContext joinContext)
             throws ContainerConnectException
Description copied from interface: IContainer
Connect to a target remote process or process group. The target identified by the first parameter (targetID) is connected the implementation class. If authentication information is required, the required information is given via via the second parameter (connectContext). Callers note that depending upon the provider implementation this method may block. It is suggested that callers use a separate thread to call this method. This method provides an implementation independent way for container implementations to connect, authenticate, and communicate with a remote service or group of services. Providers are responsible for implementing this operation in a way appropriate to the given remote service (or group) via expected protocol.

Specified by:
connect in interface IContainer
Overrides:
connect in class ClientSOContainer
Parameters:
remote - the ID of the remote server or group to connect to
joinContext - any required context to allow this container to authenticate
Throws:
ContainerConnectException - thrown if communication cannot be established with remote service

disconnect

public void disconnect()
Description copied from interface: IContainer
Disconnect. This operation will disconnect the local container instance from any previously joined target or group. Subsequent calls to getConnectedID() will return null.

Specified by:
disconnect in interface IContainer
Overrides:
disconnect in class ClientSOContainer

createSharedObjectContext

protected SOContext createSharedObjectContext(SOConfig soconfig,
                                              IQueueEnqueue queue)
Overrides:
createSharedObjectContext in class SOContainer

processAsynch

protected void processAsynch(AsynchConnectionEvent e)
Overrides:
processAsynch in class ClientSOContainer

sendMessage

public void sendMessage(ID target,
                        java.lang.String message)
                 throws java.io.IOException
Throws:
java.io.IOException

createPresenceFromIPresence

protected org.jivesoftware.smack.packet.Presence createPresenceFromIPresence(IPresence presence)

sendPresenceUpdate

protected void sendPresenceUpdate(ID target,
                                  org.jivesoftware.smack.packet.Presence presence)
                           throws java.io.IOException
Throws:
java.io.IOException

sendRosterAdd

protected void sendRosterAdd(java.lang.String user,
                             java.lang.String name,
                             java.lang.String[] groups)
                      throws java.io.IOException
Throws:
java.io.IOException

sendRosterRemove

protected void sendRosterRemove(java.lang.String user)
                         throws java.io.IOException
Throws:
java.io.IOException

getAdapter

public java.lang.Object getAdapter(java.lang.Class clazz)
Description copied from interface: IContainer
This specialization of IAdaptable.getAdapter() returns additional services supported by this container. A container that supports additional services over and above the methods on IContainer should return them using this method. It is recommended that clients use this method rather than instanceof checks and downcasts to find out about the capabilities of a specific container.

Typically, after obtaining an IContainer, a client would use this method as a means to obtain a more meaningful interface to the container. This interface may or may not extend IContainer. For example, a client could use the following code to obtain an instance of ISharedObjectContainer:

 IContainer newContainer = ContainerFactory.createContainer(type);
 ISharedObjectContainer soContainer = (ISharedObjectContainer) newContainer
                .getAdapter(ISharedObjectContainer.class);
 if (soContainer == null)
        throw new ContainerCreateException(message);
 

Implementations of this method should delegate to Platform.getAdapterManager().getAdapter() if the service cannot be provided directly to ensure extensibility by third-party plug-ins.

Specified by:
getAdapter in interface org.eclipse.core.runtime.IAdaptable
Specified by:
getAdapter in interface IContainer
Overrides:
getAdapter in class SOContainer
Parameters:
clazz - the service type to look up
Returns:
the service instance castable to the given class, or null if this container does not support the given service

getHostedRoomForService

protected java.util.Collection getHostedRoomForService(java.lang.String svc)
                                                throws org.jivesoftware.smack.XMPPException
Throws:
org.jivesoftware.smack.XMPPException

createIDFromHostedRoom

protected ID createIDFromHostedRoom(org.jivesoftware.smackx.muc.HostedRoom room)

getChatRooms

protected ID[] getChatRooms()

getChatRoomInfo

protected IRoomInfo getChatRoomInfo(ID roomID)

getChatRoomInfo

protected IRoomInfo getChatRoomInfo(java.lang.String roomname)

addFileTransferListener

protected void addFileTransferListener(IFileTransferListener listener)

removeFileTransferListener

protected void removeFileTransferListener(IFileTransferListener listener)

addListener

public void addListener(IIncomingFileTransferRequestListener listener)
Description copied from interface: IOutgoingFileTransferContainerAdapter
Add incoming file transfer listener. If the underlying provider supports receiving file transfer requests

Specified by:
addListener in interface IOutgoingFileTransferContainerAdapter
Parameters:
listener - to receive incoming file transfer request events. Must not be null

sendOutgoingRequest

public void sendOutgoingRequest(ID targetReceiver,
                                IFileTransferInfo localFileToSend,
                                IFileTransferListener progressListener)
                         throws OutgoingFileTransferException
Description copied from interface: IOutgoingFileTransferContainerAdapter
Send request for outgoing file transfer. This method is used to initiate a file transfer to a targetReceiver (first parameter) of the localFileToSend (second parameter). File transfer events are asynchronously delivered to the file transferListener (third parameter)

Specified by:
sendOutgoingRequest in interface IOutgoingFileTransferContainerAdapter
Parameters:
targetReceiver - the ID of the remote to receive the file transfer request
localFileToSend - the IFileTransferInfo for the local file to send. Must not be null
progressListener - a IFileTransferListener for responding to file transfer events. Must not be null. If the target receiver responds then an IOutgoingFileTransferResponseEvent will be delivered to the listener
Throws:
OutgoingFileTransferException - if the provider is not connected or is not in the correct state for initiating file transfer

fireFileTransferEvent

protected void fireFileTransferEvent(IFileTransferEvent event)

getOutgoingFileTransferNamespace

public Namespace getOutgoingFileTransferNamespace()

removeListener

public boolean removeListener(IIncomingFileTransferRequestListener listener)
Description copied from interface: IOutgoingFileTransferContainerAdapter
Remove incoming file transfer listener

Specified by:
removeListener in interface IOutgoingFileTransferContainerAdapter
Parameters:
listener - the listener to remove. Must not be null
Returns:
true if listener actually removed, false otherwise

sendOutgoingRequest

public void sendOutgoingRequest(ID targetReceiver,
                                java.io.File localFileToSend,
                                IFileTransferListener transferListener)
                         throws OutgoingFileTransferException
Description copied from interface: IOutgoingFileTransferContainerAdapter
Send request for outgoing file transfer. This method is used to initiate a file transfer to a targetReceiver (first parameter) of the localFileToSend (second parameter). File transfer events are asynchronously delivered to the file transferListener (third parameter)

Specified by:
sendOutgoingRequest in interface IOutgoingFileTransferContainerAdapter
Parameters:
targetReceiver - the ID of the remote to receive the file transfer request
localFileToSend - the File for the local file to send. Must not be null
transferListener - a IFileTransferListener for responding to file transfer events. Must not be null. If the target receiver responds then an IOutgoingFileTransferResponseEvent will be delivered to the listener
Throws:
OutgoingFileTransferException - if the provider is not connected or is not in the correct state for initiating file transfer