Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2006-12-29 07:11:40 +0000
committerslewis2006-12-29 07:11:40 +0000
commit57b4b27386a15514bc714a59dae78b898569925f (patch)
tree2410d1834edf896903c494939b2ffd1febdb2e7e /providers/bundles/org.eclipse.ecf.provider.xmpp/src/org
parent293cd0cd7e9deffd1cd0597eb7fff1a8d918d0bf (diff)
downloadorg.eclipse.ecf-57b4b27386a15514bc714a59dae78b898569925f.tar.gz
org.eclipse.ecf-57b4b27386a15514bc714a59dae78b898569925f.tar.xz
org.eclipse.ecf-57b4b27386a15514bc714a59dae78b898569925f.zip
Added handling of vcard-temp:x:update namespace for smack extension provider. Also added to IPresence interface access to photo data provided by smack extension provider. Also added implementation in XMPPContainer and XMPPSOClientContainer classes.
Diffstat (limited to 'providers/bundles/org.eclipse.ecf.provider.xmpp/src/org')
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPChatManager.java98
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPContainer.java11
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPContainerPresenceHelper.java24
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPChatManager.java97
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPClientSOContainer.java8
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPPresenceSharedObject.java24
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/events/PresenceEvent.java13
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/identity/XMPPID.java2
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/smack/ECFConnection.java3
9 files changed, 194 insertions, 86 deletions
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPChatManager.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPChatManager.java
index c6f52d290..f878da5c8 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPChatManager.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPChatManager.java
@@ -21,9 +21,12 @@ import org.eclipse.ecf.presence.im.ChatMessage;
import org.eclipse.ecf.presence.im.ChatMessageEvent;
import org.eclipse.ecf.presence.im.IChatManager;
import org.eclipse.ecf.presence.im.IChatMessage;
-import org.eclipse.ecf.presence.im.IChatMessageEvent;
-import org.eclipse.ecf.presence.im.IChatMessageListener;
import org.eclipse.ecf.presence.im.IChatMessageSender;
+import org.eclipse.ecf.presence.im.IIMMessageEvent;
+import org.eclipse.ecf.presence.im.IIMMessageListener;
+import org.eclipse.ecf.presence.im.ITypingMessage;
+import org.eclipse.ecf.presence.im.ITypingMessageSender;
+import org.eclipse.ecf.presence.im.TypingMessageEvent;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type;
@@ -38,9 +41,45 @@ public class XMPPChatManager implements IChatManager {
protected IChatMessageSender chatMessageSender = new IChatMessageSender() {
- public void sendChatMessage(ID toID, IChatMessage message)
+ /* (non-Javadoc)
+ * @see org.eclipse.ecf.presence.im.IChatMessageSender#sendChatMessage(org.eclipse.ecf.core.identity.ID, org.eclipse.ecf.core.identity.ID, org.eclipse.ecf.presence.im.IChatMessage.Type, java.lang.String, java.lang.String)
+ */
+ public void sendChatMessage(ID toID, ID threadID,
+ org.eclipse.ecf.presence.im.IChatMessage.Type type,
+ String subject, String body) throws ECFException {
+ if (toID == null)
+ throw new ECFException("receiver cannot be null");
+ try {
+ presenceHelper.getConnectionOrThrowIfNull().sendMessage(toID,
+ threadID, XMPPChatManager.this.createMessageType(type),
+ subject, body);
+ } catch (IOException e) {
+ throw new ECFException("sendChatMessage exception", e);
+ }
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ecf.presence.im.IChatMessageSender#sendChatMessage(org.eclipse.ecf.core.identity.ID, java.lang.String)
+ */
+ public void sendChatMessage(ID toID, String body) throws ECFException {
+ sendChatMessage(toID, null, IChatMessage.Type.CHAT, null, body);
+ }
+
+ };
+
+
+ protected ITypingMessageSender typingMessageSender = new ITypingMessageSender() {
+
+ public void sendTypingMessage(ID toID, boolean isTyping, String body)
throws ECFException {
- XMPPChatManager.this.sendChatMessage(toID, message);
+ if (toID == null)
+ throw new ECFException("receiver cannot be null");
+ try {
+ presenceHelper.sendTypingMessage(toID, isTyping, body);
+ } catch (IOException e) {
+ throw new ECFException("sendChatMessage exception", e);
+ }
}
};
@@ -49,26 +88,6 @@ public class XMPPChatManager implements IChatManager {
this.presenceHelper = presenceHelper;
}
- /**
- * @param toID
- * @param message
- */
- protected void sendChatMessage(ID toID, IChatMessage message)
- throws ECFException {
- if (toID == null)
- throw new ECFException("receiver cannot be null");
- if (message == null)
- throw new ECFException("message cannot be null");
- try {
- presenceHelper.getConnectionOrThrowIfNull().sendMessage(toID,
- message.getThreadID(),
- createMessageType(message.getType()), message.getSubject(),
- message.getBody());
- } catch (IOException e) {
- throw new ECFException("sendChatMessage exception", e);
- }
- }
-
protected IChatMessage.Type createMessageType(Message.Type type) {
if (type == null)
return IChatMessage.Type.CHAT;
@@ -94,9 +113,9 @@ public class XMPPChatManager implements IChatManager {
/*
* (non-Javadoc)
*
- * @see org.eclipse.ecf.presence.im.IChatManager#addChatMessageListener(org.eclipse.ecf.presence.im.IChatMessageListener)
+ * @see org.eclipse.ecf.presence.im.IChatManager#addChatMessageListener(org.eclipse.ecf.presence.im.IIMMessageListener)
*/
- public void addChatMessageListener(IChatMessageListener listener) {
+ public void addMessageListener(IIMMessageListener listener) {
messageListeners.add(listener);
}
@@ -112,23 +131,36 @@ public class XMPPChatManager implements IChatManager {
/*
* (non-Javadoc)
*
- * @see org.eclipse.ecf.presence.im.IChatManager#removeChatMessageListener(org.eclipse.ecf.presence.im.IChatMessageListener)
+ * @see org.eclipse.ecf.presence.im.IChatManager#removeChatMessageListener(org.eclipse.ecf.presence.im.IIMMessageListener)
*/
- public void removeChatMessageListener(IChatMessageListener listener) {
+ public void removeMessageListener(IIMMessageListener listener) {
messageListeners.remove(listener);
}
- private void fireChatMessageEvent(IChatMessageEvent event) {
+ private void fireMessageEvent(IIMMessageEvent event) {
for (Iterator i = messageListeners.iterator(); i.hasNext();) {
- IChatMessageListener l = (IChatMessageListener) i.next();
- l.handleChatMessageEvent(event);
+ IIMMessageListener l = (IIMMessageListener) i.next();
+ l.handleMessageEvent(event);
}
}
protected void fireChatMessage(ID fromID, ID threadID, Type type,
String subject, String body) {
- fireChatMessageEvent(new ChatMessageEvent(fromID, new ChatMessage(
- threadID, createMessageType(type), subject, body)));
+ fireMessageEvent(new ChatMessageEvent(fromID, new ChatMessage(threadID,
+ createMessageType(type), subject, body)));
+ }
+
+ protected void fireTypingMessage(ID fromID, ITypingMessage typingMessage) {
+ fireMessageEvent(new TypingMessageEvent(fromID, typingMessage));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ecf.presence.im.IChatManager#getTypingMessageSender()
+ */
+ public ITypingMessageSender getTypingMessageSender() {
+ return typingMessageSender;
}
}
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPContainer.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPContainer.java
index b0d5366dd..25eaf02e1 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPContainer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPContainer.java
@@ -63,6 +63,7 @@ import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.packet.MUCUser;
+import org.jivesoftware.smackx.packet.VCardTempXUpdateExtension;
public class XMPPContainer extends ClientSOContainer {
@@ -167,7 +168,7 @@ public class XMPPContainer extends ClientSOContainer {
// XXX this is being used to distinguish between this, more modern
// version of
// IPresenceContainerAdapter implementation and the older one.
- // This should be removed
+ // This should be eventually removed
if (clazz.equals(IPresenceContainerAdapter.class))
return this;
else
@@ -403,11 +404,15 @@ public class XMPPContainer extends ClientSOContainer {
}
protected boolean handleAsExtension(Packet packet) {
- // XXX this is where the xmpp extension mechanism support needs to be
- // added
+ // XXX this is where extension mechanism needs to be added
Iterator i = packet.getExtensions();
for (; i.hasNext();) {
Object extension = i.next();
+ if (extension instanceof VCardTempXUpdateExtension) {
+ VCardTempXUpdateExtension photoExtension = (VCardTempXUpdateExtension) extension;
+ deliverEvent(new PresenceEvent((Presence) packet, photoExtension.getPhotoDataAsBytes()));
+ return true;
+ }
trace("XMPPContainer.handleAsExtension(ext=" + extension
+ ",packet=" + packet.toXML() + ")");
if (packet instanceof Presence && extension instanceof MUCUser) {
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPContainerPresenceHelper.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPContainerPresenceHelper.java
index 15318fcca..56181b770 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPContainerPresenceHelper.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/XMPPContainerPresenceHelper.java
@@ -39,6 +39,8 @@ import org.eclipse.ecf.presence.IMessageSender;
import org.eclipse.ecf.presence.IPresence;
import org.eclipse.ecf.presence.IPresenceSender;
import org.eclipse.ecf.presence.im.IChatManager;
+import org.eclipse.ecf.presence.im.ITypingMessage;
+import org.eclipse.ecf.presence.im.TypingMessage;
import org.eclipse.ecf.presence.roster.AbstractRosterManager;
import org.eclipse.ecf.presence.roster.IRosterGroup;
import org.eclipse.ecf.presence.roster.IRosterItem;
@@ -98,7 +100,7 @@ public class XMPPContainerPresenceHelper implements ISharedObject {
} else if (event instanceof PresenceEvent) {
handlePresenceEvent((PresenceEvent) event);
} else if (event instanceof ISharedObjectMessageEvent) {
- fireSharedObjectMessageListeners((ISharedObjectMessageEvent) event);
+ handleSharedObjectMessageEvent((ISharedObjectMessageEvent) event);
} else {
trace("unhandled event=" + event);
}
@@ -276,13 +278,23 @@ public class XMPPContainerPresenceHelper implements ISharedObject {
sharedObjectMessageListeners.add(listener);
}
- protected void fireSharedObjectMessageListeners(
- ISharedObjectMessageEvent event) {
+ protected void sendTypingMessage(ID toID, boolean isTyping, String body) throws IOException {
+ getContext().sendMessage(toID, new TypingMessage(rosterManager.getRoster().getUser().getID(),isTyping,body));
+ }
+
+ protected void handleSharedObjectMessageEvent(ISharedObjectMessageEvent event) {
for (Iterator i = sharedObjectMessageListeners.iterator(); i.hasNext();) {
ISharedObjectMessageListener l = (ISharedObjectMessageListener) i
.next();
l.handleSharedObjectMessage(event);
}
+
+ Object data = event.getData();
+ if (data instanceof ITypingMessage) {
+ ITypingMessage tmess = (ITypingMessage) data;
+ chatManager.fireTypingMessage(tmess.getFromID(), tmess);
+ }
+
}
protected void removeSharedObjectMessageListener(
@@ -378,7 +390,7 @@ public class XMPPContainerPresenceHelper implements ISharedObject {
protected void handlePresenceEvent(PresenceEvent evt) {
Presence xmppPresence = evt.getPresence();
String from = xmppPresence.getFrom();
- IPresence newPresence = createIPresence(xmppPresence);
+ IPresence newPresence = createIPresence(xmppPresence, evt.getPhotoData());
XMPPID fromID = createIDFromName(from);
if (newPresence.getType().equals(IPresence.Type.SUBSCRIBE)
|| newPresence.getType().equals(IPresence.Type.UNSUBSCRIBE)
@@ -468,11 +480,11 @@ public class XMPPContainerPresenceHelper implements ISharedObject {
return IMessageListener.Type.NORMAL;
}
- protected IPresence createIPresence(Presence xmppPresence) {
+ protected IPresence createIPresence(Presence xmppPresence, byte [] photoData) {
String status = xmppPresence.getStatus();
IPresence newPresence = new org.eclipse.ecf.presence.Presence(
createIPresenceType(xmppPresence), status,
- createIPresenceMode(xmppPresence));
+ createIPresenceMode(xmppPresence), null, photoData);
return newPresence;
}
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPChatManager.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPChatManager.java
index 5f49e1997..e92cd2d33 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPChatManager.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPChatManager.java
@@ -21,9 +21,12 @@ import org.eclipse.ecf.presence.im.ChatMessage;
import org.eclipse.ecf.presence.im.ChatMessageEvent;
import org.eclipse.ecf.presence.im.IChatManager;
import org.eclipse.ecf.presence.im.IChatMessage;
-import org.eclipse.ecf.presence.im.IChatMessageEvent;
-import org.eclipse.ecf.presence.im.IChatMessageListener;
import org.eclipse.ecf.presence.im.IChatMessageSender;
+import org.eclipse.ecf.presence.im.IIMMessageEvent;
+import org.eclipse.ecf.presence.im.IIMMessageListener;
+import org.eclipse.ecf.presence.im.ITypingMessage;
+import org.eclipse.ecf.presence.im.ITypingMessageSender;
+import org.eclipse.ecf.presence.im.TypingMessageEvent;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Message.Type;
@@ -38,9 +41,44 @@ public class XMPPChatManager implements IChatManager {
protected IChatMessageSender chatMessageSender = new IChatMessageSender() {
- public void sendChatMessage(ID toID, IChatMessage message)
+ /* (non-Javadoc)
+ * @see org.eclipse.ecf.presence.im.IChatMessageSender#sendChatMessage(org.eclipse.ecf.core.identity.ID, org.eclipse.ecf.core.identity.ID, org.eclipse.ecf.presence.im.IChatMessage.Type, java.lang.String, java.lang.String)
+ */
+ public void sendChatMessage(ID toID, ID threadID,
+ org.eclipse.ecf.presence.im.IChatMessage.Type type,
+ String subject, String body) throws ECFException {
+ if (toID == null)
+ throw new ECFException("receiver cannot be null");
+ try {
+ presenceHelper.getConnectionOrThrowIfNull().sendMessage(toID,
+ threadID, XMPPChatManager.this.createMessageType(type),
+ subject, body);
+ } catch (IOException e) {
+ throw new ECFException("sendChatMessage exception", e);
+ }
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ecf.presence.im.IChatMessageSender#sendChatMessage(org.eclipse.ecf.core.identity.ID, java.lang.String)
+ */
+ public void sendChatMessage(ID toID, String body) throws ECFException {
+ sendChatMessage(toID, null, IChatMessage.Type.CHAT, null, body);
+ }
+
+ };
+
+ protected ITypingMessageSender typingMessageSender = new ITypingMessageSender() {
+
+ public void sendTypingMessage(ID toID, boolean isTyping, String body)
throws ECFException {
- XMPPChatManager.this.sendChatMessage(toID, message);
+ if (toID == null)
+ throw new ECFException("receiver cannot be null");
+ try {
+ presenceHelper.sendTypingMessage(toID, isTyping, body);
+ } catch (IOException e) {
+ throw new ECFException("sendChatMessage exception", e);
+ }
}
};
@@ -49,26 +87,6 @@ public class XMPPChatManager implements IChatManager {
this.presenceHelper = presenceHelper;
}
- /**
- * @param toID
- * @param message
- */
- protected void sendChatMessage(ID toID, IChatMessage message)
- throws ECFException {
- if (toID == null)
- throw new ECFException("receiver cannot be null");
- if (message == null)
- throw new ECFException("message cannot be null");
- try {
- presenceHelper.getConnectionOrThrowIfNull().sendMessage(toID,
- message.getThreadID(),
- createMessageType(message.getType()), message.getSubject(),
- message.getBody());
- } catch (IOException e) {
- throw new ECFException("sendChatMessage exception", e);
- }
- }
-
protected IChatMessage.Type createMessageType(Message.Type type) {
if (type == null)
return IChatMessage.Type.CHAT;
@@ -94,9 +112,9 @@ public class XMPPChatManager implements IChatManager {
/*
* (non-Javadoc)
*
- * @see org.eclipse.ecf.presence.im.IChatManager#addChatMessageListener(org.eclipse.ecf.presence.im.IChatMessageListener)
+ * @see org.eclipse.ecf.presence.im.IChatManager#addChatMessageListener(org.eclipse.ecf.presence.im.IIMMessageListener)
*/
- public void addChatMessageListener(IChatMessageListener listener) {
+ public void addMessageListener(IIMMessageListener listener) {
messageListeners.add(listener);
}
@@ -112,23 +130,36 @@ public class XMPPChatManager implements IChatManager {
/*
* (non-Javadoc)
*
- * @see org.eclipse.ecf.presence.im.IChatManager#removeChatMessageListener(org.eclipse.ecf.presence.im.IChatMessageListener)
+ * @see org.eclipse.ecf.presence.im.IChatManager#removeChatMessageListener(org.eclipse.ecf.presence.im.IIMMessageListener)
*/
- public void removeChatMessageListener(IChatMessageListener listener) {
+ public void removeMessageListener(IIMMessageListener listener) {
messageListeners.remove(listener);
}
- private void fireChatMessageEvent(IChatMessageEvent event) {
+ private void fireMessageEvent(IIMMessageEvent event) {
for (Iterator i = messageListeners.iterator(); i.hasNext();) {
- IChatMessageListener l = (IChatMessageListener) i.next();
- l.handleChatMessageEvent(event);
+ IIMMessageListener l = (IIMMessageListener) i.next();
+ l.handleMessageEvent(event);
}
}
protected void fireChatMessage(ID fromID, ID threadID, Type type,
String subject, String body) {
- fireChatMessageEvent(new ChatMessageEvent(fromID, new ChatMessage(
- threadID, createMessageType(type), subject, body)));
+ fireMessageEvent(new ChatMessageEvent(fromID, new ChatMessage(threadID,
+ createMessageType(type), subject, body)));
+ }
+
+ protected void fireTypingMessage(ID fromID, ITypingMessage typingMessage) {
+ fireMessageEvent(new TypingMessageEvent(fromID, typingMessage));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ecf.presence.im.IChatManager#getTypingMessageSender()
+ */
+ public ITypingMessageSender getTypingMessageSender() {
+ return typingMessageSender;
}
}
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPClientSOContainer.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPClientSOContainer.java
index 09cae3473..52ff69e44 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPClientSOContainer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPClientSOContainer.java
@@ -94,6 +94,7 @@ import org.jivesoftware.smackx.muc.InvitationListener;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.muc.RoomInfo;
import org.jivesoftware.smackx.packet.MUCUser;
+import org.jivesoftware.smackx.packet.VCardTempXUpdateExtension;
public class XMPPClientSOContainer extends ClientSOContainer implements
IOutgoingFileTransferContainerAdapter {
@@ -126,7 +127,7 @@ public class XMPPClientSOContainer extends ClientSOContainer implements
}
protected void trace(String msg) {
-
+ System.out.println(msg);
}
protected void dumpStack(String msg, Throwable t) {
@@ -334,6 +335,11 @@ public class XMPPClientSOContainer extends ClientSOContainer implements
Iterator i = packet.getExtensions();
for (; i.hasNext();) {
Object extension = i.next();
+ if (extension instanceof VCardTempXUpdateExtension) {
+ VCardTempXUpdateExtension photoExtension = (VCardTempXUpdateExtension) extension;
+ deliverEvent(new PresenceEvent((Presence) packet, photoExtension.getPhotoDataAsBytes()));
+ return true;
+ }
trace("XMPPContainer.handleAsExtension(ext=" + extension
+ ",packet=" + packet.toXML() + ")");
if (packet instanceof Presence && extension instanceof MUCUser) {
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPPresenceSharedObject.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPPresenceSharedObject.java
index 950352b42..b35a06818 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPPresenceSharedObject.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/deprecated/XMPPPresenceSharedObject.java
@@ -34,7 +34,6 @@ import org.eclipse.ecf.core.user.IUser;
import org.eclipse.ecf.core.user.User;
import org.eclipse.ecf.core.util.ECFException;
import org.eclipse.ecf.core.util.Event;
-import org.eclipse.ecf.core.util.Trace;
import org.eclipse.ecf.internal.provider.xmpp.events.IQEvent;
import org.eclipse.ecf.internal.provider.xmpp.events.InvitationReceivedEvent;
import org.eclipse.ecf.internal.provider.xmpp.events.MessageEvent;
@@ -52,6 +51,8 @@ import org.eclipse.ecf.presence.IRosterGroup;
import org.eclipse.ecf.presence.IRosterSubscriptionListener;
import org.eclipse.ecf.presence.chatroom.IChatRoomInvitationListener;
import org.eclipse.ecf.presence.im.IChatManager;
+import org.eclipse.ecf.presence.im.ITypingMessage;
+import org.eclipse.ecf.presence.im.TypingMessage;
import org.eclipse.ecf.presence.roster.AbstractRosterManager;
import org.eclipse.ecf.presence.roster.IRosterItem;
import org.eclipse.ecf.presence.roster.IRosterManager;
@@ -250,12 +251,23 @@ public class XMPPPresenceSharedObject implements ISharedObject, IAccountManager
}
}
- protected void fireSharedObjectMessage(ISharedObjectMessageEvent event) {
+ protected void sendTypingMessage(ID toID, boolean isTyping, String body) throws IOException {
+ getContext().sendMessage(toID, new TypingMessage(rosterManager.getRoster().getUser().getID(),isTyping,body));
+ }
+
+ protected void handleSharedObjectMessageEvent(ISharedObjectMessageEvent event) {
for (Iterator i = sharedObjectMessageListeners.iterator(); i.hasNext();) {
ISharedObjectMessageListener l = (ISharedObjectMessageListener) i
.next();
l.handleSharedObjectMessage(event);
}
+
+ Object data = event.getData();
+ if (data instanceof ITypingMessage) {
+ ITypingMessage tmess = (ITypingMessage) data;
+ chatManager.fireTypingMessage(tmess.getFromID(), tmess);
+ }
+
}
/*
@@ -314,7 +326,7 @@ public class XMPPPresenceSharedObject implements ISharedObject, IAccountManager
} else if (event instanceof IContainerDisconnectedEvent) {
handleContainerDepartedEvent((IContainerDisconnectedEvent) event);
} else if (event instanceof ISharedObjectMessageEvent) {
- fireSharedObjectMessage((ISharedObjectMessageEvent) event);
+ handleSharedObjectMessageEvent((ISharedObjectMessageEvent) event);
} else {
debug("unrecognized event " + event);
}
@@ -432,7 +444,7 @@ public class XMPPPresenceSharedObject implements ISharedObject, IAccountManager
protected void handlePresenceEvent(PresenceEvent evt) {
Presence xmppPresence = evt.getPresence();
String from = canonicalizePresenceFrom(xmppPresence.getFrom());
- IPresence newPresence = createIPresence(xmppPresence);
+ IPresence newPresence = createIPresence(xmppPresence, evt.getPhotoData());
ID fromID = createIDFromName(from);
if (newPresence.getType().equals(IPresence.Type.SUBSCRIBE)
|| newPresence.getType().equals(IPresence.Type.UNSUBSCRIBE)
@@ -506,11 +518,11 @@ public class XMPPPresenceSharedObject implements ISharedObject, IAccountManager
return IMessageListener.Type.NORMAL;
}
- protected IPresence createIPresence(Presence xmppPresence) {
+ protected IPresence createIPresence(Presence xmppPresence, byte [] photoData) {
String status = xmppPresence.getStatus();
IPresence newPresence = new org.eclipse.ecf.presence.Presence(
createIPresenceType(xmppPresence), status,
- createIPresenceMode(xmppPresence));
+ createIPresenceMode(xmppPresence), null, photoData);
return newPresence;
}
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/events/PresenceEvent.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/events/PresenceEvent.java
index d0d6a0c72..d8ae21ac6 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/events/PresenceEvent.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/events/PresenceEvent.java
@@ -12,7 +12,6 @@ import org.eclipse.ecf.core.util.Event;
import org.jivesoftware.smack.packet.Presence;
/**
- * @author slewis
*
*/
public class PresenceEvent implements Event {
@@ -20,6 +19,13 @@ public class PresenceEvent implements Event {
private static final long serialVersionUID = -8207158000504357229L;
protected Presence presence = null;
+ protected byte [] photoData;
+
+ public PresenceEvent(Presence presence, byte [] photoData) {
+ this.presence = presence;
+ this.photoData = photoData;
+ }
+
public PresenceEvent(Presence presence) {
this.presence = presence;
}
@@ -27,6 +33,11 @@ public class PresenceEvent implements Event {
public Presence getPresence() {
return presence;
}
+
+ public byte [] getPhotoData() {
+ return photoData;
+ }
+
public String toString() {
StringBuffer buf = new StringBuffer("PresenceEvent[");
buf.append(presence).append(";").append((presence==null)?"":presence.toXML()).append("]");
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/identity/XMPPID.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/identity/XMPPID.java
index 2e0a6b712..097332423 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/identity/XMPPID.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/identity/XMPPID.java
@@ -78,7 +78,7 @@ public class XMPPID extends BaseID implements IChatID {
}
protected int namespaceHashCode() {
- return uri.hashCode();
+ return getUsernameAtHost().hashCode();
}
public String getUsername() {
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/smack/ECFConnection.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/smack/ECFConnection.java
index b60ca87a1..7dfd0c3e8 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/smack/ECFConnection.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/internal/provider/xmpp/smack/ECFConnection.java
@@ -308,8 +308,7 @@ public class ECFConnection implements ISynchAsynchConnection {
public void sendMessage(ID target, ID thread, Type type, String subject, String body) throws IOException {
if (target == null)
throw new IOException("target cannot be null");
- if (body == null)
- throw new IOException("message cannot be null");
+ if (body == null) body = "";
debug("sendMessage(" + target + "," + body + ")");
Message aMsg = new Message();
aMsg.setBody(body);

Back to the top