JinglePacket.java

 1package eu.siacs.conversations.xmpp.jingle.stanzas;
 2
 3import android.support.annotation.NonNull;
 4
 5import com.google.common.base.CaseFormat;
 6import com.google.common.base.Preconditions;
 7
 8import eu.siacs.conversations.xml.Element;
 9import eu.siacs.conversations.xml.Namespace;
10import eu.siacs.conversations.xmpp.stanzas.IqPacket;
11
12public class JinglePacket extends IqPacket {
13
14    private JinglePacket() {
15        super();
16    }
17
18    public JinglePacket(final Action action, final String sessionId) {
19        super(TYPE.SET);
20        final Element jingle = addChild("jingle", Namespace.JINGLE);
21        jingle.setAttribute("sid", sessionId);
22        jingle.setAttribute("action", action.toString());
23    }
24
25    public static JinglePacket upgrade(final IqPacket iqPacket) {
26        Preconditions.checkArgument(iqPacket.hasChild("jingle", Namespace.JINGLE));
27        final JinglePacket jinglePacket = new JinglePacket();
28        jinglePacket.setAttributes(iqPacket.getAttributes());
29        jinglePacket.setChildren(iqPacket.getChildren());
30        return jinglePacket;
31    }
32
33    public Content getJingleContent() {
34        final Element content = getJingleChild("content");
35        return content == null ? null : Content.upgrade(content);
36    }
37
38    public void setJingleContent(final Content content) { //take content interface
39        setJingleChild(content);
40    }
41
42    public Reason getReason() {
43        final Element reason = getJingleChild("reason");
44        return reason == null ? null : Reason.upgrade(reason);
45    }
46
47    public void setReason(final Reason reason) {
48        final Element jingle = findChild("jingle", Namespace.JINGLE);
49        jingle.addChild(reason);
50    }
51
52    public Element getJingleChild(final String name) {
53        final Element jingle = findChild("jingle", Namespace.JINGLE);
54        return jingle == null ? null :  jingle.findChild(name);
55    }
56
57    public void setJingleChild(final Element child) {
58        final Element jingle = findChild("jingle", Namespace.JINGLE);
59        jingle.addChild(child);
60    }
61
62    public String getSessionId() {
63        return findChild("jingle", Namespace.JINGLE).getAttribute("sid");
64    }
65
66    public Action getAction() {
67        return Action.of(findChild("jingle", Namespace.JINGLE).getAttribute("action"));
68    }
69
70    public enum Action {
71        CONTENT_ACCEPT,
72        CONTENT_ADD,
73        CONTENT_MODIFY,
74        CONTENT_REJECT,
75        CONTENT_REMOVE,
76        DESCRIPTION_INFO,
77        SECURITY_INFO,
78        SESSION_ACCEPT,
79        SESSION_INFO,
80        SESSION_INITIATE,
81        SESSION_TERMINATE,
82        TRANSPORT_ACCEPT,
83        TRANSPORT_INFO,
84        TRANSPORT_REJECT,
85        TRANSPORT_REPLACE;
86
87        public static Action of(final String value) {
88            //TODO handle invalid
89            return Action.valueOf(CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_UNDERSCORE, value));
90        }
91
92        @Override
93        @NonNull
94        public String toString() {
95            return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, super.toString());
96        }
97    }
98}