diff --git a/source/org/jivesoftware/smackx/NodeInformationProvider.java b/source/org/jivesoftware/smackx/NodeInformationProvider.java index e36037500..39485ea07 100644 --- a/source/org/jivesoftware/smackx/NodeInformationProvider.java +++ b/source/org/jivesoftware/smackx/NodeInformationProvider.java @@ -20,37 +20,49 @@ package org.jivesoftware.smackx; +import org.jivesoftware.smackx.packet.DiscoverInfo; import org.jivesoftware.smackx.packet.DiscoverItems; -import java.util.Iterator; +import java.util.List; /** - * The NodeInformationProvider is responsible for providing supported features and hosted - * items (i.e. DiscoverItems.Item) about a given node. This information will be requested - * each time this XMPPP client receives a disco info or items requests on the given node. - * each time this XMPPP client receives a disco info or items requests on the given node. + * The NodeInformationProvider is responsible for providing supported indentities, features + * and hosted items (i.e. DiscoverItems.Item) about a given node. This information will be + * requested each time this XMPPP client receives a disco info or items requests on the + * given node. each time this XMPPP client receives a disco info or items requests on the + * given node. * * @author Gaston Dombiak */ 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 * 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 getNodeItems(); + public abstract List 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 * should answer with each feature supported by the client version * 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 getNodeFeatures(); + public abstract List 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 getNodeIdentities(); + } diff --git a/source/org/jivesoftware/smackx/ServiceDiscoveryManager.java b/source/org/jivesoftware/smackx/ServiceDiscoveryManager.java index b1ca81123..218d43b2e 100644 --- a/source/org/jivesoftware/smackx/ServiceDiscoveryManager.java +++ b/source/org/jivesoftware/smackx/ServiceDiscoveryManager.java @@ -185,10 +185,10 @@ public class ServiceDiscoveryManager { getNodeInformationProvider(discoverItems.getNode()); if (nodeInformationProvider != null) { // Specified node was found - Iterator items = nodeInformationProvider.getNodeItems(); + List items = nodeInformationProvider.getNodeItems(); if (items != null) { - while (items.hasNext()) { - response.addItem((DiscoverItems.Item) items.next()); + for (DiscoverItems.Item item : items) { + response.addItem(item); } } } else if(discoverItems.getNode() != null) { @@ -237,10 +237,18 @@ public class ServiceDiscoveryManager { getNodeInformationProvider(discoverInfo.getNode()); if (nodeInformationProvider != null) { // Node was found. Add node features - Iterator features = nodeInformationProvider.getNodeFeatures(); + List features = nodeInformationProvider.getNodeFeatures(); if (features != null) { - while (features.hasNext()) { - response.addFeature((String) features.next()); + for(String feature : features) { + response.addFeature(feature); + } + } + // Add node identities + List identities = + nodeInformationProvider.getNodeIdentities(); + if (identities != null) { + for (DiscoverInfo.Identity identity : identities) { + response.addIdentity(identity); } } } diff --git a/source/org/jivesoftware/smackx/muc/MultiUserChat.java b/source/org/jivesoftware/smackx/muc/MultiUserChat.java index c99069c26..ba7c5322c 100644 --- a/source/org/jivesoftware/smackx/muc/MultiUserChat.java +++ b/source/org/jivesoftware/smackx/muc/MultiUserChat.java @@ -87,16 +87,20 @@ public class MultiUserChat { ServiceDiscoveryManager.getInstanceFor(connection).setNodeInformationProvider( discoNode, new NodeInformationProvider() { - public Iterator getNodeItems() { + public List getNodeItems() { List answer = new ArrayList(); Iterator rooms=MultiUserChat.getJoinedRooms(connection); while (rooms.hasNext()) { answer.add(new DiscoverItems.Item(rooms.next())); } - return answer.iterator(); + return answer; } - public Iterator getNodeFeatures() { + public List getNodeFeatures() { + return null; + } + + public List getNodeIdentities() { return null; } });