📄 bspubsubbean.java
字号:
* when <code>nodeName</code> is <code>null</code>. */
protected boolean requestNodeConfImpl(JID jid, String nodeName, PacketID id) {
if (connBean == null || jid == null) return false;
try {
PubsubOwnerOpsBuilder poob = new PubsubOwnerOpsBuilder();
poob.setName("configure");
poob.setNode(nodeName);
XPubsubOwnerBuilder xpob = new XPubsubOwnerBuilder();
xpob.setChild(new PubsubOwnerOps(poob));
XPubsubOwner xpo = new XPubsubOwner(xpob);
return sendIQ(xpo, jid, "get", id);
} catch (InstantiationException e) {
return false;
}
}
/** Sets configuration of node. */
public boolean setNodeConfiguration(XData form, JID jid,
String nodeName, PacketID id) {
if (connBean == null || nodeName == null || jid == null || form == null)
return false;
try {
PubsubOwnerOpsBuilder poob = new PubsubOwnerOpsBuilder();
poob.setName("configure");
poob.setNode(nodeName);
poob.setForm(form);
XPubsubOwnerBuilder xpob = new XPubsubOwnerBuilder();
xpob.setChild(new PubsubOwnerOps(poob));
XPubsubOwner xpo = new XPubsubOwner(xpob);
return sendIQ(xpo, jid, "set", id);
} catch (InstantiationException e) {
return false;
}
}
/** Requests all entities affiliated. */
public boolean requestEntities(JID jid, String nodeName, PacketID id) {
if (connBean == null || nodeName == null || jid == null) return false;
try {
PubsubEntitiesBuilder peb = new PubsubEntitiesBuilder();
peb.setNode(nodeName);
IQPubsubBuilder pb = new IQPubsubBuilder();
pb.setChild(new PubsubEntities(peb));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "get", id);
} catch (InstantiationException e) {
return false;
}
}
/** Sets entity affiliation. */
public boolean setEntities(PubsubEntity entity, JID jid, String nodeName, PacketID id) {
if (entity == null) return false;
return setEntities(new PubsubEntity[] {entity}, jid, nodeName, id);
}
/** Sets entities affiliations. */
public boolean setEntities(PubsubEntity[] entities, JID jid, String nodeName, PacketID id) {
if (connBean == null || nodeName == null || jid == null ||
entities == null || entities.length == 0)
return false;
try {
PubsubEntitiesBuilder peb = new PubsubEntitiesBuilder();
peb.setNode(nodeName);
for (int i=0; i<entities.length; i++)
if (entities[i] != null)
peb.addEntity(entities[i]);
IQPubsubBuilder pb = new IQPubsubBuilder();
pb.setChild(new PubsubEntities(peb));
IQPubsub iqp = new IQPubsub(pb);
return sendIQ(iqp, jid, "set", id);
} catch (InstantiationException e) {
return false;
}
}
/** Sends iq packet with given extension */
public boolean sendIQ(Extension ext, JID toJID, String type, PacketID id) {
if (connBean == null || toJID == null || type == null) return false;
try {
InfoQueryBuilder iqb = new InfoQueryBuilder();
iqb.setType(type);
iqb.setToAddress(toJID);
iqb.setIdentifier(id.getID());
iqb.addExtension(ext);
InfoQuery iq = (InfoQuery) iqb.build();
if (id != null) id.setID(iq.getIdentifier());
connBean.send(iq);
return true;
} catch (InstantiationException e) {
return false;
}
}
/**
* Frees all object bindings to allow object destroy
*/
protected void prepareToDestroy() {
//removeAllBrowseListeners();
if (connBean != null) {
connBean.delPacketListener(this);
connBean = null;
}
}
// *** LISTENER METHODS ***
/** called when a packet is received and processed.
*/
public void receivedPacket(PacketEvent pe) {
if (pe == null) return;
Packet p = pe.getPacket();
if (p == null) return;
//if (p == null || !(p instanceof InfoQuery)) return;
if (p == null || !(p instanceof InfoQuery || p instanceof Message)) return;
if (p instanceof InfoQuery)
handleInfoQuery((InfoQuery)p);
else if (p instanceof Message)
handleMessage((Message)p);
}
/** handles received infoQuery packets */
public void handleInfoQuery(InfoQuery iq) {
String id = iq.getIdentifier();
String type = iq.getType();
Enumeration extEnum = iq.Extensions();
// empty result - possibly of "set"
if (!extEnum.hasMoreElements() && "result".equalsIgnoreCase(type))
fireEmptyResultReceived(iq, id);
// empty error - possibly of "set"
else if (!extEnum.hasMoreElements() && "error".equalsIgnoreCase(type))
fireError(iq, id);
else while (extEnum.hasMoreElements()) {
Object e = extEnum.nextElement();
if (e instanceof IQPubsub) {
if ("result".equalsIgnoreCase(type)) {
XMLData child = ((IQPubsub)e).child();
if (child == null)
fireEmptyResultReceived(iq, id);
else if (child instanceof PubsubCreate)
fireInstantNodeCreated(iq, ((PubsubCreate)child).getNode(), id);
else if (child instanceof PubsubEntity)
fireSubscriptionResult(iq, (PubsubEntity)child, id);
else if (child instanceof PubsubEntities)
fireNodeEntities(iq, (PubsubEntities)child, id);
else if (child instanceof PubsubAffiliations)
fireAffiliationsReceived(iq, (PubsubAffiliations)child, id);
else if (child instanceof PubsubOptions)
fireOptionsReceived(iq, (PubsubOptions)child, id);
else if (child instanceof PubsubItems)
fireItemsReceived(iq, (PubsubItems)child, id);
}
else if ("get".equalsIgnoreCase(type))
;//fireItemsRequestReceived(iq, id);
else if ("error".equalsIgnoreCase(type))
fireError(iq, id);
}
else if (e instanceof XPubsubOwner) {
if ("result".equalsIgnoreCase(type)) {
XMLData child = ((XPubsubOwner)e).child();
if (child == null)
fireEmptyResultReceived(iq, id);
else if (child instanceof PubsubOwnerOps) {
if ("configure".equals(((PubsubOwnerOps)child).getName()))
fireConfigureReceived(iq, (PubsubOwnerOps)child, id);
}
}
else if ("get".equalsIgnoreCase(type))
;//fireInfoRequestReceived(iq, id);
else if ("error".equalsIgnoreCase(type))
fireError(iq, id);
}
}
}
/** handles received message packets */
public void handleMessage(Message m) {
String id = m.getIdentifier();
String type = m.getType();
JID jid = m.getFromAddress();
Enumeration extEnum = m.Extensions();
// no extensions - nothing interesting for us
if (!extEnum.hasMoreElements())
return;
else while (extEnum.hasMoreElements()) {
Object e = extEnum.nextElement();
if (e instanceof XPubsubEvent) {
if ("error".equalsIgnoreCase(type))
;//fireError(m, id);
else {
XMLData child = ((XPubsubEvent)e).child();
if (child == null) { }
else if (child instanceof PubsubEventItems) {
fireItemsEvent(m, (PubsubEventItems)child, id);
}
else if (child instanceof PubsubOwnerOps) {
if ("delete".equalsIgnoreCase(((PubsubOwnerOps)child).getName()))
fireNodeDeletedEvent(m, ((PubsubOwnerOps)child).getNode(), id);
}
}
}
else if (e instanceof XPubsubOwner) {
if ("error".equalsIgnoreCase(type))
;//fireError(m, id);
else {
}
}
} //while
}
/** called if a packet is not successfully sent (for instance, if the connection
* dies while the packet is queued, or a packet is sent while disconnected).
*/
public void sendFailed(PacketEvent pe) {
/*if (pe == null) return;
Packet p = pe.getPacket();
//if (p == null || ! p instanceof InfoQuery) return;
if (p == null || !(p instanceof ContentPacket)) return;
String id = ((ContentPacket)p).getIdentifier();
String type = ((ContentPacket)p).getType();
Enumeration extEnum = ((ContentPacket)p).Extensions();
while (extEnum.hasMoreElements()) {
Object e = extEnum.nextElement();
if (e instanceof IQDiscoItems /*|| e instanceof IQDiscoInfo* /) {
fireSendFailed((InfoQuery)p, id);
}
}*/
}
/** called whenever a local client sends a packet, after the sending
* is successful
*/
public void sentPacket(PacketEvent pe) { }
// *** browse listeners ***
/**
* Adds <code>BSPubsubListener</code> to listeners notified when
* pubsub events.
*/
public void addPubsubListener(BSPubsubListener listener) {
if (pubsubListeners.contains(listener)) return;
pubsubListeners.add(listener);
}
/**
* Removes <code>BSPubsubListener</code> to listeners notified about
* pubsub events.
*/
public void removePubsubListener(BSPubsubListener listener) {
pubsubListeners.remove(listener);
}
/**
* Removes all listeners notified when presence state of some of buddies changes.
* This can be used before to free dependencies and allow dispose of
* all objects.
*/
public void removeAllPubsubListeners() {
pubsubListeners.clear();
}
/**
* Notifies pubsub listeners about received result of instant node creation.
*/
private void fireInstantNodeCreated(InfoQuery iq, String nodeName, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.instantNodeCreated(iq, nodeName, id);
}
}
/**
* Notifies pubsub listeners about received event - deleted node.
*/
private void fireNodeDeletedEvent(Message m, String nodeName, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.nodeDeletedEvent(m, nodeName, id);
}
}
/**
* Notifies pubsub listeners about received items event - published or retracted items.
*/
private void fireItemsEvent(Message m, PubsubEventItems items, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.itemsEvent(m, items, id);
}
}
/**
* Notifies pubsub listeners about result of subscription request.
*/
private void fireSubscriptionResult(InfoQuery iq, PubsubEntity entity, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.subscriptionResult(iq, entity, id);
}
}
/**
* Notifies pubsub listeners about result of affiliations request.
*/
private void fireAffiliationsReceived(InfoQuery iq, PubsubAffiliations affs, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.affiliationsReceived(iq, affs, id);
}
}
/**
* Notifies pubsub listeners about result of options request.
*/
private void fireOptionsReceived(InfoQuery iq, PubsubOptions options, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.optionsReceived(iq, options, id);
}
}
/**
* Notifies pubsub listeners about result of items request.
*/
private void fireItemsReceived(InfoQuery iq, PubsubItems items, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.itemsReceived(iq, items, id);
}
}
/**
* Notifies pubsub listeners about result of configure request.
*/
private void fireConfigureReceived(InfoQuery iq, PubsubOwnerOps configure, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.configureReceived(iq, configure, id);
}
}
/**
* Notifies pubsub listeners about received entities in node.
*/
private void fireNodeEntities(InfoQuery iq, PubsubEntities entities, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.nodeEntities(iq, entities, id);
}
}
/**
* Notifies pubsub listeners about received empty result possibly of previous "set".
*/
private void fireEmptyResultReceived(InfoQuery iq, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.receivedEmptyResult(iq, id);
}
}
/**
* Notifies pubsub listeners about received error.
*/
private void fireError(InfoQuery iq, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.error(iq, id);
}
}
/**
* Notifies pubsub listeners about send failure.
*/
private void fireSendFailed(InfoQuery iq, String id) {
for (Enumeration e = pubsubListeners.elements(); e.hasMoreElements(); ) {
BSPubsubListener listener = (BSPubsubListener) e.nextElement();
listener.sendFailed(iq, id);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -