diff options
author | Tarun Gupta <tarun1995gupta@gmail.com> | 2015-07-04 21:17:12 (GMT) |
---|---|---|
committer | Nick Hudson <nick.hudson@isode.com> | 2015-07-22 14:24:27 (GMT) |
commit | 1f2c3add9971e8636013c384938456388b04ed79 (patch) | |
tree | 82fb7665833f8ab40f0f4f33524c8ccebcefbcca /test/com/isode | |
parent | a6e8d22d0686d860df735082c151f71157567e06 (diff) | |
download | stroke-1f2c3add9971e8636013c384938456388b04ed79.zip stroke-1f2c3add9971e8636013c384938456388b04ed79.tar.bz2 |
Update Roster functionalities.
Updates RosterPushResponder, XMPPRoster, XMPPRosterController.
Also adds XMPPRosterSignalHandler.
License:
This patch is BSD-licensed, see Documentation/Licenses/BSD-simplified.txt for details.
Test-Information:
Adds tests for XMPPRosterController, XMPPRosterImpl.
All tests passes.
Change-Id: Iee3530510342ea5977022237aaa6dfbffa390408
Diffstat (limited to 'test/com/isode')
3 files changed, 576 insertions, 0 deletions
diff --git a/test/com/isode/stroke/roster/XMPPRosterControllerTest.java b/test/com/isode/stroke/roster/XMPPRosterControllerTest.java new file mode 100644 index 0000000..a3f03b2 --- /dev/null +++ b/test/com/isode/stroke/roster/XMPPRosterControllerTest.java @@ -0,0 +1,356 @@ +/* + * Copyright (c) 2010-2011 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.roster; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertNotNull; +import org.junit.Before; +import org.junit.Test; +import com.isode.stroke.roster.XMPPRosterSignalHandler; +import com.isode.stroke.roster.XMPPRosterController; +import com.isode.stroke.roster.XMPPRosterImpl; +import com.isode.stroke.roster.RosterMemoryStorage; +import com.isode.stroke.elements.RosterItemPayload; +import com.isode.stroke.elements.Payload; +import com.isode.stroke.elements.RosterPayload; +import com.isode.stroke.elements.IQ; +import com.isode.stroke.client.DummyStanzaChannel; +import com.isode.stroke.queries.IQRouter; +import com.isode.stroke.jid.JID; +import java.util.Collection; +import java.util.ArrayList; + +public class XMPPRosterControllerTest { + + private DummyStanzaChannel channel_; + private IQRouter router_; + private XMPPRosterImpl xmppRoster_; + private XMPPRosterSignalHandler handler_; + private RosterMemoryStorage rosterStorage_; + private JID jid1_; + private JID jid2_; + private JID jid3_; + + @Before + public void setUp() { + channel_ = new DummyStanzaChannel(); + router_ = new IQRouter(channel_); + router_.setJID(new JID("me@bla.com")); + xmppRoster_ = new XMPPRosterImpl(); + handler_ = new XMPPRosterSignalHandler(xmppRoster_); + rosterStorage_ = new RosterMemoryStorage(); + jid1_ = new JID("foo@bar.com"); + jid2_ = new JID("alice@wonderland.lit"); + jid3_ = new JID("jane@austen.lit"); + } + + private XMPPRosterController createController() { + return new XMPPRosterController(router_, xmppRoster_, rosterStorage_); + } + + @Test + public void testGet_Response() { + XMPPRosterController testling = createController(); + + testling.requestRoster(); + RosterPayload payload = new RosterPayload(); + payload.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Both)); + payload.addItem(new RosterItemPayload(jid2_, "Alice", RosterItemPayload.Subscription.Both)); + channel_.onIQReceived.emit(IQ.createResult(new JID("foo@bar.com"), channel_.sentStanzas.get(0).getID(), payload)); + + assertEquals(2, handler_.getEventCount()); + assertNotNull(xmppRoster_.getItem(jid1_)); + assertNotNull(xmppRoster_.getItem(jid2_)); + } + + @Test + public void testGet_EmptyResponse() { + XMPPRosterController controller = new XMPPRosterController(router_, xmppRoster_, rosterStorage_); + + controller.requestRoster(); + + channel_.onIQReceived.emit(IQ.createResult(new JID("baz@fum.com/dum"), channel_.sentStanzas.get(0).getID(), null)); + } + + @Test + public void testAdd() { + XMPPRosterController controller = new XMPPRosterController(router_, xmppRoster_, rosterStorage_); + + RosterPayload payload = new RosterPayload(); + payload.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Both)); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "eou", payload)); + + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + assertEquals(0, xmppRoster_.getGroupsForJID(jid1_).size()); + assertTrue(xmppRoster_.containsJID(jid1_)); + assertEquals("Bob", xmppRoster_.getNameForJID(jid1_)); + } + + @Test + public void testGet_NoRosterInStorage() { + XMPPRosterController testling = createController(); + testling.setUseVersioning(true); + + testling.requestRoster(); + + RosterPayload roster = channel_.sentStanzas.get(0).getPayload(new RosterPayload()); + assertNotNull(roster.getVersion()); + assertEquals("", roster.getVersion()); + } + + @Test + public void testGet_NoVersionInStorage() { + XMPPRosterController testling = createController(); + testling.setUseVersioning(true); + rosterStorage_.setRoster(new RosterPayload()); + + testling.requestRoster(); + + RosterPayload roster = channel_.sentStanzas.get(0).getPayload(new RosterPayload()); + assertNotNull(roster.getVersion()); + assertEquals("", roster.getVersion()); + } + + @Test + public void testGet_VersionInStorage() { + XMPPRosterController testling = createController(); + testling.setUseVersioning(true); + RosterPayload payload = new RosterPayload(); + payload.setVersion("foover"); + rosterStorage_.setRoster(payload); + + testling.requestRoster(); + + RosterPayload roster = channel_.sentStanzas.get(0).getPayload(new RosterPayload()); + assertNotNull(roster.getVersion()); + assertEquals("foover", roster.getVersion()); + } + + @Test + public void testGet_ServerDoesNotSupportVersion() { + XMPPRosterController testling = createController(); + RosterPayload payload = new RosterPayload(); + payload.setVersion("foover"); + rosterStorage_.setRoster(payload); + + testling.requestRoster(); + + RosterPayload roster = channel_.sentStanzas.get(0).getPayload(new RosterPayload()); + assertNull(roster.getVersion()); + } + + @Test + public void testGet_ResponseWithoutNewVersion() { + XMPPRosterController testling = createController(); + testling.setUseVersioning(true); + RosterPayload storedRoster = new RosterPayload(); + storedRoster.setVersion("version10"); + storedRoster.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Both)); + storedRoster.addItem(new RosterItemPayload(jid2_, "Alice", RosterItemPayload.Subscription.Both)); + rosterStorage_.setRoster(storedRoster); + testling.requestRoster(); + + channel_.onIQReceived.emit(IQ.createResult(new JID("foo@bar.com"), channel_.sentStanzas.get(0).getID(), null)); + + assertEquals(2, handler_.getEventCount()); + assertNotNull(xmppRoster_.getItem(jid1_)); + assertNotNull(xmppRoster_.getItem(jid2_)); + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid2_, handler_.getLastJID()); + assertNotNull(rosterStorage_.getRoster()); + assertNotNull(rosterStorage_.getRoster().getVersion()); + assertEquals("version10", rosterStorage_.getRoster().getVersion()); + assertNotNull(rosterStorage_.getRoster().getItem(jid1_)); + assertNotNull(rosterStorage_.getRoster().getItem(jid2_)); + } + + @Test + public void testGet_ResponseWithNewVersion() { + XMPPRosterController testling = createController(); + testling.setUseVersioning(true); + RosterPayload storedRoster = new RosterPayload(); + storedRoster.setVersion("version10"); + storedRoster.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Both)); + rosterStorage_.setRoster(storedRoster); + testling.requestRoster(); + + RosterPayload serverRoster = new RosterPayload(); + serverRoster.setVersion("version12"); + serverRoster.addItem(new RosterItemPayload(jid2_, "Alice", RosterItemPayload.Subscription.Both)); + Collection<String> groups = new ArrayList<String>(); + groups.add("foo"); + groups.add("bar"); + serverRoster.addItem(new RosterItemPayload(jid3_, "Rabbit", RosterItemPayload.Subscription.Both, groups)); + channel_.onIQReceived.emit(IQ.createResult(new JID("foo@bar.com"), channel_.sentStanzas.get(0).getID(), serverRoster)); + + + assertEquals(2, handler_.getEventCount()); + assertNull(xmppRoster_.getItem(jid1_)); + assertNotNull(xmppRoster_.getItem(jid2_)); + assertNotNull(xmppRoster_.getItem(jid3_)); + assertEquals(jid3_, handler_.getLastJID()); + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertNotNull(rosterStorage_.getRoster()); + assertNotNull(rosterStorage_.getRoster().getVersion()); + assertEquals("version12", rosterStorage_.getRoster().getVersion()); + assertNull(rosterStorage_.getRoster().getItem(jid1_)); + assertNotNull(rosterStorage_.getRoster().getItem(jid2_)); + assertNotNull(rosterStorage_.getRoster().getItem(jid3_)); + assertEquals(2, rosterStorage_.getRoster().getItem(jid3_).getGroups().size()); + } + + @Test + public void testAddFromNonAccount() { + XMPPRosterController testling = createController(); + + RosterPayload payload = new RosterPayload(); + payload.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Both)); + IQ request = IQ.createRequest(IQ.Type.Set, new JID(), "eou", payload); + request.setFrom(jid2_); + channel_.onIQReceived.emit(request); + + assertEquals(XMPPRosterEvents.None, handler_.getLastEvent()); + } + + @Test + public void testModify() { + XMPPRosterController controller = new XMPPRosterController(router_, xmppRoster_, rosterStorage_); + RosterPayload payload1 = new RosterPayload(); + payload1.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Both)); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "id1", payload1)); + + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + handler_.reset(); + + RosterPayload payload2 = new RosterPayload(); + payload2.addItem(new RosterItemPayload(jid1_, "Bob2", RosterItemPayload.Subscription.Both)); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "id2", payload2)); + + assertEquals(XMPPRosterEvents.Update, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + + assertEquals("Bob2", xmppRoster_.getNameForJID(jid1_)); + } + + @Test + public void testRemove() { + XMPPRosterController controller = new XMPPRosterController(router_, xmppRoster_, rosterStorage_); + RosterPayload payload1 = new RosterPayload(); + payload1.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Both)); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "id1", payload1)); + + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + handler_.reset(); + + RosterPayload payload2 = new RosterPayload(); + payload2.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Remove)); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "id2", payload2)); + assertFalse(xmppRoster_.containsJID(jid1_)); + assertEquals(XMPPRosterEvents.Remove, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + } + + @Test + public void testRemove_RosterStorageUpdated() { + XMPPRosterController testling = createController(); + testling.setUseVersioning(true); + RosterPayload storedRoster = new RosterPayload(); + storedRoster.setVersion("version10"); + storedRoster.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Both)); + storedRoster.addItem(new RosterItemPayload(jid2_, "Alice", RosterItemPayload.Subscription.Both)); + rosterStorage_.setRoster(storedRoster); + testling.requestRoster(); + channel_.onIQReceived.emit(IQ.createResult(new JID("foo@bar.com"), channel_.sentStanzas.get(0).getID(), null)); + + RosterPayload payload2 = new RosterPayload(); + payload2.setVersion("version15"); + payload2.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Remove)); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "id2", payload2)); + + assertNotNull(rosterStorage_.getRoster()); + assertNotNull(rosterStorage_.getRoster().getVersion()); + assertEquals("version15", rosterStorage_.getRoster().getVersion()); + assertNull(rosterStorage_.getRoster().getItem(jid1_)); + assertNotNull(rosterStorage_.getRoster().getItem(jid2_)); + } + + @Test + public void testMany() { + XMPPRosterController controller = new XMPPRosterController(router_, xmppRoster_, rosterStorage_); + RosterPayload payload1 = new RosterPayload(); + payload1.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Both)); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "id1", payload1)); + + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + handler_.reset(); + + RosterPayload payload2 = new RosterPayload(); + payload2.addItem(new RosterItemPayload(jid2_, "Alice", RosterItemPayload.Subscription.Both)); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "id2", payload2)); + + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid2_, handler_.getLastJID()); + handler_.reset(); + + RosterPayload payload3 = new RosterPayload(); + payload3.addItem(new RosterItemPayload(jid1_, "Ernie", RosterItemPayload.Subscription.Both)); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "id3", payload3)); + + assertEquals(XMPPRosterEvents.Update, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + handler_.reset(); + + RosterPayload payload4 = new RosterPayload(); + RosterItemPayload item = new RosterItemPayload(jid3_, "Jane", RosterItemPayload.Subscription.Both); + String janesGroup = "Jane's Group"; + item.addGroup(janesGroup); + payload4.addItem(item); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "id4", payload4)); + + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid3_, handler_.getLastJID()); + assertEquals(1, xmppRoster_.getGroupsForJID(jid3_).size()); + assertEquals(janesGroup, xmppRoster_.getGroupsForJID(jid3_).toArray()[0]); + handler_.reset(); + + RosterPayload payload5 = new RosterPayload(); + payload5.addItem(new RosterItemPayload(jid1_, "Bob", RosterItemPayload.Subscription.Remove)); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "id5", payload5)); + assertFalse(xmppRoster_.containsJID(jid1_)); + assertEquals(XMPPRosterEvents.Remove, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + handler_.reset(); + + RosterPayload payload6 = new RosterPayload(); + RosterItemPayload item2 = new RosterItemPayload(jid2_, "Little Alice", RosterItemPayload.Subscription.Both); + String alicesGroup = "Alice's Group"; + item2.addGroup(alicesGroup); + payload6.addItem(item2); + channel_.onIQReceived.emit(IQ.createRequest(IQ.Type.Set, new JID(), "id6", payload6)); + assertEquals(XMPPRosterEvents.Update, handler_.getLastEvent()); + assertEquals(jid2_, handler_.getLastJID()); + assertEquals("Little Alice", xmppRoster_.getNameForJID(jid2_)); + assertEquals("Jane", xmppRoster_.getNameForJID(jid3_)); + assertEquals(1, xmppRoster_.getGroupsForJID(jid2_).size()); + assertEquals(alicesGroup, xmppRoster_.getGroupsForJID(jid2_).toArray()[0]); + assertEquals(1, xmppRoster_.getGroupsForJID(jid3_).size()); + assertEquals(janesGroup, xmppRoster_.getGroupsForJID(jid3_).toArray()[0]); + handler_.reset(); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/roster/XMPPRosterImplTest.java b/test/com/isode/stroke/roster/XMPPRosterImplTest.java new file mode 100644 index 0000000..191beb5 --- /dev/null +++ b/test/com/isode/stroke/roster/XMPPRosterImplTest.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2010-2011 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.roster; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertNotNull; +import org.junit.Before; +import org.junit.Test; +import com.isode.stroke.roster.XMPPRosterSignalHandler; +import com.isode.stroke.roster.XMPPRosterImpl; +import com.isode.stroke.elements.RosterItemPayload; +import com.isode.stroke.jid.JID; +import java.util.Collection; +import java.util.ArrayList; + +public class XMPPRosterImplTest { + + private XMPPRosterImpl roster_; + private XMPPRosterSignalHandler handler_; + private JID jid1_; + private JID jid2_; + private JID jid3_; + private Collection<String> groups1_ = new ArrayList<String>(); + private Collection<String> groups2_ = new ArrayList<String>(); + + @Before + public void setUp() { + jid1_ = new JID("a@b.c"); + jid2_ = new JID("b@c.d"); + jid3_ = new JID("c@d.e"); + roster_ = new XMPPRosterImpl(); + handler_ = new XMPPRosterSignalHandler(roster_); + groups1_.add("bobs"); + groups1_.add("berts"); + groups2_.add("ernies"); + } + + @Test + public void testJIDAdded() { + roster_.addContact(jid1_, "NewName", groups1_, RosterItemPayload.Subscription.Both); + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + assertEquals("NewName", roster_.getNameForJID(jid1_)); + assertEquals(groups1_, roster_.getGroupsForJID(jid1_)); + handler_.reset(); + roster_.addContact(jid2_, "NameTwo", groups1_, RosterItemPayload.Subscription.Both); + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid2_, handler_.getLastJID()); + assertEquals("NameTwo", roster_.getNameForJID(jid2_)); + assertEquals("NewName", roster_.getNameForJID(jid1_)); + assertEquals(groups1_, roster_.getGroupsForJID(jid2_)); + assertEquals(groups1_, roster_.getGroupsForJID(jid1_)); + handler_.reset(); + roster_.addContact(jid3_, "NewName", groups2_, RosterItemPayload.Subscription.Both); + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid3_, handler_.getLastJID()); + assertEquals("NewName", roster_.getNameForJID(jid3_)); + assertEquals(groups2_, roster_.getGroupsForJID(jid3_)); + } + + @Test + public void testJIDRemoved() { + roster_.addContact(jid1_, "NewName", groups1_, RosterItemPayload.Subscription.Both); + handler_.reset(); + roster_.removeContact(jid1_); + assertEquals(XMPPRosterEvents.Remove, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + handler_.reset(); + roster_.addContact(jid1_, "NewName2", groups1_, RosterItemPayload.Subscription.Both); + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + assertEquals("NewName2", roster_.getNameForJID(jid1_)); + roster_.addContact(jid2_, "NewName3", groups1_, RosterItemPayload.Subscription.Both); + handler_.reset(); + roster_.removeContact(jid2_); + assertEquals(XMPPRosterEvents.Remove, handler_.getLastEvent()); + assertEquals(jid2_, handler_.getLastJID()); + handler_.reset(); + roster_.removeContact(jid1_); + assertEquals(XMPPRosterEvents.Remove, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + } + + @Test + public void testJIDUpdated() { + roster_.addContact(jid1_, "NewName", groups1_, RosterItemPayload.Subscription.Both); + assertEquals(XMPPRosterEvents.Add, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + assertEquals("NewName", roster_.getNameForJID(jid1_)); + assertEquals(groups1_, roster_.getGroupsForJID(jid1_)); + handler_.reset(); + roster_.addContact(jid1_, "NameTwo", groups2_, RosterItemPayload.Subscription.Both); + assertEquals(XMPPRosterEvents.Update, handler_.getLastEvent()); + assertEquals(jid1_, handler_.getLastJID()); + assertEquals("NameTwo", roster_.getNameForJID(jid1_)); + assertEquals(groups2_, roster_.getGroupsForJID(jid1_)); + } +}
\ No newline at end of file diff --git a/test/com/isode/stroke/roster/XMPPRosterSignalHandler.java b/test/com/isode/stroke/roster/XMPPRosterSignalHandler.java new file mode 100644 index 0000000..a6d69eb --- /dev/null +++ b/test/com/isode/stroke/roster/XMPPRosterSignalHandler.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2010-2011 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.roster; + +import com.isode.stroke.roster.XMPPRosterImpl; +import com.isode.stroke.roster.XMPPRosterEvents; +import com.isode.stroke.signals.SignalConnection; +import com.isode.stroke.signals.Slot1; +import com.isode.stroke.signals.Slot3; +import com.isode.stroke.jid.JID; +import java.util.Collection; +import java.util.ArrayList; + +enum XMPPRosterEvents { + None, + Add, + Remove, + Update +}; + +public class XMPPRosterSignalHandler { + + public XMPPRosterSignalHandler(XMPPRoster roster) { + this.eventCount = 0; + lastEvent_ = XMPPRosterEvents.None; + onJIDAddedConnection = roster.onJIDAdded.connect(new Slot1<JID>() { + @Override + public void call(JID j1) { + handleJIDAdded(j1); + } + }); + + onJIDRemovedConnection = roster.onJIDRemoved.connect(new Slot1<JID>() { + @Override + public void call(JID j1) { + handleJIDRemoved(j1); + } + }); + + onJIDUpdatedConnection = roster.onJIDUpdated.connect(new Slot3<JID, String, Collection<String> >() { + @Override + public void call(JID j1, String s1, Collection<String> c1) { + handleJIDUpdated(j1, s1, c1); + } + }); + } + + public XMPPRosterEvents getLastEvent() { + return lastEvent_; + } + + public JID getLastJID() { + return lastJID_; + } + + public String getLastOldName() { + return lastOldName_; + } + + public Collection<String> getLastOldGroups() { + return lastOldGroups_; + } + + public void reset() { + lastEvent_ = XMPPRosterEvents.None; + } + + public final int getEventCount() { + return eventCount; + } + + private void handleJIDAdded(final JID jid) { + lastJID_ = jid; + lastEvent_ = XMPPRosterEvents.Add; + eventCount++; + } + + private void handleJIDRemoved(final JID jid) { + lastJID_ = jid; + lastEvent_ = XMPPRosterEvents.Remove; + eventCount++; + } + + private void handleJIDUpdated(final JID jid, final String oldName, final Collection<String> oldGroups) { + assert(lastEvent_ == XMPPRosterEvents.None); + lastJID_ = jid; + lastOldName_ = oldName; + lastOldGroups_ = oldGroups; + lastEvent_ = XMPPRosterEvents.Update; + eventCount++; + } + + private XMPPRosterEvents lastEvent_; + private JID lastJID_ = new JID(); //initialized + private String lastOldName_ = ""; + private Collection<String> lastOldGroups_ = new ArrayList<String>(); //initialized + private int eventCount; + private SignalConnection onJIDAddedConnection; + private SignalConnection onJIDRemovedConnection; + private SignalConnection onJIDUpdatedConnection; +}
\ No newline at end of file |