Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorslewis2006-05-27 23:32:22 +0000
committerslewis2006-05-27 23:32:22 +0000
commit95fc727e464259c2c2dca076a88d667fcf65f3bb (patch)
treee4f882d9b7e174a973129743dfdffe7155724a53
parent758a7d84ff336dd00c2146592bcbc03b08385c3c (diff)
downloadorg.eclipse.ecf-95fc727e464259c2c2dca076a88d667fcf65f3bb.tar.gz
org.eclipse.ecf-95fc727e464259c2c2dca076a88d667fcf65f3bb.tar.xz
org.eclipse.ecf-95fc727e464259c2c2dca076a88d667fcf65f3bb.zip
Fixes for UI nits and refactoring of XMPP container code
-rw-r--r--framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java102
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPClientSOContainer.java184
-rw-r--r--providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPPresenceSharedObject.java4
3 files changed, 94 insertions, 196 deletions
diff --git a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java
index 878a1735a..b29c6905e 100644
--- a/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java
+++ b/framework/bundles/org.eclipse.ecf.ui/src/org/eclipse/ecf/ui/views/RosterView.java
@@ -447,51 +447,12 @@ public class RosterView extends ViewPart implements IChatRoomViewCloseListener {
}
return null;
}
- public void addEntry(TreeParent parent, IRosterEntry entry) {
- TreeBuddy tb = findBuddy(parent, entry);
- TreeBuddy newBuddy = createBuddy(tb, entry);
- // If buddy found already, then remove old and add new
- if (tb != null) {
- TreeParent tbparent = tb.getParent();
- tbparent.removeChild(tb);
- tbparent.addChild(newBuddy);
- }
- TreeParent buddyParent = newBuddy.getParent();
- if (buddyParent == null) {
- // Existing group not found, so see if entry has a group
- // associated with it
- Iterator groups = entry.getGroups();
- if (groups.hasNext()) {
- // There's a group associated with entry...so add with group
- // name
- String groupName = ((IRosterGroup) groups.next()).getName();
- TreeGroup oldgrp = findGroup(parent, groupName);
- if (oldgrp != null) {
- oldgrp.addChild(newBuddy);
- } else {
- TreeGroup newgrp = new TreeGroup(groupName, entry
- .getServiceID());
- newgrp.addChild(newBuddy);
- parent.addChild(newgrp);
- }
- } else {
- TreeGroup tg = findGroup(parent, UNFILED_GROUP_NAME);
- if (tg == null) {
- tg = new TreeGroup(UNFILED_GROUP_NAME, entry
- .getServiceID());
- tg.addChild(newBuddy);
- parent.addChild(tg);
- } else {
- tg.addChild(newBuddy);
- }
- }
- }
- }
public void replaceEntry(TreeParent parent, IRosterEntry entry) {
TreeBuddy tb = findBuddy(parent, entry);
+ TreeParent tp = null;
// If entry already in tree, remove it from current position
if (tb != null) {
- TreeParent tp = (TreeParent) tb.getParent();
+ tp = (TreeParent) tb.getParent();
if (tp != null) {
tp.removeChild(tb);
if (tp.getName().equals(UNFILED_GROUP_NAME)) {
@@ -504,31 +465,41 @@ public class RosterView extends ViewPart implements IChatRoomViewCloseListener {
}
// Create new buddy
TreeBuddy newBuddy = createBuddy(tb, entry);
- Iterator groups = entry.getGroups();
- if (groups.hasNext()) {
- // There's a group associated with entry...so add with group
- // name
- String groupName = ((IRosterGroup) groups.next()).getName();
- TreeGroup oldgrp = findGroup(parent, groupName);
- if (oldgrp != null) {
- oldgrp.addChild(newBuddy);
- } else {
- TreeGroup newgrp = new TreeGroup(groupName, entry
- .getServiceID());
- newgrp.addChild(newBuddy);
- parent.addChild(newgrp);
- }
+ // If it's a replacement for an existing buddy with group (tg), then simply add as child
+ if (tp != null) {
+ tp.addChild(newBuddy);
} else {
- TreeGroup tg = findGroup(parent, UNFILED_GROUP_NAME);
- if (tg == null) {
- tg = new TreeGroup(UNFILED_GROUP_NAME, entry.getServiceID());
- tg.addChild(newBuddy);
- parent.addChild(tg);
+ // The parent group is not there
+ Iterator groups = entry.getGroups();
+ // If the entry has any group, then take first one
+ if (groups.hasNext()) {
+ // There's a group associated with entry
+ String groupName = ((IRosterGroup) groups.next()).getName();
+ // Check to see if group already there
+ TreeGroup oldgrp = findGroup(parent, groupName);
+ // If so, simply add new buddy structure to existing group
+ if (oldgrp != null) oldgrp.addChild(newBuddy);
+ else {
+ // There is a group name, but check to make sure it's valid
+ if (groupName.equals("")) groupName = UNFILED_GROUP_NAME;
+ addBuddyWithGroupName(parent, entry.getServiceID(), groupName, newBuddy);
+ }
} else {
- tg.addChild(newBuddy);
+ // No group name, so we add under UNFILED_GROUP_NAME
+ addBuddyWithGroupName(parent, entry.getServiceID(), UNFILED_GROUP_NAME, newBuddy);
}
}
}
+ protected void addBuddyWithGroupName(TreeParent parent, ID serviceID, String groupName, TreeBuddy newBuddy) {
+ TreeGroup tg = findGroup(parent, groupName);
+ if (tg == null) {
+ tg = new TreeGroup(groupName, serviceID);
+ tg.addChild(newBuddy);
+ parent.addChild(tg);
+ } else {
+ tg.addChild(newBuddy);
+ }
+ }
public void addAccount(ID accountID, String name) {
TreeGroup oldgrp = findGroup(root, accountID);
if (oldgrp != null) {
@@ -573,13 +544,6 @@ public class RosterView extends ViewPart implements IChatRoomViewCloseListener {
return;
removeGroup(root, name);
}
- public void addEntry(IRosterEntry entry) {
- if (entry == null)
- return;
- ID svcID = entry.getServiceID();
- TreeGroup tg = findAccount(svcID.getName());
- addEntry(tg, entry);
- }
public void replaceEntry(IRosterEntry entry) {
if (entry == null)
return;
@@ -1240,7 +1204,7 @@ public class RosterView extends ViewPart implements IChatRoomViewCloseListener {
|| entry.getInterestType() == IRosterEntry.InterestType.NONE) {
vcp.removeRosterEntry(entry.getUserID());
} else
- vcp.addEntry(entry);
+ vcp.replaceEntry(entry);
refreshView();
}
}
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPClientSOContainer.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPClientSOContainer.java
index 3d160858c..126ed9be2 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPClientSOContainer.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPClientSOContainer.java
@@ -35,6 +35,7 @@ import org.eclipse.ecf.core.identity.Namespace;
import org.eclipse.ecf.core.security.IConnectContext;
import org.eclipse.ecf.core.security.ObjectCallback;
import org.eclipse.ecf.core.util.ECFException;
+import org.eclipse.ecf.core.util.Event;
import org.eclipse.ecf.core.util.IQueueEnqueue;
import org.eclipse.ecf.presence.IAccountManager;
import org.eclipse.ecf.presence.IMessageListener;
@@ -74,6 +75,7 @@ import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smackx.muc.HostedRoom;
import org.jivesoftware.smackx.muc.MultiUserChat;
import org.jivesoftware.smackx.muc.RoomInfo;
+import org.jivesoftware.smackx.packet.MUCUser;
public class XMPPClientSOContainer extends ClientSOContainer {
@@ -81,7 +83,6 @@ public class XMPPClientSOContainer extends ClientSOContainer {
Trace trace = Trace.create("XMPPClientSOContainer");
public static final String NAMESPACE_IDENTIFIER = XmppPlugin.getDefault().getNamespaceIdentifier();
-
public static final String XMPP_SHARED_OBJECT_ID = XMPPClientSOContainer.class
.getName()
+ ".xmpphandler";
@@ -110,20 +111,21 @@ public class XMPPClientSOContainer extends ClientSOContainer {
trace.dumpStack(t,msg);
}
}
+ protected XMPPClientSOContainer(SOContainerConfig config, int keepAlive) throws Exception {
+ super(config);
+ this.keepAlive = keepAlive;
+ this.sharedObjectID = IDFactory.getDefault().createStringID(XMPP_SHARED_OBJECT_ID);
+ sharedObject = new XMPPPresenceSharedObject();
+ }
public XMPPClientSOContainer() throws Exception {
this(DEFAULT_KEEPALIVE);
}
-
public XMPPClientSOContainer(int ka) throws Exception {
- super(new SOContainerConfig(IDFactory.getDefault().createGUID()));
- keepAlive = ka;
- initializeSharedObject();
+ this(new SOContainerConfig(IDFactory.getDefault().createGUID()),ka);
}
public XMPPClientSOContainer(String userhost, int ka) throws Exception {
- super(new SOContainerConfig(IDFactory.getDefault().createStringID(userhost)));
- keepAlive = ka;
- initializeSharedObject();
+ this(new SOContainerConfig(IDFactory.getDefault().createStringID(userhost)),ka);
}
protected void disposeChats() {
for(Iterator i=chats.iterator(); i.hasNext(); ) {
@@ -175,10 +177,6 @@ public class XMPPClientSOContainer extends ClientSOContainer {
new HashMap());
}
- protected void cleanUpConnectFail() {
- dispose();
- }
-
public void dispose() {
if (sharedObject != null) {
getSharedObjectManager().removeSharedObject(sharedObjectID);
@@ -238,121 +236,44 @@ public class XMPPClientSOContainer extends ClientSOContainer {
} else
return null;
}
+
public Namespace getConnectNamespace() {
return IDFactory.getDefault().getNamespaceByName(XmppPlugin.getDefault().getNamespaceIdentifier());
}
- protected void handleChatMessageWithExtension(Message mess) throws IOException {
- // XXX Log this properly or handle with new semantics for handling extensions
- Iterator i = mess.getExtensions();
- if (i.hasNext()) {
- for(; i.hasNext(); ) {
- Object extension = i.next();
- trace("XMPPClientSOContainer.handleChatMessageWithExtension("+mess+") presence extension: "+extension+",from="+mess.getFrom()+",to="+mess.getTo());
- }
-
- }
- }
- protected void handleChatMessage(Message mess) throws IOException {
+
+ protected void deliverEvent(Event evt) {
SOWrapper wrap = getSharedObjectWrapper(sharedObjectID);
- /* XXX
- if (mess.getExtensions().hasNext()) {
- handleChatMessageWithExtension(mess);
- } else {
- */
- if (wrap != null) {
- wrap.deliverEvent(new MessageEvent(mess));
- }
- /*
- }
- */
- }
-
- protected void handleContainerMessage(ContainerMessage mess)
- throws IOException {
- if (mess == null) {
- debug("got null container message...ignoring");
- return;
- }
- IChatRoomContainer chat = findChat(mess.getToContainerID());
- if (chat != null && chat instanceof XMPPGroupChatSOContainer) {
- XMPPGroupChatSOContainer cont = (XMPPGroupChatSOContainer) chat;
- cont.handleContainerMessage(mess);
- return;
- }
- Object data = mess.getData();
- if (data instanceof ContainerMessage.CreateMessage) {
- handleCreateMessage(mess);
- } else if (data instanceof ContainerMessage.CreateResponseMessage) {
- handleCreateResponseMessage(mess);
- } else if (data instanceof ContainerMessage.SharedObjectMessage) {
- handleSharedObjectMessage(mess);
- } else if (data instanceof ContainerMessage.SharedObjectDisposeMessage) {
- handleSharedObjectDisposeMessage(mess);
- } else {
- debug("got unrecognized container message...ignoring: " + mess);
- }
- }
-
- protected void handleIQMessageWithExtension(IQ mess) throws IOException {
- // XXX Log this properly or handle with new semantics for handling extensions
- Iterator i = mess.getExtensions();
- if (i.hasNext()) {
- for(; i.hasNext(); ) {
- Object extension = i.next();
- trace("XMPPClientSOContainer.handleIQMessageWithExtension("+mess+") presence extension: "+extension+",from="+mess.getFrom()+",to="+mess.getTo());
- }
- }
+ if (wrap != null) wrap.deliverEvent(evt);
+ else trace("deliverEvent("+evt+") wrapper object is unavailable");
}
- protected void handleIQMessage(IQ mess) throws IOException {
- SOWrapper wrap = getSharedObjectWrapper(sharedObjectID);
- if (mess.getExtensions().hasNext()) {
- handleIQMessageWithExtension(mess);
- } else {
- if (wrap != null) {
- wrap.deliverEvent(new IQEvent(mess));
+
+ protected void handleXMPPMessage(Packet aPacket) throws IOException {
+ if (!handleAsExtension(aPacket)) {
+ if (aPacket instanceof IQ) {
+ deliverEvent(new IQEvent((IQ) aPacket));
+ } else if (aPacket instanceof Message) {
+ deliverEvent(new MessageEvent((Message) aPacket));
+ } else if (aPacket instanceof Presence) {
+ deliverEvent(new PresenceEvent((Presence) aPacket));
+ } else {
+ // unexpected message
+ debug("got unexpected packet " + aPacket.toXML());
}
}
}
- protected void handlePresenceMessageWithExtension(Presence mess) throws IOException {
- // XXX Log this properly or handle with new semantics for handling extensions
- Iterator i = mess.getExtensions();
- if (i.hasNext()) {
- for(; i.hasNext(); ) {
- Object extension = i.next();
- trace("XMPPClientSOContainer.handlePresenceMessageWithExtension("+mess+") presence extension: "+extension+",from="+mess.getFrom()+",to="+mess.getTo());
- }
-
+ protected boolean handleAsExtension(Packet packet) {
+ // XXX this is where extension mechanism needs to be added
+ Iterator i = packet.getExtensions();
+ for(; i.hasNext(); ) {
+ Object extension = i.next();
+ trace("XMPPClientSOContainer.handleAsExtension(ext="+extension+",packet="+packet.toXML()+")");
+ if (packet instanceof Presence && extension instanceof MUCUser) {
+ trace("XMPPClientSOContainer.handleAsExtension: received presence for MUCUser");
+ return true;
+ }
}
-
- }
- protected void handlePresenceMessage(Presence mess) throws IOException {
- SOWrapper wrap = getSharedObjectWrapper(sharedObjectID);
- if (mess.getExtensions().hasNext()) {
- handlePresenceMessageWithExtension(mess);
- } else {
- if (wrap != null) {
- wrap.deliverEvent(new PresenceEvent(mess));
- }
- }
- }
-
- protected void handleXMPPMessage(Packet aPacket) throws IOException {
- if (aPacket instanceof IQ) {
- handleIQMessage((IQ) aPacket);
- } else if (aPacket instanceof Message) {
- handleChatMessage((Message) aPacket);
- } else if (aPacket instanceof Presence) {
- handlePresenceMessage((Presence) aPacket);
- } else {
- // unexpected message
- debug("got unexpected packet " + aPacket);
- }
- }
-
- protected void initializeSharedObject() throws Exception {
- sharedObjectID = IDFactory.getDefault().createStringID(XMPP_SHARED_OBJECT_ID);
- sharedObject = new XMPPPresenceSharedObject();
+ return false;
}
public void connect(ID remote, IConnectContext joinContext)
@@ -361,10 +282,10 @@ public class XMPPClientSOContainer extends ClientSOContainer {
addSharedObjectToContainer(remote);
super.connect(remote, joinContext);
} catch (ContainerConnectException e) {
- cleanUpConnectFail();
+ dispose();
throw e;
} catch (SharedObjectAddException e1) {
- cleanUpConnectFail();
+ dispose();
throw new ContainerConnectException(
"Exception adding shared object " + sharedObjectID, e1);
}
@@ -408,18 +329,35 @@ public class XMPPClientSOContainer extends ClientSOContainer {
protected void processAsynch(AsynchConnectionEvent e) {
try {
if (e instanceof ECFConnectionPacketEvent) {
- // It's a regular message...just print for now
- Packet chatMess = (Packet) e.getData();
- handleXMPPMessage(chatMess);
+ // It's a regular xmpp message
+ handleXMPPMessage((Packet) e.getData());
return;
} else if (e instanceof ECFConnectionObjectPacketEvent) {
+ // It's an ECF object message
ECFConnectionObjectPacketEvent evt = (ECFConnectionObjectPacketEvent) e;
Object obj = evt.getObjectValue();
// this should be a ContainerMessage
Object cm = deserializeContainerMessage((byte[]) obj);
if (cm == null) throw new IOException("deserialized object is null");
ContainerMessage contMessage = (ContainerMessage) cm;
- handleContainerMessage(contMessage);
+ IChatRoomContainer chat = findChat(contMessage.getToContainerID());
+ if (chat != null && chat instanceof XMPPGroupChatSOContainer) {
+ XMPPGroupChatSOContainer cont = (XMPPGroupChatSOContainer) chat;
+ cont.handleContainerMessage(contMessage);
+ return;
+ }
+ Object data = contMessage.getData();
+ if (data instanceof ContainerMessage.CreateMessage) {
+ handleCreateMessage(contMessage);
+ } else if (data instanceof ContainerMessage.CreateResponseMessage) {
+ handleCreateResponseMessage(contMessage);
+ } else if (data instanceof ContainerMessage.SharedObjectMessage) {
+ handleSharedObjectMessage(contMessage);
+ } else if (data instanceof ContainerMessage.SharedObjectDisposeMessage) {
+ handleSharedObjectDisposeMessage(contMessage);
+ } else {
+ debug("got unrecognized container message...ignoring: " + contMessage);
+ }
} else {
// Unexpected type...
debug("got unexpected event: " + e);
diff --git a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPPresenceSharedObject.java b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPPresenceSharedObject.java
index 85aa57603..625d494cf 100644
--- a/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPPresenceSharedObject.java
+++ b/providers/bundles/org.eclipse.ecf.provider.xmpp/src/org/eclipse/ecf/provider/xmpp/container/XMPPPresenceSharedObject.java
@@ -53,10 +53,6 @@ import org.jivesoftware.smack.packet.RosterPacket;
import org.jivesoftware.smack.packet.Presence.Mode;
import org.jivesoftware.smack.packet.Presence.Type;
-/**
- * @author slewis
- *
- */
public class XMPPPresenceSharedObject implements ISharedObject, IAccountManager {
public static Trace trace = Trace.create("xmpppresencesharedobject");

Back to the top