From 86e11e69e83a0ffcb3429f8252a628f54746ebfa Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Wed, 25 May 2016 22:52:29 +0200 Subject: [PATCH] Add Message.toString() providing a short description --- .../org/jivesoftware/smack/packet/IQ.java | 12 +++++ .../jivesoftware/smack/packet/Message.java | 12 +++++ .../jivesoftware/smack/packet/Presence.java | 20 ++++++++ .../org/jivesoftware/smack/packet/Stanza.java | 20 ++++++-- .../smack/PacketCollectorTest.java | 5 ++ .../smack/packet/ToStringTest.java | 51 +++++++++++++++++++ .../smackx/debugger/EnhancedDebugger.java | 5 ++ .../address/MultipleRecipientManager.java | 5 ++ 8 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 smack-core/src/test/java/org/jivesoftware/smack/packet/ToStringTest.java diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/IQ.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/IQ.java index 221db265d..cf70ff27d 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/IQ.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/IQ.java @@ -112,6 +112,18 @@ public abstract class IQ extends Stanza { return childElementNamespace; } + @Override + public final String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("IQ Stanza ("); + sb.append(getChildElementName()).append(' ').append(getChildElementNamespace()); + sb.append(") ["); + logCommonAttributes(sb); + sb.append("type=").append(type).append(','); + sb.append(']'); + return sb.toString(); + } + @Override public final XmlStringBuilder toXML() { XmlStringBuilder buf = new XmlStringBuilder(); 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 50b855cc7..17d1d3f23 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 @@ -418,6 +418,18 @@ public final class Message extends Stanza implements TypedCloneable { } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Message Stanza ["); + logCommonAttributes(sb); + if (type != null) { + sb.append("type=").append(type).append(','); + } + sb.append(']'); + return sb.toString(); + } + @Override public XmlStringBuilder toXML() { XmlStringBuilder buf = new XmlStringBuilder(); diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/Presence.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/Presence.java index 1d95223af..7804e7777 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/Presence.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/Presence.java @@ -21,6 +21,7 @@ import java.util.Locale; import org.jivesoftware.smack.packet.id.StanzaIdUtil; import org.jivesoftware.smack.util.Objects; +import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.TypedCloneable; import org.jivesoftware.smack.util.XmlStringBuilder; @@ -222,6 +223,25 @@ public final class Presence extends Stanza implements TypedCloneable { this.mode = mode; } + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Presence Stanza ["); + logCommonAttributes(sb); + sb.append("type=").append(type).append(','); + if (mode != null) { + sb.append("mode=").append(mode).append(','); + } + if (!StringUtils.isNullOrEmpty(status)) { + sb.append("status=").append(status).append(','); + } + if (priority != Integer.MIN_VALUE) { + sb.append("prio=").append(priority).append(','); + } + sb.append(']'); + return sb.toString(); + } + @Override public XmlStringBuilder toXML() { XmlStringBuilder buf = new XmlStringBuilder(); diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/Stanza.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/Stanza.java index 29fc2b5a2..c483b4bf9 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/Stanza.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/Stanza.java @@ -458,11 +458,11 @@ public abstract class Stanza implements TopLevelStreamElement { return removeExtension(extension.getElementName(), extension.getNamespace()); } + /** + * Returns a short String describing the Stanza. This method is suited for log purposes. + */ @Override - // NOTE When Smack is using Java 8, then this method should be moved in Element as "Default Method". - public String toString() { - return toXML().toString(); - } + public abstract String toString(); /** * Returns the extension sub-packets (including properties data) as an XML @@ -501,6 +501,18 @@ public abstract class Stanza implements TopLevelStreamElement { xml.xmllangAttribute(getLanguage()); } + protected void logCommonAttributes(StringBuilder sb) { + if (getTo() != null) { + sb.append("to=").append(to).append(','); + } + if (getFrom() != null) { + sb.append("from=").append(from).append(','); + } + if (hasStanzaIdSet()) { + sb.append("id=").append(id).append(','); + } + } + /** * Append an XMPPError is this stanza(/packet) has one set. * diff --git a/smack-core/src/test/java/org/jivesoftware/smack/PacketCollectorTest.java b/smack-core/src/test/java/org/jivesoftware/smack/PacketCollectorTest.java index f0ad23087..b21303a81 100644 --- a/smack-core/src/test/java/org/jivesoftware/smack/PacketCollectorTest.java +++ b/smack-core/src/test/java/org/jivesoftware/smack/PacketCollectorTest.java @@ -206,5 +206,10 @@ public class PacketCollectorTest { return "" + getStanzaId() + ""; } + + @Override + public String toString() { + return toXML(); + } } } diff --git a/smack-core/src/test/java/org/jivesoftware/smack/packet/ToStringTest.java b/smack-core/src/test/java/org/jivesoftware/smack/packet/ToStringTest.java new file mode 100644 index 000000000..d7c7e924a --- /dev/null +++ b/smack-core/src/test/java/org/jivesoftware/smack/packet/ToStringTest.java @@ -0,0 +1,51 @@ +/** + * + * Copyright © 2016 Florian Schmaus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jivesoftware.smack.packet; + +import static org.junit.Assert.assertEquals; + +import org.jivesoftware.smack.packet.Presence.Mode; +import org.junit.Test; +import org.jxmpp.jid.JidTestUtil; +import org.jxmpp.stringprep.XmppStringprepException; + +public class ToStringTest { + + @Test + public void messageTest() { + Message message = new Message(JidTestUtil.BARE_JID_1, Message.Type.headline); + message.setStanzaId("message-id"); + String string = message.toString(); + assertEquals("Message Stanza [to=one@exampleone.org,id=message-id,type=headline,]", string); + } + + @Test + public void presenceTest() { + Presence presence = new Presence(Presence.Type.subscribe, null, 0, Mode.away); + presence.setStanzaId("presence-id"); + String string = presence.toString(); + assertEquals("Presence Stanza [id=presence-id,type=subscribe,mode=away,prio=0,]", string); + } + + @Test + public void iqTest() throws XmppStringprepException { + Bind bindIq = Bind.newResult(JidTestUtil.DUMMY_AT_EXAMPLE_ORG_SLASH_DUMMYRESOURCE); + bindIq.setStanzaId("bind-id"); + String string = bindIq.toString(); + assertEquals("IQ Stanza (bind urn:ietf:params:xml:ns:xmpp-bind) [id=bind-id,type=get,]", string); + } +} diff --git a/smack-debug/src/main/java/org/jivesoftware/smackx/debugger/EnhancedDebugger.java b/smack-debug/src/main/java/org/jivesoftware/smackx/debugger/EnhancedDebugger.java index 20cc622e6..8e12a3990 100644 --- a/smack-debug/src/main/java/org/jivesoftware/smackx/debugger/EnhancedDebugger.java +++ b/smack-debug/src/main/java/org/jivesoftware/smackx/debugger/EnhancedDebugger.java @@ -996,6 +996,11 @@ public class EnhancedDebugger implements SmackDebugger { return text; } + @Override + public String toString() { + return toXML(); + } + } /** diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java index 7290d0ddd..2161b6ca7 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java @@ -311,6 +311,11 @@ public class MultipleRecipientManager { return text; } + @Override + public String toString() { + return toXML().toString(); + } + } }