mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-12-23 13:07:59 +01:00
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:
parent
819b32ec95
commit
87e6c2aba5
3 changed files with 44 additions and 20 deletions
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue