/* * JabberForm.java * * Created on 12 Март 2009 г., 0:19 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ // #sijapp cond.if protocols_JABBER is "true" # package protocol.xmpp; import jimm.Jimm; import jimm.comm.*; import jimmui.view.form.Form; import jimmui.view.form.FormListener; import protocol.*; /** * * @author Vladimir Krukov */ final class XmppForm implements FormListener { private XForm form; private Xmpp xmpp; private String jid; private String id; public final static byte TYPE_REGISTER = 0; public final static byte TYPE_CAPTCHA = 1; public final static byte TYPE_OWNER = 2; public final static byte TYPE_NONE = 3; private byte type = TYPE_CAPTCHA; /** Creates a new instance of JabberForm */ public XmppForm(byte formType, Xmpp protocol, String resourceJid) { xmpp = protocol; jid = resourceJid; type = formType; id = newId(); form = new XForm(); } private String typeToTitle(byte type) { switch (type) { case TYPE_CAPTCHA: return "captcha"; case TYPE_REGISTER: return "registration"; case TYPE_OWNER: return "options"; } return null; } private String newId() { return "forms" + Util.uniqueValue(); } private String getJid() { return jid; } public boolean isWaiting() { return form.isWaiting(); } public void loadFromXml(XmlNode xml, XmlNode baseXml) { id = newId(); form.loadFromXml(xml, baseXml); } public void show() { form.init(typeToTitle(type), this); form.setWainting(); form.getForm().show(); } public void showCaptcha(XmlNode baseNode) { form.init(typeToTitle(type), this); final String S_CAPTCHA = "c" + "aptcha"; XmlNode captcha = baseNode.getFirstNode(S_CAPTCHA); id = baseNode.getAttribute("i" + "d"); form.loadXFromXml(captcha, baseNode); form.getForm().showTop(); } public String getId() { return id; } public void formAction(Form uiForm, boolean apply) { if (apply) { if (0 < form.getSize()) { doAction(); } } else { switch (type) { case TYPE_CAPTCHA: Contact c = xmpp.getItemByUID(jid); Jimm.getJimm().getCL().activate(c); return; } form.back(); } } void error(String description) { type = TYPE_NONE; form.setErrorMessage(description); } void success() { Jimm.getJimm().getCL().activate(xmpp.getItemByUID(jid)); } private String getCaptchaXml() { return "<iq type='set' to='" + Util.xmlEscape(jid) + "' id='" + Util.xmlEscape(id) + "'><captcha xmlns='urn:xmpp:captcha'>" + form.getXmlForm() + "</captcha></iq>"; } private String getRegisterXml() { return "<iq type='set' to='" + Util.xmlEscape(jid) + "' id='" + Util.xmlEscape(id) + "'><query xmlns='jabber:iq:register'>" + form.getXmlForm() + "</query></iq>"; } private String getOwnerXml() { return "<iq type='set' to='" + Util.xmlEscape(jid) + "' id='" + Util.xmlEscape(id) + "'><query xmlns='http://jabber.org/protocol/muc#owner'>" + form.getXmlForm() + "</query></iq>"; } private void doAction() { switch (type) { case TYPE_REGISTER: xmpp.getConnection().register2(this, getRegisterXml(), getJid()); break; case TYPE_CAPTCHA: xmpp.getConnection().requestRawXml(getCaptchaXml()); Jimm.getJimm().getCL().activate(xmpp.getItemByUID(jid)); break; case TYPE_OWNER: xmpp.getConnection().requestRawXml(getOwnerXml()); Jimm.getJimm().getCL().activate(xmpp.getItemByUID(jid)); break; case TYPE_NONE: form.back(); break; } } } // #sijapp cond.end #