mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-16 04:12:04 +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;
|
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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue