Allows to discover whether a server supports publishing of items or not. SMACK-150

git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@2350 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Gaston Dombiak 2004-08-05 16:57:28 +00:00 committed by gdombiak
parent 13d1c07741
commit ecadf0b4a8
1 changed files with 64 additions and 31 deletions

View File

@ -92,7 +92,7 @@ public class ServiceDiscoveryManager {
* service manager will respond to any service discovery request that the connection may * service manager will respond to any service discovery request that the connection may
* receive. * receive.
* *
* @param connection the connection to which a ServiceDiscoveryManager is going to be created * @param connection the connection to which a ServiceDiscoveryManager is going to be created.
*/ */
public ServiceDiscoveryManager(XMPPConnection connection) { public ServiceDiscoveryManager(XMPPConnection connection) {
this.connection = connection; this.connection = connection;
@ -102,8 +102,8 @@ public class ServiceDiscoveryManager {
/** /**
* Returns the ServiceDiscoveryManager instance associated with a given XMPPConnection. * Returns the ServiceDiscoveryManager instance associated with a given XMPPConnection.
* *
* @param connection the connection used to look for the proper ServiceDiscoveryManager * @param connection the connection used to look for the proper ServiceDiscoveryManager.
* @return the ServiceDiscoveryManager associated with a given XMPPConnection * @return the ServiceDiscoveryManager associated with a given XMPPConnection.
*/ */
public static ServiceDiscoveryManager getInstanceFor(XMPPConnection connection) { public static ServiceDiscoveryManager getInstanceFor(XMPPConnection connection) {
return (ServiceDiscoveryManager) instances.get(connection); return (ServiceDiscoveryManager) instances.get(connection);
@ -194,9 +194,9 @@ public class ServiceDiscoveryManager {
* In MUC, a node could be 'http://jabber.org/protocol/muc#rooms' which means that the * In MUC, a node could be 'http://jabber.org/protocol/muc#rooms' which means that the
* NodeInformationProvider will provide information about the rooms where the user has joined. * NodeInformationProvider will provide information about the rooms where the user has joined.
* *
* @param node the node that contains items associated with an entity not addressable as a JID * @param node the node that contains items associated with an entity not addressable as a JID.
* @return the NodeInformationProvider responsible for providing information related * @return the NodeInformationProvider responsible for providing information related
* to a given node * to a given node.
*/ */
private NodeInformationProvider getNodeInformationProvider(String node) { private NodeInformationProvider getNodeInformationProvider(String node) {
return (NodeInformationProvider) nodeInformationProviders.get(node); return (NodeInformationProvider) nodeInformationProviders.get(node);
@ -211,9 +211,9 @@ public class ServiceDiscoveryManager {
* In MUC, a node could be 'http://jabber.org/protocol/muc#rooms' which means that the * In MUC, a node could be 'http://jabber.org/protocol/muc#rooms' which means that the
* NodeInformationProvider will provide information about the rooms where the user has joined. * NodeInformationProvider will provide information about the rooms where the user has joined.
* *
* @param node the node whose items will be provided by the NodeInformationProvider * @param node the node whose items will be provided by the NodeInformationProvider.
* @return the NodeInformationProvider responsible for providing items related * @return the NodeInformationProvider responsible for providing items related
* to the node * to the node.
*/ */
public void setNodeInformationProvider(String node, NodeInformationProvider listener) { public void setNodeInformationProvider(String node, NodeInformationProvider listener) {
nodeInformationProviders.put(node, listener); nodeInformationProviders.put(node, listener);
@ -227,7 +227,7 @@ public class ServiceDiscoveryManager {
* In MUC, a node could be 'http://jabber.org/protocol/muc#rooms' which means that the * In MUC, a node could be 'http://jabber.org/protocol/muc#rooms' which means that the
* NodeInformationProvider will provide information about the rooms where the user has joined. * NodeInformationProvider will provide information about the rooms where the user has joined.
* *
* @param node the node to remove the associated NodeInformationProvider * @param node the node to remove the associated NodeInformationProvider.
*/ */
public void removeNodeInformationProvider(String node) { public void removeNodeInformationProvider(String node) {
nodeInformationProviders.remove(node); nodeInformationProviders.remove(node);
@ -236,7 +236,7 @@ public class ServiceDiscoveryManager {
/** /**
* Returns the supported features by this XMPP entity. * Returns the supported features by this XMPP entity.
* *
* @return an Iterator on the supported features by this XMPP entity * @return an Iterator on the supported features by this XMPP entity.
*/ */
public Iterator getFeatures() { public Iterator getFeatures() {
synchronized (features) { synchronized (features) {
@ -248,7 +248,7 @@ public class ServiceDiscoveryManager {
* Registers that a new feature is supported by this XMPP entity. When this client is * Registers that a new feature is supported by this XMPP entity. When this client is
* queried for its information the registered features will be answered. * queried for its information the registered features will be answered.
* *
* @param feature the feature to register as supported * @param feature the feature to register as supported.
*/ */
public void addFeature(String feature) { public void addFeature(String feature) {
synchronized (features) { synchronized (features) {
@ -259,7 +259,7 @@ public class ServiceDiscoveryManager {
/** /**
* Removes the specified feature from the supported features by this XMPP entity. * Removes the specified feature from the supported features by this XMPP entity.
* *
* @param feature the feature to remove from the supported features * @param feature the feature to remove from the supported features.
*/ */
public void removeFeature(String feature) { public void removeFeature(String feature) {
synchronized (features) { synchronized (features) {
@ -270,8 +270,8 @@ public class ServiceDiscoveryManager {
/** /**
* Returns true if the specified feature is registered in the ServiceDiscoveryManager. * Returns true if the specified feature is registered in the ServiceDiscoveryManager.
* *
* @param feature the feature to look for * @param feature the feature to look for.
* @return a boolean indicating if the specified featured is registered or not * @return a boolean indicating if the specified featured is registered or not.
*/ */
public boolean includesFeature(String feature) { public boolean includesFeature(String feature) {
synchronized (features) { synchronized (features) {
@ -282,9 +282,9 @@ public class ServiceDiscoveryManager {
/** /**
* Returns the discovered information of a given XMPP entity addressed by its JID. * Returns the discovered information of a given XMPP entity addressed by its JID.
* *
* @param entityID the address of the XMPP entity * @param entityID the address of the XMPP entity.
* @return the discovered information * @return the discovered information.
* @throws XMPPException if the operation failed for some reason * @throws XMPPException if the operation failed for some reason.
*/ */
public DiscoverInfo discoverInfo(String entityID) throws XMPPException { public DiscoverInfo discoverInfo(String entityID) throws XMPPException {
return discoverInfo(entityID, null); return discoverInfo(entityID, null);
@ -295,10 +295,10 @@ public class ServiceDiscoveryManager {
* note attribute. Use this message only when trying to query information which is not * note attribute. Use this message only when trying to query information which is not
* directly addressable. * directly addressable.
* *
* @param entityID the address of the XMPP entity * @param entityID the address of the XMPP entity.
* @param node the attribute that supplements the 'jid' attribute * @param node the attribute that supplements the 'jid' attribute.
* @return the discovered information * @return the discovered information.
* @throws XMPPException if the operation failed for some reason * @throws XMPPException if the operation failed for some reason.
*/ */
public DiscoverInfo discoverInfo(String entityID, String node) throws XMPPException { public DiscoverInfo discoverInfo(String entityID, String node) throws XMPPException {
// Discover the entity's info // Discover the entity's info
@ -329,9 +329,9 @@ public class ServiceDiscoveryManager {
/** /**
* Returns the discovered items of a given XMPP entity addressed by its JID. * Returns the discovered items of a given XMPP entity addressed by its JID.
* *
* @param entityID the address of the XMPP entity * @param entityID the address of the XMPP entity.
* @return the discovered information * @return the discovered information.
* @throws XMPPException if the operation failed for some reason * @throws XMPPException if the operation failed for some reason.
*/ */
public DiscoverItems discoverItems(String entityID) throws XMPPException { public DiscoverItems discoverItems(String entityID) throws XMPPException {
return discoverItems(entityID, null); return discoverItems(entityID, null);
@ -342,10 +342,10 @@ public class ServiceDiscoveryManager {
* note attribute. Use this message only when trying to query information which is not * note attribute. Use this message only when trying to query information which is not
* directly addressable. * directly addressable.
* *
* @param entityID the address of the XMPP entity * @param entityID the address of the XMPP entity.
* @param node the attribute that supplements the 'jid' attribute * @param node the attribute that supplements the 'jid' attribute.
* @return the discovered items * @return the discovered items.
* @throws XMPPException if the operation failed for some reason * @throws XMPPException if the operation failed for some reason.
*/ */
public DiscoverItems discoverItems(String entityID, String node) throws XMPPException { public DiscoverItems discoverItems(String entityID, String node) throws XMPPException {
// Discover the entity's items // Discover the entity's items
@ -373,19 +373,52 @@ public class ServiceDiscoveryManager {
return (DiscoverItems) result; return (DiscoverItems) result;
} }
/**
* Returns true if the server supports publishing of items. A client may wish to publish items
* to the server so that the server can provide items associated to the client. These items will
* be returned by the server whenever the server receives a disco request targeted to the bare
* address of the client (i.e. user@host.com).
*
* @param entityID the address of the XMPP entity.
* @return true if the server supports publishing of items.
* @throws XMPPException if the operation failed for some reason.
*/
public boolean canPublishItems(String entityID) throws XMPPException {
DiscoverInfo info = discoverInfo(entityID);
return info.containsFeature("http://jabber.org/protocol/disco#publish");
}
/** /**
* Publishes new items to a parent entity. The item elements to publish MUST have at least * Publishes new items to a parent entity. The item elements to publish MUST have at least
* a 'jid' attribute specifying the Entity ID of the item, and an action attribute which * a 'jid' attribute specifying the Entity ID of the item, and an action attribute which
* specifies the action being taken for that item. Possible action values are: "update" and * specifies the action being taken for that item. Possible action values are: "update" and
* "remove". * "remove".
* *
* @param entityID the address of the XMPP entity * @param entityID the address of the XMPP entity.
* @param discoverItems the DiscoveryItems to publish * @param discoverItems the DiscoveryItems to publish.
* @throws XMPPException if the operation failed for some reason * @throws XMPPException if the operation failed for some reason.
*/ */
public void publishItems(String entityID, DiscoverItems discoverItems) throws XMPPException { public void publishItems(String entityID, DiscoverItems discoverItems)
throws XMPPException {
publishItems(entityID, null, discoverItems);
}
/**
* Publishes new items to a parent entity and node. The item elements to publish MUST have at
* least a 'jid' attribute specifying the Entity ID of the item, and an action attribute which
* specifies the action being taken for that item. Possible action values are: "update" and
* "remove".
*
* @param entityID the address of the XMPP entity.
* @param node the attribute that supplements the 'jid' attribute.
* @param discoverItems the DiscoveryItems to publish.
* @throws XMPPException if the operation failed for some reason.
*/
public void publishItems(String entityID, String node, DiscoverItems discoverItems)
throws XMPPException {
discoverItems.setType(IQ.Type.SET); discoverItems.setType(IQ.Type.SET);
discoverItems.setTo(entityID); discoverItems.setTo(entityID);
discoverItems.setNode(node);
// Create a packet collector to listen for a response. // Create a packet collector to listen for a response.
PacketCollector collector = PacketCollector collector =