From 52a52e12d237387d9653f7efaedea45e3f4ea5e9 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Fri, 3 Mar 2017 21:10:58 +0100 Subject: [PATCH] Make Body and Subject implement ExtensionElement --- .../jivesoftware/smack/packet/Message.java | 56 ++++++++++++++++--- 1 file changed, 48 insertions(+), 8 deletions(-) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/Message.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/Message.java index ebf18faef..d2f096de6 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/Message.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/Message.java @@ -490,9 +490,7 @@ public final class Message extends Stanza implements TypedCloneable { // Skip the default language if(subject.equals(defaultSubject)) continue; - buf.halfOpenElement("subject").xmllangAttribute(subject.language).rightAngleBracket(); - buf.escape(subject.subject); - buf.closeElement("subject"); + buf.append(subject.toXML()); } // Add the body in the default language Body defaultBody = getMessageBody(null); @@ -504,9 +502,7 @@ public final class Message extends Stanza implements TypedCloneable { // Skip the default language if(body.equals(defaultBody)) continue; - buf.halfOpenElement(BODY).xmllangAttribute(body.getLanguage()).rightAngleBracket(); - buf.escape(body.getMessage()); - buf.closeElement(BODY); + buf.append(body.toXML()); } buf.optElement("thread", thread); // Append the error subpacket if the message type is an error. @@ -535,7 +531,10 @@ public final class Message extends Stanza implements TypedCloneable { /** * Represents a message subject, its language and the content of the subject. */ - public static final class Subject { + public static final class Subject implements ExtensionElement { + + public static final String ELEMENT = "subject"; + public static final String NAMESPACE = StreamOpen.CLIENT_NAMESPACE; private final String subject; private final String language; @@ -595,12 +594,34 @@ public final class Message extends Stanza implements TypedCloneable { return this.language.equals(other.language) && this.subject.equals(other.subject); } + @Override + public String getElementName() { + return ELEMENT; + } + + @Override + public String getNamespace() { + return NAMESPACE; + } + + @Override + public XmlStringBuilder toXML() { + XmlStringBuilder xml = new XmlStringBuilder(); + xml.halfOpenElement(getElementName()).xmllangAttribute(getLanguage()).rightAngleBracket(); + xml.escape(subject); + xml.closeElement(getElementName()); + return xml; + } + } /** * Represents a message body, its language and the content of the message. */ - public static final class Body { + public static final class Body implements ExtensionElement { + + public static final String ELEMENT = "body"; + public static final String NAMESPACE = StreamOpen.CLIENT_NAMESPACE; private final String message; private final String language; @@ -659,6 +680,25 @@ public final class Message extends Stanza implements TypedCloneable { return this.language.equals(other.language) && this.message.equals(other.message); } + @Override + public String getElementName() { + return ELEMENT; + } + + @Override + public String getNamespace() { + return NAMESPACE; + } + + @Override + public XmlStringBuilder toXML() { + XmlStringBuilder xml = new XmlStringBuilder(); + xml.halfOpenElement(getElementName()).xmllangAttribute(getLanguage()).rightAngleBracket(); + xml.escape(message); + xml.closeElement(getElementName()); + return xml; + } + } /**