📄 bspubsubbean.java
字号:
package edu.ou.kmi.buddyspace.plugins.pubsub.core;
/*
* BSPubsubBean.java
*
* Project: BuddySpace
* (C) Copyright Knowledge Media Institute 2003
*
*
* Created on 3 October 2003, 11:26
*/
import java.util.*;
import org.jabber.jabberbeans.*;
import org.jabber.jabberbeans.util.*;
import org.jabber.jabberbeans.Extension.*;
import edu.ou.kmi.buddyspace.xml.*;
import edu.ou.kmi.buddyspace.plugins.pubsub.xml.*;
/**
* <code>BSPubsubBean</code> provides jabber pubsub.
* It relies on <code>IQBean</code> (this must be reset after reconnection).
*
* @author Jiri Komzak, Knowledge Media Institute, Open University, United Kingdom
*/
public class BSPubsubBean implements PacketListener {
protected ConnectionBean connBean = null;
protected Vector pubsubListeners = null;
protected final String name = "PubSub";
/**
* Constructor
*/
public BSPubsubBean() {
pubsubListeners = new Vector();
}
/**
* Sets existing and connected <code>ConnectionBean</code>.
* Then this is registered as listener for packets.
*/
public void setConnection(ConnectionBean connBean) {
if (this.connBean != null)
this.connBean.delPacketListener(this);
this.connBean = connBean;
if (connBean != null)
connBean.addPacketListener(this);
}
/**
* Returns currently used <code>ConnectionBean</code>.
*/
public ConnectionBean getConnection() {
return connBean;
}
/** Called when disconnected */
public void disconnected() {
if (connBean != null)
connBean.delPacketListener(this);
connBean = null;
}
/** Creates node with given name or instant node if name empty. */
public boolean createNode(JID jid, String nodeName, PacketID id) {
if (connBean == null || jid == null) return false;
try {
IQPubsubBuilder pb = new IQPubsubBuilder();
PubsubCreateBuilder pcb = new PubsubCreateBuilder();
pcb.setNode(nodeName);
pb.setChild(new PubsubCreate(pcb));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "set", id);
} catch (InstantiationException e) {
return false;
}
}
private class RetractItem extends XData
{
String id;
RetractItem(String id) throws InstantiationException {
super(new XDataBuilder());
this.id = id;
}
public void appendItem(StringBuffer retval) {
retval.append("<item id=\"" + id + "\"/>");
}
}
/** Retracts given node item. */
public boolean retractItem(JID jid, String nodeName, String itemID, PacketID id) {
if (connBean == null || nodeName == null || jid == null) return false;
try {
IQPubsubBuilder pb = new IQPubsubBuilder();
PubsubOwnerOpsBuilder poob = new PubsubOwnerOpsBuilder();
poob.setName("retract");
poob.setNode(nodeName);
poob.setForm(new RetractItem(itemID));
pb.setChild(new PubsubOwnerOps(poob));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "set", id);
} catch (InstantiationException e) {
return false;
}
}
/** Deletes given node. */
public boolean deleteNode(JID jid, String nodeName, PacketID id) {
if (connBean == null || nodeName == null || jid == null) return false;
try {
IQPubsubBuilder pb = new IQPubsubBuilder();
PubsubOwnerOpsBuilder poob = new PubsubOwnerOpsBuilder();
poob.setName("delete");
poob.setNode(nodeName);
pb.setChild(new PubsubOwnerOps(poob));
IQPubsub iqp = new IQPubsub(pb);
// pubsub on buddyspace doesn't like the '#owner' namespace for
// delete command, but wildfire pubsub requires it!
iqp.useOwnerNamespace = !jid.toSimpleString().equals("pubsub.buddyspace.org");
return sendIQ(iqp, jid, "set", id);
} catch (InstantiationException e) {
return false;
}
}
/** Purges given node. */
public boolean purgeNode(JID jid, String nodeName, PacketID id) {
if (connBean == null || nodeName == null || jid == null) return false;
try {
PubsubOwnerOpsBuilder poob = new PubsubOwnerOpsBuilder();
poob.setName("purge");
poob.setNode(nodeName);
IQPubsubBuilder pb = new IQPubsubBuilder();
pb.setChild(new PubsubOwnerOps(poob));
IQPubsub iqp = new IQPubsub(pb);
// pubsub on buddyspace doesn't like the '#owner' namespace for
// purge command, but wildfire pubsub requires it!
iqp.useOwnerNamespace = !jid.toSimpleString().equals("pubsub.buddyspace.org");
return sendIQ(iqp, jid, "set", id);
} catch (InstantiationException e) {
return false;
}
}
/** Publishes given xml into given jid and node */
public boolean publishItem(XMLData xmlData, String itemID,
JID jid, String nodeName, PacketID id) {
if (connBean == null || nodeName == null ||
jid == null || xmlData == null) return false;
try {
PubsubItemBuilder pib = new PubsubItemBuilder();
pib.setIsItem(true);
pib.setId(itemID);
pib.setXML(xmlData);
PubsubPublishBuilder ppb = new PubsubPublishBuilder();
ppb.setIsPublish(true);
ppb.setNode(nodeName);
ppb.addItem(new PubsubItem(pib));
IQPubsubBuilder pb = new IQPubsubBuilder();
pb.setChild(new PubsubPublish(ppb));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "set", id);
} catch (InstantiationException e) {
return false;
}
}
/** Deletes item with given id from jid and node */
public boolean deleteItem(String itemID, JID jid, String nodeName, PacketID id) {
if (connBean == null || nodeName == null ||
jid == null || itemID == null) return false;
try {
PubsubItemBuilder pib = new PubsubItemBuilder();
pib.setIsItem(true);
pib.setId(itemID);
PubsubPublishBuilder ppb = new PubsubPublishBuilder();
ppb.setIsPublish(false); // that means it's rectract
ppb.setNode(nodeName);
ppb.addItem(new PubsubItem(pib));
IQPubsubBuilder pb = new IQPubsubBuilder();
pb.setChild(new PubsubPublish(ppb));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "set", id);
} catch (InstantiationException e) {
return false;
}
}
/** Subscribes to the node. */
public boolean subscribeToNode(JID subscriberJID, JID jid,
String nodeName, PacketID id) {
return subscribeToNode(subscriberJID, true, jid, nodeName, id);
}
/** Unsubscribes from the node. */
public boolean unsubscribeFromNode(JID subscriberJID, JID jid,
String nodeName, PacketID id) {
return subscribeToNode(subscriberJID, false, jid, nodeName, id);
}
/** Subscribes/unsubscribes to/from the node.
* If <code>subscribe</code> is <code>true</code> subscribes,
* otherwise unsubscribes.
*/
protected boolean subscribeToNode(JID subscriberJID, boolean subscribe, JID jid,
String nodeName, PacketID id) {
if (connBean == null || nodeName == null || jid == null) return false;
try {
PubsubSubscribeBuilder psb = new PubsubSubscribeBuilder();
psb.setIsUnsubscribe(!subscribe);
psb.setNode(nodeName);
psb.setJID(subscriberJID);
IQPubsubBuilder pb = new IQPubsubBuilder();
pb.setChild(new PubsubSubscribe(psb));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "set", id);
} catch (InstantiationException e) {
return false;
}
}
/** Send owner request for all pending subscription requests */
public boolean requestAllPendingSubscriptions(JID jid,
/*String nodeName,*/ PacketID id) {
if (connBean == null || /*nodeName == null ||*/ jid == null) return false;
try {
XPubsubOwnerBuilder pob = new XPubsubOwnerBuilder();
pob.setAction("get-pending");
MessageBuilder mb = new MessageBuilder();
mb.setToAddress(jid);
mb.setIdentifier(id.getID());
mb.addExtension(new XPubsubOwner(pob));
Message m = (Message) mb.build();
if (id != null) id.setID(m.getIdentifier());
connBean.send(m);
return true;
} catch (InstantiationException e) {
return false;
}
}
/** Requests all current affiliations */
public boolean requestAffiliations(JID jid,
/*String nodeName,*/ PacketID id) {
if (connBean == null || /*nodeName == null ||*/ jid == null) return false;
try {
PubsubAffiliationsBuilder pab = new PubsubAffiliationsBuilder();
IQPubsubBuilder pb = new IQPubsubBuilder();
pb.setChild(new PubsubAffiliations(pab));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "get", id);
} catch (InstantiationException e) {
return false;
}
}
/** Requests subscription options. */
public boolean requestSubscriptionOptions(JID subscriberJID, JID jid,
String nodeName, PacketID id) {
if (connBean == null || nodeName == null || jid == null || subscriberJID == null)
return false;
try {
PubsubOptionsBuilder pob = new PubsubOptionsBuilder();
pob.setNode(nodeName);
pob.setJID(subscriberJID);
IQPubsubBuilder pb = new IQPubsubBuilder();
pb.setChild(new PubsubOptions(pob));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "get", id);
} catch (InstantiationException e) {
return false;
}
}
/** Sets subscription options. */
public boolean setSubscriptionOptions(XData form, JID subscriberJID, JID jid,
String nodeName, PacketID id) {
if (connBean == null || nodeName == null || jid == null
|| subscriberJID == null || form == null) return false;
try {
PubsubOptionsBuilder pob = new PubsubOptionsBuilder();
pob.setNode(nodeName);
pob.setJID(subscriberJID);
pob.setForm(form);
IQPubsubBuilder pb = new IQPubsubBuilder();
pb.setChild(new PubsubOptions(pob));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "set", id);
} catch (InstantiationException e) {
return false;
}
}
/** Requests all active items. */
public boolean requestItems(JID jid, String nodeName, PacketID id) {
return requestItems(-1, jid, nodeName, id);
}
/** Requests most recent active items. <code>maxItems</code> is maximum
* number of items returned. Gets all items for <code>maxItems</code> equal -1.*/
public boolean requestItems(int maxItems, JID jid, String nodeName, PacketID id) {
if (connBean == null || nodeName == null || jid == null) return false;
try {
PubsubItemsBuilder pib = new PubsubItemsBuilder();
pib.setMaxItems(((maxItems == -1)? null : Integer.toString(maxItems)));
pib.setNode(nodeName);
IQPubsubBuilder pb = new IQPubsubBuilder();
pb.setChild(new PubsubItems(pib));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "get", id);
} catch (InstantiationException e) {
return false;
}
}
/** Requests items with given IDs. If no IDs specified asks for all active.*/
public boolean requestItems(String[] ids, JID jid, String nodeName, PacketID id) {
if (connBean == null || nodeName == null || jid == null) return false;
try {
PubsubItemsBuilder pib = new PubsubItemsBuilder();
pib.setNode(nodeName);
PubsubItemBuilder pitemb = new PubsubItemBuilder();
for (int i=0; ids != null && i < ids.length; i++) {
pitemb.reset();
pitemb.setIsItem(true);
pitemb.setId(ids[i]);
pib.addItem(new PubsubItem(pitemb));
}
IQPubsubBuilder pb = new IQPubsubBuilder();
pb.setChild(new PubsubItems(pib));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "get", id);
} catch (InstantiationException e) {
return false;
}
}
/** Sends request for configuration of given node. */
public boolean requestNodeConfiguration(JID jid, String nodeName, PacketID id) {
if (nodeName == null) return false;
return requestNodeConfImpl(jid, nodeName, id);
}
/** Sends request for default configuration of node. */
public boolean requestDefaultNodeConfiguration(JID jid, PacketID id) {
return requestNodeConfImpl(jid, null, id);
}
/** Sends request for configuration of given node or default configuration
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -