IqGenerator.java

  1package eu.siacs.conversations.generator;
  2
  3import java.util.Arrays;
  4import java.util.Collections;
  5import java.util.List;
  6
  7import eu.siacs.conversations.services.MessageArchiveService;
  8import eu.siacs.conversations.services.XmppConnectionService;
  9import eu.siacs.conversations.xml.Element;
 10import eu.siacs.conversations.xmpp.forms.Data;
 11import eu.siacs.conversations.xmpp.jid.Jid;
 12import eu.siacs.conversations.xmpp.pep.Avatar;
 13import eu.siacs.conversations.xmpp.stanzas.IqPacket;
 14
 15public class IqGenerator extends AbstractGenerator {
 16
 17	public IqGenerator(XmppConnectionService service) {
 18		super(service);
 19	}
 20
 21	public IqPacket discoResponse(IqPacket request) {
 22		IqPacket packet = new IqPacket(IqPacket.TYPE_RESULT);
 23		packet.setId(request.getId());
 24        packet.setTo(request.getFrom());
 25		Element query = packet.addChild("query",
 26				"http://jabber.org/protocol/disco#info");
 27		query.setAttribute("node", request.query().getAttribute("node"));
 28		Element identity = query.addChild("identity");
 29		identity.setAttribute("category", "client");
 30		identity.setAttribute("type", this.IDENTITY_TYPE);
 31		identity.setAttribute("name", IDENTITY_NAME);
 32		List<String> features = Arrays.asList(FEATURES);
 33		Collections.sort(features);
 34		for (String feature : features) {
 35			query.addChild("feature").setAttribute("var", feature);
 36		}
 37		return packet;
 38	}
 39
 40	protected IqPacket publish(String node, Element item) {
 41		IqPacket packet = new IqPacket(IqPacket.TYPE_SET);
 42		Element pubsub = packet.addChild("pubsub",
 43				"http://jabber.org/protocol/pubsub");
 44		Element publish = pubsub.addChild("publish");
 45		publish.setAttribute("node", node);
 46		publish.addChild(item);
 47		return packet;
 48	}
 49
 50	protected IqPacket retrieve(String node, Element item) {
 51		IqPacket packet = new IqPacket(IqPacket.TYPE_GET);
 52		Element pubsub = packet.addChild("pubsub",
 53				"http://jabber.org/protocol/pubsub");
 54		Element items = pubsub.addChild("items");
 55		items.setAttribute("node", node);
 56		if (item != null) {
 57			items.addChild(item);
 58		}
 59		return packet;
 60	}
 61
 62	public IqPacket publishAvatar(Avatar avatar) {
 63		Element item = new Element("item");
 64		item.setAttribute("id", avatar.sha1sum);
 65		Element data = item.addChild("data", "urn:xmpp:avatar:data");
 66		data.setContent(avatar.image);
 67		return publish("urn:xmpp:avatar:data", item);
 68	}
 69
 70	public IqPacket publishAvatarMetadata(Avatar avatar) {
 71		Element item = new Element("item");
 72		item.setAttribute("id", avatar.sha1sum);
 73		Element metadata = item
 74				.addChild("metadata", "urn:xmpp:avatar:metadata");
 75		Element info = metadata.addChild("info");
 76		info.setAttribute("bytes", avatar.size);
 77		info.setAttribute("id", avatar.sha1sum);
 78		info.setAttribute("height", avatar.height);
 79		info.setAttribute("width", avatar.height);
 80		info.setAttribute("type", avatar.type);
 81		return publish("urn:xmpp:avatar:metadata", item);
 82	}
 83
 84	public IqPacket retrieveAvatar(Avatar avatar) {
 85		Element item = new Element("item");
 86		item.setAttribute("id", avatar.sha1sum);
 87		IqPacket packet = retrieve("urn:xmpp:avatar:data", item);
 88		packet.setTo(avatar.owner);
 89		return packet;
 90	}
 91
 92	public IqPacket retrieveAvatarMetaData(final Jid to) {
 93		final IqPacket packet = retrieve("urn:xmpp:avatar:metadata", null);
 94		if (to != null) {
 95			packet.setTo(to);
 96		}
 97		return packet;
 98	}
 99
100	public IqPacket queryMessageArchiveManagement(MessageArchiveService.Query mam) {
101		final IqPacket packet = new IqPacket(IqPacket.TYPE_SET);
102		Element query = packet.query("urn:xmpp:mam:0");
103		query.setAttribute("queryid",mam.getQueryId());
104		Data data = new Data();
105		data.setFormType("urn:xmpp:mam:0");
106		data.put("with",mam.getWith().toString());
107		data.put("start",getTimestamp(mam.getStart()));
108		data.put("end",getTimestamp(mam.getEnd()));
109		query.addChild(data);
110		if (mam.getAfter() != null) {
111			query.addChild("set", "http://jabber.org/protocol/rsm").addChild("after").setContent(mam.getAfter());
112		}
113		return packet;
114	}
115}