Add copy constructor to Message and Presence

and also implement Cloneable and add clone() methods.
This commit is contained in:
Florian Schmaus 2015-02-23 22:15:57 +01:00
parent bc3bbb5bb4
commit e9dd3e2fa6
2 changed files with 62 additions and 2 deletions

View File

@ -50,7 +50,7 @@ import org.jivesoftware.smack.util.XmlStringBuilder;
*
* @author Matt Tucker
*/
public final class Message extends Stanza {
public final class Message extends Stanza implements Cloneable {
public static final String ELEMENT = "message";
public static final String BODY = "body";
@ -98,6 +98,23 @@ public final class Message extends Stanza {
setBody(body);
}
/**
* Copy constructor.
* <p>
* This does not perform a deep clone, as extension elements are shared between the new and old
* instance.
* </p>
*
* @param other
*/
public Message(Message other) {
super(other);
this.type = other.type;
this.thread = other.thread;
this.subjects.addAll(other.subjects);
this.bodies.addAll(other.bodies);
}
/**
* Returns the type of the message. If no type has been set this method will return {@link
* org.jivesoftware.smack.packet.Message.Type#normal}.
@ -445,6 +462,19 @@ public final class Message extends Stanza {
return buf;
}
/**
* Creates and returns a copy of this message stanza.
* <p>
* This does not perform a deep clone, as extension elements are shared between the new and old
* instance.
* </p>
* @return a clone of this message.
*/
@Override
public Message clone() {
return new Message(this);
}
/**
* Represents a message subject, its language and the content of the subject.
*/

View File

@ -55,7 +55,7 @@ import org.jivesoftware.smack.util.XmlStringBuilder;
*
* @author Matt Tucker
*/
public final class Presence extends Stanza {
public final class Presence extends Stanza implements Cloneable {
public static final String ELEMENT = "presence";
@ -88,6 +88,23 @@ public final class Presence extends Stanza {
setMode(mode);
}
/**
* Copy constructor.
* <p>
* This does not perform a deep clone, as extension elements are shared between the new and old
* instance.
* </p>
*
* @param other
*/
public Presence(Presence other) {
super(other);
this.type = other.type;
this.status = other.status;
this.priority = other.priority;
this.mode = other.mode;
}
/**
* Returns true if the {@link Type presence type} is available (online) and
* false if the user is unavailable (offline), or if this is a presence packet
@ -228,6 +245,19 @@ public final class Presence extends Stanza {
return buf;
}
/**
* Creates and returns a copy of this presence stanza.
* <p>
* This does not perform a deep clone, as extension elements are shared between the new and old
* instance.
* </p>
* @return a clone of this presence.
*/
@Override
public Presence clone() {
return new Presence(this);
}
/**
* An enum to represent the presence type. Note that presence type is often confused
* with presence mode. Generally, if a user is signed in to a server, they have a presence