org.jivesoftware.openfire.forward.Forwarded Maven / Gradle / Ivy
The newest version!
package org.jivesoftware.openfire.forward;
import org.dom4j.Element;
import org.dom4j.QName;
import org.jivesoftware.util.XMPPDateTimeFormat;
import org.xmpp.packet.JID;
import org.xmpp.packet.Message;
import org.xmpp.packet.PacketExtension;
import java.util.Date;
/**
* @author Christian Schudt
*/
public class Forwarded extends PacketExtension {
public Forwarded(Element copy, Date delay, JID delayFrom) {
super("forwarded", "urn:xmpp:forward:0");
populate(copy, delay, delayFrom);
}
public Forwarded(Message message, Date delay, JID delayFrom) {
super("forwarded", "urn:xmpp:forward:0");
Message copy = message.createCopy();
populate(copy.getElement(), delay, delayFrom);
}
public Forwarded(Element copy) {
super("forwarded", "urn:xmpp:forward:0");
populate(copy, null, null);
}
public Forwarded(Message message) {
super("forwarded", "urn:xmpp:forward:0");
Message copy = message.createCopy();
populate(copy.getElement(), null, null);
}
private void populate(Element copy, Date delay, JID delayFrom) {
copy.setQName(QName.get("message", "jabber:client"));
for (Object element : copy.elements()) {
if (element instanceof Element) {
Element el = (Element) element;
// Only set the "jabber:client" namespace if the namespace is empty (otherwise the resulting xml would look like
)
if ("".equals(el.getNamespace().getStringValue())) {
el.setQName(QName.get(el.getName(), "jabber:client"));
}
}
}
if (delay != null) {
Element delayInfo = element.addElement("delay", "urn:xmpp:delay");
delayInfo.addAttribute("stamp", XMPPDateTimeFormat.format(delay));
if (delayFrom != null) {
// Set the Full JID as the "from" attribute
delayInfo.addAttribute("from", delayFrom.toString());
}
}
element.add(copy);
}
}