1 20 21 package org.jivesoftware.smackx.provider; 22 23 import org.jivesoftware.smack.packet.*; 24 import org.jivesoftware.smack.provider.*; 25 import org.jivesoftware.smackx.packet.*; 26 import org.xmlpull.v1.XmlPullParser; 27 28 34 public class MUCUserProvider implements PacketExtensionProvider { 35 36 41 public MUCUserProvider() { 42 } 43 44 51 public PacketExtension parseExtension(XmlPullParser parser) throws Exception { 52 MUCUser mucUser = new MUCUser(); 53 boolean done = false; 54 while (!done) { 55 int eventType = parser.next(); 56 if (eventType == XmlPullParser.START_TAG) { 57 if (parser.getName().equals("invite")) { 58 mucUser.setInvite(parseInvite(parser)); 59 } 60 if (parser.getName().equals("item")) { 61 mucUser.setItem(parseItem(parser)); 62 } 63 if (parser.getName().equals("password")) { 64 mucUser.setPassword(parser.nextText()); 65 } 66 if (parser.getName().equals("status")) { 67 mucUser.setStatus(new MUCUser.Status(parser.getAttributeValue("", "code"))); 68 } 69 if (parser.getName().equals("decline")) { 70 mucUser.setDecline(parseDecline(parser)); 71 } 72 if (parser.getName().equals("destroy")) { 73 mucUser.setDestroy(parseDestroy(parser)); 74 } 75 } 76 else if (eventType == XmlPullParser.END_TAG) { 77 if (parser.getName().equals("x")) { 78 done = true; 79 } 80 } 81 } 82 83 return mucUser; 84 } 85 86 private MUCUser.Item parseItem(XmlPullParser parser) throws Exception { 87 boolean done = false; 88 MUCUser.Item item = 89 new MUCUser.Item( 90 parser.getAttributeValue("", "affiliation"), 91 parser.getAttributeValue("", "role")); 92 item.setNick(parser.getAttributeValue("", "nick")); 93 item.setJid(parser.getAttributeValue("", "jid")); 94 while (!done) { 95 int eventType = parser.next(); 96 if (eventType == XmlPullParser.START_TAG) { 97 if (parser.getName().equals("actor")) { 98 item.setActor(parser.getAttributeValue("", "jid")); 99 } 100 if (parser.getName().equals("reason")) { 101 item.setReason(parser.nextText()); 102 } 103 } 104 else if (eventType == XmlPullParser.END_TAG) { 105 if (parser.getName().equals("item")) { 106 done = true; 107 } 108 } 109 } 110 return item; 111 } 112 113 private MUCUser.Invite parseInvite(XmlPullParser parser) throws Exception { 114 boolean done = false; 115 MUCUser.Invite invite = new MUCUser.Invite(); 116 invite.setFrom(parser.getAttributeValue("", "from")); 117 invite.setTo(parser.getAttributeValue("", "to")); 118 while (!done) { 119 int eventType = parser.next(); 120 if (eventType == XmlPullParser.START_TAG) { 121 if (parser.getName().equals("reason")) { 122 invite.setReason(parser.nextText()); 123 } 124 } 125 else if (eventType == XmlPullParser.END_TAG) { 126 if (parser.getName().equals("invite")) { 127 done = true; 128 } 129 } 130 } 131 return invite; 132 } 133 134 private MUCUser.Decline parseDecline(XmlPullParser parser) throws Exception { 135 boolean done = false; 136 MUCUser.Decline decline = new MUCUser.Decline(); 137 decline.setFrom(parser.getAttributeValue("", "from")); 138 decline.setTo(parser.getAttributeValue("", "to")); 139 while (!done) { 140 int eventType = parser.next(); 141 if (eventType == XmlPullParser.START_TAG) { 142 if (parser.getName().equals("reason")) { 143 decline.setReason(parser.nextText()); 144 } 145 } 146 else if (eventType == XmlPullParser.END_TAG) { 147 if (parser.getName().equals("decline")) { 148 done = true; 149 } 150 } 151 } 152 return decline; 153 } 154 155 private MUCUser.Destroy parseDestroy(XmlPullParser parser) throws Exception { 156 boolean done = false; 157 MUCUser.Destroy destroy = new MUCUser.Destroy(); 158 destroy.setJid(parser.getAttributeValue("", "jid")); 159 while (!done) { 160 int eventType = parser.next(); 161 if (eventType == XmlPullParser.START_TAG) { 162 if (parser.getName().equals("reason")) { 163 destroy.setReason(parser.nextText()); 164 } 165 } 166 else if (eventType == XmlPullParser.END_TAG) { 167 if (parser.getName().equals("destroy")) { 168 done = true; 169 } 170 } 171 } 172 return destroy; 173 } 174 } 175 | Popular Tags |