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.entities.Account;
  8import eu.siacs.conversations.services.MessageArchiveService;
  9import eu.siacs.conversations.services.XmppConnectionService;
 10import eu.siacs.conversations.utils.Xmlns;
 11import eu.siacs.conversations.xml.Element;
 12import eu.siacs.conversations.xmpp.forms.Data;
 13import eu.siacs.conversations.xmpp.jid.Jid;
 14import eu.siacs.conversations.xmpp.pep.Avatar;
 15import eu.siacs.conversations.xmpp.stanzas.IqPacket;
 16
 17public class IqGenerator extends AbstractGenerator {
 18
 19	public IqGenerator(final XmppConnectionService service) {
 20		super(service);
 21	}
 22
 23	public IqPacket discoResponse(final IqPacket request) {
 24		final IqPacket packet = new IqPacket(IqPacket.TYPE.RESULT);
 25		packet.setId(request.getId());
 26		packet.setTo(request.getFrom());
 27		final Element query = packet.addChild("query",
 28				"http://jabber.org/protocol/disco#info");
 29		query.setAttribute("node", request.query().getAttribute("node"));
 30		final Element identity = query.addChild("identity");
 31		identity.setAttribute("category", "client");
 32		identity.setAttribute("type", this.IDENTITY_TYPE);
 33		identity.setAttribute("name", IDENTITY_NAME);
 34		final List<String> features = Arrays.asList(FEATURES);
 35		Collections.sort(features);
 36		for (final String feature : features) {
 37			query.addChild("feature").setAttribute("var", feature);
 38		}
 39		return packet;
 40	}
 41
 42	protected IqPacket publish(final String node, final Element item) {
 43		final IqPacket packet = new IqPacket(IqPacket.TYPE.SET);
 44		final Element pubsub = packet.addChild("pubsub",
 45				"http://jabber.org/protocol/pubsub");
 46		final Element publish = pubsub.addChild("publish");
 47		publish.setAttribute("node", node);
 48		publish.addChild(item);
 49		return packet;
 50	}
 51
 52	protected IqPacket retrieve(String node, Element item) {
 53		final IqPacket packet = new IqPacket(IqPacket.TYPE.GET);
 54		final Element pubsub = packet.addChild("pubsub",
 55				"http://jabber.org/protocol/pubsub");
 56		final Element items = pubsub.addChild("items");
 57		items.setAttribute("node", node);
 58		if (item != null) {
 59			items.addChild(item);
 60		}
 61		return packet;
 62	}
 63
 64	public IqPacket publishAvatar(Avatar avatar) {
 65		final Element item = new Element("item");
 66		item.setAttribute("id", avatar.sha1sum);
 67		final Element data = item.addChild("data", "urn:xmpp:avatar:data");
 68		data.setContent(avatar.image);
 69		return publish("urn:xmpp:avatar:data", item);
 70	}
 71
 72	public IqPacket publishAvatarMetadata(final Avatar avatar) {
 73		final Element item = new Element("item");
 74		item.setAttribute("id", avatar.sha1sum);
 75		final Element metadata = item
 76			.addChild("metadata", "urn:xmpp:avatar:metadata");
 77		final Element info = metadata.addChild("info");
 78		info.setAttribute("bytes", avatar.size);
 79		info.setAttribute("id", avatar.sha1sum);
 80		info.setAttribute("height", avatar.height);
 81		info.setAttribute("width", avatar.height);
 82		info.setAttribute("type", avatar.type);
 83		return publish("urn:xmpp:avatar:metadata", item);
 84	}
 85
 86	public IqPacket retrieveAvatar(final Avatar avatar) {
 87		final Element item = new Element("item");
 88		item.setAttribute("id", avatar.sha1sum);
 89		final IqPacket packet = retrieve("urn:xmpp:avatar:data", item);
 90		packet.setTo(avatar.owner);
 91		return packet;
 92	}
 93
 94	public IqPacket retrieveAvatarMetaData(final Jid to) {
 95		final IqPacket packet = retrieve("urn:xmpp:avatar:metadata", null);
 96		if (to != null) {
 97			packet.setTo(to);
 98		}
 99		return packet;
100	}
101
102	public IqPacket queryMessageArchiveManagement(final MessageArchiveService.Query mam) {
103		final IqPacket packet = new IqPacket(IqPacket.TYPE.SET);
104		final Element query = packet.query("urn:xmpp:mam:0");
105		query.setAttribute("queryid",mam.getQueryId());
106		final Data data = new Data();
107		data.setFormType("urn:xmpp:mam:0");
108		if (mam.getWith()!=null) {
109			data.put("with", mam.getWith().toString());
110		}
111		data.put("start",getTimestamp(mam.getStart()));
112		data.put("end",getTimestamp(mam.getEnd()));
113		query.addChild(data);
114		if (mam.getPagingOrder() == MessageArchiveService.PagingOrder.REVERSE) {
115			query.addChild("set", "http://jabber.org/protocol/rsm").addChild("before").setContent(mam.getReference());
116		} else if (mam.getReference() != null) {
117			query.addChild("set", "http://jabber.org/protocol/rsm").addChild("after").setContent(mam.getReference());
118		}
119		return packet;
120	}
121	public IqPacket generateGetBlockList() {
122		final IqPacket iq = new IqPacket(IqPacket.TYPE.GET);
123		iq.addChild("blocklist", Xmlns.BLOCKING);
124
125		return iq;
126	}
127
128	public IqPacket generateSetBlockRequest(final Jid jid) {
129		final IqPacket iq = new IqPacket(IqPacket.TYPE.SET);
130		final Element block = iq.addChild("block", Xmlns.BLOCKING);
131		block.addChild("item").setAttribute("jid", jid.toBareJid().toString());
132		return iq;
133	}
134
135	public IqPacket generateSetUnblockRequest(final Jid jid) {
136		final IqPacket iq = new IqPacket(IqPacket.TYPE.SET);
137		final Element block = iq.addChild("unblock", Xmlns.BLOCKING);
138		block.addChild("item").setAttribute("jid", jid.toBareJid().toString());
139		return iq;
140	}
141
142	public IqPacket generateSetPassword(final Account account, final String newPassword) {
143		final IqPacket packet = new IqPacket(IqPacket.TYPE.SET);
144		packet.setTo(account.getServer());
145		final Element query = packet.addChild("query", Xmlns.REGISTER);
146		final Jid jid = account.getJid();
147		query.addChild("username").setContent(jid.getLocalpart());
148		query.addChild("password").setContent(newPassword);
149		return packet;
150	}
151}