diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/AffiliationsExtension.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/AffiliationsExtension.java index 2e30dd04c..c18a68243 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/AffiliationsExtension.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/AffiliationsExtension.java @@ -32,7 +32,6 @@ import org.jivesoftware.smackx.pubsub.Affiliation.AffiliationNamespace; */ public class AffiliationsExtension extends NodeExtension { protected List items = Collections.emptyList(); - private final String node; public AffiliationsExtension() { this(null); @@ -51,9 +50,8 @@ public class AffiliationsExtension extends NodeExtension { } public AffiliationsExtension(AffiliationNamespace affiliationsNamespace, List subList, String node) { - super(affiliationsNamespace.type); + super(affiliationsNamespace.type, node); items = subList; - this.node = node; } public List getAffiliations() { @@ -61,19 +59,14 @@ public class AffiliationsExtension extends NodeExtension { } @Override - public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { + protected void addXml(XmlStringBuilder xml) { if ((items == null) || (items.size() == 0)) { - return super.toXML(enclosingNamespace); - } - else { - // Can't use XmlStringBuilder(this), because we don't want the namespace to be included - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(getElementName()); - xml.optAttribute("node", node); - xml.rightAngleBracket(); - xml.append(items); - xml.closeElement(this); - return xml; + xml.closeEmptyElement(); + return; } + + xml.rightAngleBracket(); + xml.append(items); + xml.closeElement(this); } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/FormNode.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/FormNode.java index 6c3c69171..4d1a46cdd 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/FormNode.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/FormNode.java @@ -16,6 +16,8 @@ */ package org.jivesoftware.smackx.pubsub; +import org.jivesoftware.smack.util.XmlStringBuilder; + import org.jivesoftware.smackx.xdata.packet.DataForm; /** @@ -69,26 +71,14 @@ public class FormNode extends NodeExtension { } @Override - public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { + protected void addXml(XmlStringBuilder xml) { if (configForm == null) { - return super.toXML(enclosingNamespace); + xml.closeEmptyElement(); + return; } - else { - StringBuilder builder = new StringBuilder("<"); - builder.append(getElementName()); - if (getNode() != null) { - builder.append(" node='"); - builder.append(getNode()); - builder.append("'>"); - } - else - builder.append('>'); - builder.append(configForm.toXML()); - builder.append("'); - return builder.toString(); - } + xml.append(configForm); + xml.closeElement(this); } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/GetItemsRequest.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/GetItemsRequest.java index d55637a7c..f929dd355 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/GetItemsRequest.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/GetItemsRequest.java @@ -54,13 +54,9 @@ public class GetItemsRequest extends NodeExtension { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(getElementName()); - xml.attribute("node", getNode()); + protected void addXml(XmlStringBuilder xml) { xml.optAttribute("subid", getSubscriptionId()); xml.optIntAttribute("max_items", getMaxItems()); xml.closeEmptyElement(); - return xml; } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/Item.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/Item.java index 727de6c48..0cb4db2e3 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/Item.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/Item.java @@ -150,21 +150,9 @@ public class Item extends NodeExtension { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = getCommonXml(); - - xml.closeEmptyElement(); - - return xml; - } - - protected final XmlStringBuilder getCommonXml() { - XmlStringBuilder xml = new XmlStringBuilder(this); - + protected void addXml(XmlStringBuilder xml) { xml.optAttribute("id", getId()); - xml.optAttribute("node", getNode()); - - return xml; + xml.closeEmptyElement(); } @Override diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/ItemsExtension.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/ItemsExtension.java index 000138897..02ae67901 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/ItemsExtension.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/ItemsExtension.java @@ -20,6 +20,7 @@ import java.util.List; import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.util.XmlStringBuilder; /** * This class is used for multiple purposes. @@ -150,35 +151,21 @@ public class ItemsExtension extends NodeExtension implements EmbeddedPacketExten } @Override - public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { + protected void addXml(XmlStringBuilder xml) { if ((items == null) || (items.size() == 0)) { - return super.toXML(enclosingNamespace); + xml.closeEmptyElement(); + return; } - else { - StringBuilder builder = new StringBuilder("<"); - builder.append(getElementName()); - builder.append(" node='"); - builder.append(getNode()); - if (notify != null) { - builder.append("' "); - builder.append(type.getElementAttribute()); - builder.append("='"); - builder.append(notify.equals(Boolean.TRUE) ? 1 : 0); - builder.append("'>"); - } - else { - builder.append("'>"); - for (NamedElement item : items) { - builder.append(item.toXML()); - } - } - - builder.append("'); - return builder.toString(); + if (notify != null) { + xml.attribute(type.getElementAttribute(), notify); + xml.rightAngleBracket(); + } else { + xml.rightAngleBracket(); + xml.append(items); } + + xml.closeElement(this); } @Override diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/NodeExtension.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/NodeExtension.java index cc8fac480..d89e438ca 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/NodeExtension.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/NodeExtension.java @@ -17,6 +17,8 @@ package org.jivesoftware.smackx.pubsub; import org.jivesoftware.smack.packet.ExtensionElement; +import org.jivesoftware.smack.packet.XmlEnvironment; +import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smackx.pubsub.packet.PubSubNamespace; @@ -78,8 +80,17 @@ public class NodeExtension implements ExtensionElement { } @Override - public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - return '<' + getElementName() + (node == null ? "" : " node='" + node + '\'') + "/>"; + public final XmlStringBuilder toXML(XmlEnvironment enclosingNamespace) { + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); + xml.optAttribute("node", node); + + addXml(xml); + + return xml; + } + + protected void addXml(XmlStringBuilder xml) { + xml.closeEmptyElement(); } @Override diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/OptionsExtension.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/OptionsExtension.java index c9bbf6ab2..7249f9eea 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/OptionsExtension.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/OptionsExtension.java @@ -50,13 +50,15 @@ public class OptionsExtension extends NodeExtension { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); + protected void addXml(XmlStringBuilder xml) { + xml.rightAngleBracket(); + xml.halfOpenElement(getElementName()); xml.attribute("jid", jid); xml.optAttribute("node", getNode()); xml.optAttribute("subid", id); + xml.closeEmptyElement(); - return xml; + xml.closeElement(this); } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/PayloadItem.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/PayloadItem.java index f22a8e876..6cb4210d8 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/PayloadItem.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/PayloadItem.java @@ -132,14 +132,11 @@ public class PayloadItem extends Item { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = getCommonXml(); - + protected void addXml(XmlStringBuilder xml) { + xml.optAttribute("id", getId()); xml.rightAngleBracket(); - xml.append(payload.toXML()); + xml.append(payload); xml.closeElement(this); - - return xml; } @Override diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/PublishItem.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/PublishItem.java index ec38e7aa5..7bdead52f 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/PublishItem.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/PublishItem.java @@ -19,6 +19,8 @@ package org.jivesoftware.smackx.pubsub; import java.util.ArrayList; import java.util.Collection; +import org.jivesoftware.smack.util.XmlStringBuilder; + /** * Represents a request to publish an item(s) to a specific node. * @@ -51,18 +53,9 @@ public class PublishItem extends NodeExtension { } @Override - public String toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - StringBuilder builder = new StringBuilder("<"); - builder.append(getElementName()); - builder.append(" node='"); - builder.append(getNode()); - builder.append("'>"); - - for (Item item : items) { - builder.append(item.toXML()); - } - builder.append(""); - - return builder.toString(); + protected void addXml(XmlStringBuilder xml) { + xml.rightAngleBracket(); + xml.append(items); + xml.closeElement(this); } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/SubscribeExtension.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/SubscribeExtension.java index 9c4a55b10..64ef67d62 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/SubscribeExtension.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/SubscribeExtension.java @@ -16,7 +16,6 @@ */ package org.jivesoftware.smackx.pubsub; -import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.XmlStringBuilder; import org.jxmpp.jid.Jid; @@ -44,11 +43,8 @@ public class SubscribeExtension extends NodeExtension { } @Override - public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { - XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment); - xml.optAttribute("node", getNode()); + protected void addXml(XmlStringBuilder xml) { xml.attribute("jid", getJid()); xml.closeEmptyElement(); - return xml; } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/Subscription.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/Subscription.java index 3b81ca016..c9b59896d 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/Subscription.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/Subscription.java @@ -138,16 +138,11 @@ public class Subscription extends NodeExtension { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder builder = new XmlStringBuilder(this); - builder.attribute("jid", jid); - - builder.optAttribute("node", getNode()); - builder.optAttribute("subid", id); - builder.optAttribute("subscription", state.toString()); - - builder.closeEmptyElement(); - return builder; + protected void addXml(XmlStringBuilder xml) { + xml.attribute("jid", jid); + xml.optAttribute("subid", id); + xml.optAttribute("subscription", state); + xml.closeEmptyElement(); } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/SubscriptionsExtension.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/SubscriptionsExtension.java index 8abde5836..b9f3ee7df 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/SubscriptionsExtension.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/SubscriptionsExtension.java @@ -19,6 +19,8 @@ package org.jivesoftware.smackx.pubsub; import java.util.Collections; import java.util.List; +import org.jivesoftware.smack.util.XmlStringBuilder; + /** * Represents the element holding the list of subscription elements. * @@ -91,29 +93,13 @@ public class SubscriptionsExtension extends NodeExtension { } @Override - public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { + protected void addXml(XmlStringBuilder xml) { if ((items == null) || (items.size() == 0)) { - return super.toXML(enclosingNamespace); - } - else { - StringBuilder builder = new StringBuilder("<"); - builder.append(getElementName()); - - if (getNode() != null) { - builder.append(" node='"); - builder.append(getNode()); - builder.append('\''); - } - builder.append('>'); - - for (Subscription item : items) { - builder.append(item.toXML()); - } - - builder.append("'); - return builder.toString(); + xml.closeEmptyElement(); + return; } + xml.rightAngleBracket(); + xml.append(items); + xml.closeElement(this); } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/UnsubscribeExtension.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/UnsubscribeExtension.java index 107271786..3c801ff21 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/UnsubscribeExtension.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/pubsub/UnsubscribeExtension.java @@ -51,13 +51,9 @@ public class UnsubscribeExtension extends NodeExtension { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(getElementName()); + protected void addXml(XmlStringBuilder xml) { xml.attribute("jid", jid); - xml.optAttribute("node", getNode()); xml.optAttribute("subid", id); xml.closeEmptyElement(); - return xml; } } diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/pubsub/AffiliationsExtensionTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/pubsub/AffiliationsExtensionTest.java index 5a03d5ed3..c584ca73c 100644 --- a/smack-extensions/src/test/java/org/jivesoftware/smackx/pubsub/AffiliationsExtensionTest.java +++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/pubsub/AffiliationsExtensionTest.java @@ -1,6 +1,6 @@ /** * - * Copyright 2017 Florian Schmaus + * Copyright 2017-2020 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.List; import org.jivesoftware.smackx.pubsub.Affiliation.Type; +import org.jivesoftware.smackx.pubsub.packet.PubSub; import org.junit.jupiter.api.Test; import org.jxmpp.jid.BareJid; @@ -40,10 +41,10 @@ public class AffiliationsExtensionTest { AffiliationsExtension affiliationsExtension = new AffiliationsExtension(affiliationsList, "testNode"); - CharSequence xml = affiliationsExtension.toXML(); + CharSequence xml = affiliationsExtension.toXML(PubSub.NAMESPACE); assertXmlSimilar("", - xml.toString()); + xml); } }