1package eu.siacs.conversations.generator;
2
3import java.util.Arrays;
4import java.util.Collections;
5import java.util.List;
6
7import eu.siacs.conversations.xml.Element;
8import eu.siacs.conversations.xmpp.pep.Avatar;
9import eu.siacs.conversations.xmpp.stanzas.IqPacket;
10
11public class IqGenerator extends AbstractGenerator {
12
13 public IqPacket discoResponse(IqPacket request) {
14 IqPacket packet = new IqPacket(IqPacket.TYPE_RESULT);
15 packet.setId(request.getId());
16 packet.setTo(request.getFrom());
17 Element query = packet.addChild("query",
18 "http://jabber.org/protocol/disco#info");
19 query.setAttribute("node", request.query().getAttribute("node"));
20 Element identity = query.addChild("identity");
21 identity.setAttribute("category", "client");
22 identity.setAttribute("type", this.IDENTITY_TYPE);
23 identity.setAttribute("name", IDENTITY_NAME);
24 List<String> features = Arrays.asList(FEATURES);
25 Collections.sort(features);
26 for (String feature : features) {
27 query.addChild("feature").setAttribute("var", feature);
28 }
29 return packet;
30 }
31
32 protected IqPacket publish(String node, Element item) {
33 IqPacket packet = new IqPacket(IqPacket.TYPE_SET);
34 Element pubsub = packet.addChild("pubsub",
35 "http://jabber.org/protocol/pubsub");
36 Element publish = pubsub.addChild("publish");
37 publish.setAttribute("node", node);
38 publish.addChild(item);
39 return packet;
40 }
41
42 protected IqPacket retrieve(String node, Element item) {
43 IqPacket packet = new IqPacket(IqPacket.TYPE_GET);
44 Element pubsub = packet.addChild("pubsub",
45 "http://jabber.org/protocol/pubsub");
46 Element items = pubsub.addChild("items");
47 items.setAttribute("node", node);
48 if (item != null) {
49 items.addChild(item);
50 }
51 return packet;
52 }
53
54 public IqPacket publishAvatar(Avatar avatar) {
55 Element item = new Element("item");
56 item.setAttribute("id", avatar.sha1sum);
57 Element data = item.addChild("data", "urn:xmpp:avatar:data");
58 data.setContent(avatar.image);
59 return publish("urn:xmpp:avatar:data", item);
60 }
61
62 public IqPacket publishAvatarMetadata(Avatar avatar) {
63 Element item = new Element("item");
64 item.setAttribute("id", avatar.sha1sum);
65 Element metadata = item
66 .addChild("metadata", "urn:xmpp:avatar:metadata");
67 Element info = metadata.addChild("info");
68 info.setAttribute("bytes", avatar.size);
69 info.setAttribute("id", avatar.sha1sum);
70 info.setAttribute("height", avatar.height);
71 info.setAttribute("width", avatar.height);
72 info.setAttribute("type", avatar.type);
73 return publish("urn:xmpp:avatar:metadata", item);
74 }
75
76 public IqPacket retrieveAvatar(Avatar avatar) {
77 Element item = new Element("item");
78 item.setAttribute("id", avatar.sha1sum);
79 IqPacket packet = retrieve("urn:xmpp:avatar:data", item);
80 packet.setTo(avatar.owner);
81 return packet;
82 }
83
84 public IqPacket retrieveAvatarMetaData(String to) {
85 IqPacket packet = retrieve("urn:xmpp:avatar:metadata", null);
86 if (to != null) {
87 packet.setTo(to);
88 }
89 return packet;
90 }
91}