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("
+ * + * 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; + } +}