mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-25 15:52:06 +01:00
Improve MUC's Destroy element class
- Made jid of type BareJid - Made it implement TypedCloneable - Made it implement Serializable - Made it immutable Also update its parsing code. And add some convenience methods to ParserUtils.
This commit is contained in:
parent
369878b6d9
commit
516e397679
4 changed files with 66 additions and 39 deletions
|
@ -19,6 +19,7 @@ package org.jivesoftware.smack.util;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import org.jxmpp.jid.BareJid;
|
||||||
import org.jxmpp.jid.Jid;
|
import org.jxmpp.jid.Jid;
|
||||||
import org.jxmpp.jid.impl.JidCreate;
|
import org.jxmpp.jid.impl.JidCreate;
|
||||||
import org.jxmpp.jid.parts.Resourcepart;
|
import org.jxmpp.jid.parts.Resourcepart;
|
||||||
|
@ -27,6 +28,12 @@ import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
public class ParserUtils {
|
public class ParserUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The constant String "jid".
|
||||||
|
*/
|
||||||
|
public static final String JID = "jid";
|
||||||
|
|
||||||
public static void assertAtStartTag(XmlPullParser parser) throws XmlPullParserException {
|
public static void assertAtStartTag(XmlPullParser parser) throws XmlPullParserException {
|
||||||
assert(parser.getEventType() == XmlPullParser.START_TAG);
|
assert(parser.getEventType() == XmlPullParser.START_TAG);
|
||||||
}
|
}
|
||||||
|
@ -44,7 +51,7 @@ public class ParserUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Jid getJidAttribute(XmlPullParser parser) throws XmppStringprepException {
|
public static Jid getJidAttribute(XmlPullParser parser) throws XmppStringprepException {
|
||||||
return getJidAttribute(parser, "jid");
|
return getJidAttribute(parser, JID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Jid getJidAttribute(XmlPullParser parser, String name) throws XmppStringprepException {
|
public static Jid getJidAttribute(XmlPullParser parser, String name) throws XmppStringprepException {
|
||||||
|
@ -55,6 +62,18 @@ public class ParserUtils {
|
||||||
return JidCreate.from(jidString);
|
return JidCreate.from(jidString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static BareJid getBareJidAttribute(XmlPullParser parser) throws XmppStringprepException {
|
||||||
|
return getBareJidAttribute(parser, JID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BareJid getBareJidAttribute(XmlPullParser parser, String name) throws XmppStringprepException {
|
||||||
|
final String jidString = parser.getAttributeValue("", name);
|
||||||
|
if (jidString == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return JidCreate.bareFrom(jidString);
|
||||||
|
}
|
||||||
|
|
||||||
public static Resourcepart getResourcepartAttribute(XmlPullParser parser, String name) throws XmppStringprepException {
|
public static Resourcepart getResourcepartAttribute(XmlPullParser parser, String name) throws XmppStringprepException {
|
||||||
final String resourcepartString = parser.getAttributeValue("", name);
|
final String resourcepartString = parser.getAttributeValue("", name);
|
||||||
if (resourcepartString == null) {
|
if (resourcepartString == null) {
|
||||||
|
|
|
@ -655,15 +655,13 @@ public class MultiUserChat {
|
||||||
* @throws NotConnectedException
|
* @throws NotConnectedException
|
||||||
* @throws InterruptedException
|
* @throws InterruptedException
|
||||||
*/
|
*/
|
||||||
public void destroy(String reason, String alternateJID) throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException {
|
public void destroy(String reason, BareJid alternateJID) throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException {
|
||||||
MUCOwner iq = new MUCOwner();
|
MUCOwner iq = new MUCOwner();
|
||||||
iq.setTo(room);
|
iq.setTo(room);
|
||||||
iq.setType(IQ.Type.set);
|
iq.setType(IQ.Type.set);
|
||||||
|
|
||||||
// Create the reason for the room destruction
|
// Create the reason for the room destruction
|
||||||
Destroy destroy = new Destroy();
|
Destroy destroy = new Destroy(alternateJID, reason);
|
||||||
destroy.setReason(reason);
|
|
||||||
destroy.setJid(alternateJID);
|
|
||||||
iq.setDestroy(destroy);
|
iq.setDestroy(destroy);
|
||||||
|
|
||||||
connection.createPacketCollectorAndSend(iq).nextResultOrThrow();
|
connection.createPacketCollectorAndSend(iq).nextResultOrThrow();
|
||||||
|
|
|
@ -16,8 +16,12 @@
|
||||||
*/
|
*/
|
||||||
package org.jivesoftware.smackx.muc.packet;
|
package org.jivesoftware.smackx.muc.packet;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
import org.jivesoftware.smack.packet.NamedElement;
|
import org.jivesoftware.smack.packet.NamedElement;
|
||||||
|
import org.jivesoftware.smack.util.TypedCloneable;
|
||||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||||
|
import org.jxmpp.jid.BareJid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a request to the server to destroy a room. The sender of the request should be the
|
* Represents a request to the server to destroy a room. The sender of the request should be the
|
||||||
|
@ -26,18 +30,32 @@ import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||||
*
|
*
|
||||||
* @author Gaston Dombiak
|
* @author Gaston Dombiak
|
||||||
*/
|
*/
|
||||||
public class Destroy implements NamedElement {
|
public class Destroy implements NamedElement, TypedCloneable<Destroy>, Serializable {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
public static final String ELEMENT = "destroy";
|
public static final String ELEMENT = "destroy";
|
||||||
|
|
||||||
private String reason;
|
private final String reason;
|
||||||
private String jid;
|
private final BareJid jid;
|
||||||
|
|
||||||
|
public Destroy(Destroy other) {
|
||||||
|
this(other.jid, other.reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Destroy(BareJid alternativeJid, String reason) {
|
||||||
|
this.jid = alternativeJid;
|
||||||
|
this.reason = reason;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the JID of an alternate location since the current room is being destroyed.
|
* Returns the JID of an alternate location since the current room is being destroyed.
|
||||||
*
|
*
|
||||||
* @return the JID of an alternate location.
|
* @return the JID of an alternate location.
|
||||||
*/
|
*/
|
||||||
public String getJid() {
|
public BareJid getJid() {
|
||||||
return jid;
|
return jid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,24 +68,6 @@ public class Destroy implements NamedElement {
|
||||||
return reason;
|
return reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the JID of an alternate location since the current room is being destroyed.
|
|
||||||
*
|
|
||||||
* @param jid the JID of an alternate location.
|
|
||||||
*/
|
|
||||||
public void setJid(String jid) {
|
|
||||||
this.jid = jid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the reason for the room destruction.
|
|
||||||
*
|
|
||||||
* @param reason the reason for the room destruction.
|
|
||||||
*/
|
|
||||||
public void setReason(String reason) {
|
|
||||||
this.reason = reason;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public XmlStringBuilder toXML() {
|
public XmlStringBuilder toXML() {
|
||||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||||
|
@ -83,4 +83,8 @@ public class Destroy implements NamedElement {
|
||||||
return ELEMENT;
|
return ELEMENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Destroy clone() {
|
||||||
|
return new Destroy(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.jivesoftware.smackx.muc.MUCAffiliation;
|
||||||
import org.jivesoftware.smackx.muc.MUCRole;
|
import org.jivesoftware.smackx.muc.MUCRole;
|
||||||
import org.jivesoftware.smackx.muc.packet.Destroy;
|
import org.jivesoftware.smackx.muc.packet.Destroy;
|
||||||
import org.jivesoftware.smackx.muc.packet.MUCItem;
|
import org.jivesoftware.smackx.muc.packet.MUCItem;
|
||||||
|
import org.jxmpp.jid.BareJid;
|
||||||
import org.jxmpp.jid.Jid;
|
import org.jxmpp.jid.Jid;
|
||||||
import org.jxmpp.jid.parts.Resourcepart;
|
import org.jxmpp.jid.parts.Resourcepart;
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
|
@ -61,22 +62,27 @@ public class MUCParserUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Destroy parseDestroy(XmlPullParser parser) throws XmlPullParserException, IOException {
|
public static Destroy parseDestroy(XmlPullParser parser) throws XmlPullParserException, IOException {
|
||||||
boolean done = false;
|
final int initialDepth = parser.getDepth();
|
||||||
Destroy destroy = new Destroy();
|
final BareJid jid = ParserUtils.getBareJidAttribute(parser);
|
||||||
destroy.setJid(parser.getAttributeValue("", "jid"));
|
String reason = null;
|
||||||
while (!done) {
|
outerloop: while (true) {
|
||||||
int eventType = parser.next();
|
int eventType = parser.next();
|
||||||
if (eventType == XmlPullParser.START_TAG) {
|
switch (eventType) {
|
||||||
if (parser.getName().equals("reason")) {
|
case XmlPullParser.START_TAG:
|
||||||
destroy.setReason(parser.nextText());
|
final String name = parser.getName();
|
||||||
|
switch (name) {
|
||||||
|
case "reason":
|
||||||
|
reason = parser.nextText();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
else if (eventType == XmlPullParser.END_TAG) {
|
case XmlPullParser.END_TAG:
|
||||||
if (parser.getName().equals("destroy")) {
|
if (initialDepth == parser.getDepth()) {
|
||||||
done = true;
|
break outerloop;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return destroy;
|
return new Destroy(jid, reason);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue