Added support for returning list of identities of a hosted node. SMACK-178

git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@5720 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Gaston Dombiak 2006-10-16 17:56:48 +00:00 committed by gato
parent 819b32ec95
commit 87e6c2aba5
3 changed files with 44 additions and 20 deletions

View File

@ -20,37 +20,49 @@
package org.jivesoftware.smackx; package org.jivesoftware.smackx;
import org.jivesoftware.smackx.packet.DiscoverInfo;
import org.jivesoftware.smackx.packet.DiscoverItems; import org.jivesoftware.smackx.packet.DiscoverItems;
import java.util.Iterator; import java.util.List;
/** /**
* The NodeInformationProvider is responsible for providing supported features and hosted * The NodeInformationProvider is responsible for providing supported indentities, features
* items (i.e. DiscoverItems.Item) about a given node. This information will be requested * and hosted items (i.e. DiscoverItems.Item) about a given node. This information will be
* each time this XMPPP client receives a disco info or items requests on the given node. * requested each time this XMPPP client receives a disco info or items requests on the
* each time this XMPPP client receives a disco info or items requests on the given node. * given node. each time this XMPPP client receives a disco info or items requests on the
* given node.
* *
* @author Gaston Dombiak * @author Gaston Dombiak
*/ */
public interface NodeInformationProvider { public interface NodeInformationProvider {
/** /**
* Returns an Iterator on the Items {@link org.jivesoftware.smackx.packet.DiscoverItems.Item} * Returns a list of the Items {@link org.jivesoftware.smackx.packet.DiscoverItems.Item}
* defined in the node. For example, the MUC protocol specifies that an XMPP client should * defined in the node. For example, the MUC protocol specifies that an XMPP client should
* answer an Item for each joined room when asked for the rooms where the use has joined. * answer an Item for each joined room when asked for the rooms where the use has joined.
* *
* @return an Iterator on the Items defined in the node. * @return a list of the Items defined in the node.
*/ */
public abstract Iterator<DiscoverItems.Item> getNodeItems(); public abstract List<DiscoverItems.Item> getNodeItems();
/** /**
* Returns an Iterator on the features defined in the node. For * Returns a list of the features defined in the node. For
* example, the entity caps protocol specifies that an XMPP client * example, the entity caps protocol specifies that an XMPP client
* should answer with each feature supported by the client version * should answer with each feature supported by the client version
* or extension. * or extension.
* *
* @return an Iterator on the feature strings defined in the node. * @return a list of the feature strings defined in the node.
*/ */
public abstract Iterator<String> getNodeFeatures(); public abstract List<String> getNodeFeatures();
/**
* Returns a list of the indentites defined in the node. For
* example, the x-command protocol must provide an identity of
* category automation and type command-node for each command.
*
* @return a list of the Identities defined in the node.
*/
public abstract List<DiscoverInfo.Identity> getNodeIdentities();
} }

View File

@ -185,10 +185,10 @@ public class ServiceDiscoveryManager {
getNodeInformationProvider(discoverItems.getNode()); getNodeInformationProvider(discoverItems.getNode());
if (nodeInformationProvider != null) { if (nodeInformationProvider != null) {
// Specified node was found // Specified node was found
Iterator items = nodeInformationProvider.getNodeItems(); List<DiscoverItems.Item> items = nodeInformationProvider.getNodeItems();
if (items != null) { if (items != null) {
while (items.hasNext()) { for (DiscoverItems.Item item : items) {
response.addItem((DiscoverItems.Item) items.next()); response.addItem(item);
} }
} }
} else if(discoverItems.getNode() != null) { } else if(discoverItems.getNode() != null) {
@ -237,10 +237,18 @@ public class ServiceDiscoveryManager {
getNodeInformationProvider(discoverInfo.getNode()); getNodeInformationProvider(discoverInfo.getNode());
if (nodeInformationProvider != null) { if (nodeInformationProvider != null) {
// Node was found. Add node features // Node was found. Add node features
Iterator features = nodeInformationProvider.getNodeFeatures(); List<String> features = nodeInformationProvider.getNodeFeatures();
if (features != null) { if (features != null) {
while (features.hasNext()) { for(String feature : features) {
response.addFeature((String) features.next()); response.addFeature(feature);
}
}
// Add node identities
List<DiscoverInfo.Identity> identities =
nodeInformationProvider.getNodeIdentities();
if (identities != null) {
for (DiscoverInfo.Identity identity : identities) {
response.addIdentity(identity);
} }
} }
} }

View File

@ -87,16 +87,20 @@ public class MultiUserChat {
ServiceDiscoveryManager.getInstanceFor(connection).setNodeInformationProvider( ServiceDiscoveryManager.getInstanceFor(connection).setNodeInformationProvider(
discoNode, discoNode,
new NodeInformationProvider() { new NodeInformationProvider() {
public Iterator<DiscoverItems.Item> getNodeItems() { public List<DiscoverItems.Item> getNodeItems() {
List<DiscoverItems.Item> answer = new ArrayList<DiscoverItems.Item>(); List<DiscoverItems.Item> answer = new ArrayList<DiscoverItems.Item>();
Iterator<String> rooms=MultiUserChat.getJoinedRooms(connection); Iterator<String> rooms=MultiUserChat.getJoinedRooms(connection);
while (rooms.hasNext()) { while (rooms.hasNext()) {
answer.add(new DiscoverItems.Item(rooms.next())); answer.add(new DiscoverItems.Item(rooms.next()));
} }
return answer.iterator(); return answer;
} }
public Iterator<String> getNodeFeatures() { public List<String> getNodeFeatures() {
return null;
}
public List<DiscoverInfo.Identity> getNodeIdentities() {
return null; return null;
} }
}); });