boolean incoming, boolean processed) throws PacketRejectedException {
// We only care for incoming Messages has not yet been processed
if (incoming && !processed && packet instanceof Message) {
final Message message = (Message) packet;
final JID fromJID = message.getFrom();
final JID toJID = message.getTo();
// We are only interested by message to bareJID (we don't touch the one sent to fullJID)
if (!toJID.toBareJID().equalsIgnoreCase(toJID.toString())) {
return;
}
// We only care for messaes to local users
if (!server.isLocal(toJID)
|| !server.getUserManager().isRegisteredUser(toJID)) {
return;
}
// We only bother about pubsub events
Element eventElement = message.getChildElement("event",
"http://jabber.org/protocol/pubsub#event");
if (eventElement == null) {
return;
}
// That contains items
Element itemsElement = eventElement.element("items");
if (itemsElement == null || itemsElement.attribute("node") == null)
return;
// Relating to the microblogging node
if (itemsElement.attribute("node").getValue().equals(
PEPActivityHandler.NODE)) {
Log.debug("Processing an activity event from " + fromJID
+ " to " + toJID);
final ActivityDomReader reader = new PersistentActivityDomReader();
List<Element> items=(List<Element>) itemsElement.elements("item");
if ((items!=null) && (items.size()!=0)){
for (Element itemElement :items) {
ActivityEntry activity = reader
.readEntry(new ElementAdapter(itemElement
.element("entry")));
try {
ActivityManager.getInstance().handleMessage(
fromJID.toBareJID(), toJID.toBareJID(),
activity);
} catch (InvalidActivityException e) {
throw new PacketRejectedException();
} catch (AccessDeniedException e) {
throw new PacketRejectedException();
}
}
} else if (itemsElement.element("retract")!=null)
{
Element retractElement = itemsElement.element("retract");
String activityId=reader.readActivityId(new ElementAdapter(retractElement));
ActivityManager.getInstance().deleteMessage(activityId);
}
Set<JID> recipientFullJIDs = getFullJIDs(toJID
.toBareJID());
Iterator<JID> it = recipientFullJIDs.iterator();
Message extendedMessage = message.createCopy();
while (it.hasNext()) {
String fullJid = it.next().toString();
extendedMessage.setTo(fullJid);
server.getMessageRouter().route(extendedMessage);
}
throw new PacketRejectedException();
}