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;
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<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
* 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<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());
if (nodeInformationProvider != null) {
// Specified node was found
Iterator items = nodeInformationProvider.getNodeItems();
List<DiscoverItems.Item> 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<String> 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<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(
discoNode,
new NodeInformationProvider() {
public Iterator<DiscoverItems.Item> getNodeItems() {
public List<DiscoverItems.Item> getNodeItems() {
List<DiscoverItems.Item> answer = new ArrayList<DiscoverItems.Item>();
Iterator<String> rooms=MultiUserChat.getJoinedRooms(connection);
while (rooms.hasNext()) {
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;
}
});