From 04fbaff6fde6254de3abf2f52c27af44a3e0ed46 Mon Sep 17 00:00:00 2001 From: Gaston Dombiak Date: Wed, 19 Oct 2005 00:46:57 +0000 Subject: [PATCH] Initial version. SMACK-96 git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@2983 b35dd754-fafc-0310-a699-88a17e54d16e --- .../smackx/SharedGroupManager.java | 53 ++++++++++++++ .../smackx/packet/SharedGroupsInfo.java | 73 +++++++++++++++++++ .../jivesoftware/smackx/SharedGroupsTest.java | 31 ++++++++ 3 files changed, 157 insertions(+) create mode 100644 source/org/jivesoftware/smackx/SharedGroupManager.java create mode 100644 source/org/jivesoftware/smackx/packet/SharedGroupsInfo.java create mode 100644 test/org/jivesoftware/smackx/SharedGroupsTest.java diff --git a/source/org/jivesoftware/smackx/SharedGroupManager.java b/source/org/jivesoftware/smackx/SharedGroupManager.java new file mode 100644 index 000000000..ca509c6eb --- /dev/null +++ b/source/org/jivesoftware/smackx/SharedGroupManager.java @@ -0,0 +1,53 @@ +package org.jivesoftware.smackx; + +import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smack.PacketCollector; +import org.jivesoftware.smack.SmackConfiguration; +import org.jivesoftware.smack.XMPPException; +import org.jivesoftware.smack.filter.PacketIDFilter; +import org.jivesoftware.smack.packet.IQ; +import org.jivesoftware.smackx.packet.SharedGroupsInfo; + +import java.util.List; + +/** + * A SharedGroupManager provides services for discovering the shared groups where a user belongs.

+ * + * Important note: This functionality is not part of the XMPP spec and it will only work + * with Jive Messenger. + * + * @author Gaston Dombiak + */ +public class SharedGroupManager { + + /** + * Returns the collection that will contain the name of the shared groups where the user + * logged in with the specified session belongs. + * + * @param connection connection to use to get the user's shared groups. + * @return collection with the shared groups' name of the logged user. + */ + public static List getSharedGroups(XMPPConnection connection) throws XMPPException { + // Discover the shared groups of the logged user + SharedGroupsInfo info = new SharedGroupsInfo(); + info.setType(IQ.Type.GET); + + // Create a packet collector to listen for a response. + PacketCollector collector = + connection.createPacketCollector(new PacketIDFilter(info.getPacketID())); + + connection.sendPacket(info); + + // Wait up to 5 seconds for a result. + IQ result = (IQ) collector.nextResult(SmackConfiguration.getPacketReplyTimeout()); + // Stop queuing results + collector.cancel(); + if (result == null) { + throw new XMPPException("No response from the server."); + } + if (result.getType() == IQ.Type.ERROR) { + throw new XMPPException(result.getError()); + } + return ((SharedGroupsInfo) result).getGroups(); + } +} diff --git a/source/org/jivesoftware/smackx/packet/SharedGroupsInfo.java b/source/org/jivesoftware/smackx/packet/SharedGroupsInfo.java new file mode 100644 index 000000000..eafef4400 --- /dev/null +++ b/source/org/jivesoftware/smackx/packet/SharedGroupsInfo.java @@ -0,0 +1,73 @@ +package org.jivesoftware.smackx.packet; + +import org.jivesoftware.smack.packet.IQ; +import org.jivesoftware.smack.provider.IQProvider; +import org.xmlpull.v1.XmlPullParser; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * IQ packet used for discovering the user's shared groups and for getting the answer back + * from the server.

+ * + * Important note: This functionality is not part of the XMPP spec and it will only work + * with Jive Messenger. + * + * @author Gaston Dombiak + */ +public class SharedGroupsInfo extends IQ { + + private List groups = new ArrayList(); + + /** + * Returns a collection with the shared group names returned from the server. + * + * @return collection with the shared group names returned from the server. + */ + public List getGroups() { + return groups; + } + + public String getChildElementXML() { + StringBuffer buf = new StringBuffer(); + buf.append(""); + for (Iterator it=groups.iterator(); it.hasNext();) { + buf.append("").append(it.next()).append(""); + } + buf.append(""); + return buf.toString(); + } + + /** + * Internal Search service Provider. + */ + public static class Provider implements IQProvider { + + /** + * Provider Constructor. + */ + public Provider() { + super(); + } + + public IQ parseIQ(XmlPullParser parser) throws Exception { + SharedGroupsInfo groupsInfo = new SharedGroupsInfo(); + + boolean done = false; + while (!done) { + int eventType = parser.next(); + if (eventType == XmlPullParser.START_TAG && parser.getName().equals("group")) { + groupsInfo.getGroups().add(parser.nextText()); + } + else if (eventType == XmlPullParser.END_TAG) { + if (parser.getName().equals("sharedgroup")) { + done = true; + } + } + } + return groupsInfo; + } + } +} diff --git a/test/org/jivesoftware/smackx/SharedGroupsTest.java b/test/org/jivesoftware/smackx/SharedGroupsTest.java new file mode 100644 index 000000000..623f59d26 --- /dev/null +++ b/test/org/jivesoftware/smackx/SharedGroupsTest.java @@ -0,0 +1,31 @@ +package org.jivesoftware.smackx; + +import org.jivesoftware.smack.test.SmackTestCase; +import org.jivesoftware.smack.XMPPException; + +import java.util.List; + +/** + * Test cases for getting the shared groups of a user.

+ * + * Important note: This functionality is not part of the XMPP spec and it will only work + * with Jive Messenger. + * + * @author Gaston Dombiak + */ +public class SharedGroupsTest extends SmackTestCase { + + public SharedGroupsTest(String arg0) { + super(arg0); + } + + public void testGetUserSharedGroups() throws XMPPException { + List groups = SharedGroupManager.getSharedGroups(getConnection(0)); + + assertNotNull("User groups was null", groups); + } + + protected int getMaxConnections() { + return 1; + } +}