From 453ca6aeb06d97ffaa9e9937e17877ccc83958df Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Tue, 19 Oct 2021 11:32:51 +0200 Subject: [PATCH] [jingle] Make Jingle.Builder extend IqBuilder This makes Jingle.Builder to follow the new IqBuilder pattern, allowing to construct Jingle IQs with a given stanza ID (mostly useful for unit tests). --- .../smackx/jingle/JingleUtil.java | 16 +++--- .../smackx/jingle/element/Jingle.java | 53 ++++++++++++++++--- .../jingle/provider/JingleProvider.java | 11 ++-- .../jingle_s5b/JingleS5BTransportManager.java | 8 +-- .../smackx/jingle/JingleTest.java | 6 +-- 5 files changed, 67 insertions(+), 27 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleUtil.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleUtil.java index 1ac93c448..1cac1f095 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleUtil.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/JingleUtil.java @@ -51,7 +51,7 @@ public class JingleUtil { JingleContentDescription description, JingleContentTransport transport) { - Jingle.Builder jb = Jingle.getBuilder(); + Jingle.Builder jb = Jingle.builder(connection); jb.setAction(JingleAction.session_initiate) .setSessionId(sessionId) .setInitiator(connection.getUser()); @@ -116,7 +116,7 @@ public class JingleUtil { JingleContentDescription description, JingleContentTransport transport) { - Jingle.Builder jb = Jingle.getBuilder(); + Jingle.Builder jb = Jingle.builder(connection); jb.setResponder(connection.getUser()) .setAction(JingleAction.session_accept) .setSessionId(sessionId); @@ -151,7 +151,7 @@ public class JingleUtil { } public Jingle createSessionTerminate(FullJid recipient, String sessionId, JingleReason reason) { - Jingle.Builder jb = Jingle.getBuilder(); + Jingle.Builder jb = Jingle.builder(connection); jb.setAction(JingleAction.session_terminate) .setSessionId(sessionId) .setReason(reason); @@ -230,7 +230,7 @@ public class JingleUtil { public Jingle createSessionTerminateContentCancel(FullJid recipient, String sessionId, JingleContent.Creator contentCreator, String contentName) { - Jingle.Builder jb = Jingle.getBuilder(); + Jingle.Builder jb = Jingle.builder(connection); jb.setAction(JingleAction.session_terminate) .setSessionId(sessionId); @@ -312,7 +312,7 @@ public class JingleUtil { } public Jingle createSessionPing(FullJid recipient, String sessionId) { - Jingle.Builder jb = Jingle.getBuilder(); + Jingle.Builder jb = Jingle.builder(connection); jb.setSessionId(sessionId) .setAction(JingleAction.session_info); @@ -341,7 +341,7 @@ public class JingleUtil { public Jingle createTransportReplace(FullJid recipient, FullJid initiator, String sessionId, JingleContent.Creator contentCreator, String contentName, JingleContentTransport transport) { - Jingle.Builder jb = Jingle.getBuilder(); + Jingle.Builder jb = Jingle.builder(connection); jb.setInitiator(initiator) .setSessionId(sessionId) .setAction(JingleAction.transport_replace); @@ -368,7 +368,7 @@ public class JingleUtil { public Jingle createTransportAccept(FullJid recipient, FullJid initiator, String sessionId, JingleContent.Creator contentCreator, String contentName, JingleContentTransport transport) { - Jingle.Builder jb = Jingle.getBuilder(); + Jingle.Builder jb = Jingle.builder(connection); jb.setAction(JingleAction.transport_accept) .setInitiator(initiator) .setSessionId(sessionId); @@ -395,7 +395,7 @@ public class JingleUtil { public Jingle createTransportReject(FullJid recipient, FullJid initiator, String sessionId, JingleContent.Creator contentCreator, String contentName, JingleContentTransport transport) { - Jingle.Builder jb = Jingle.getBuilder(); + Jingle.Builder jb = Jingle.builder(connection); jb.setAction(JingleAction.transport_reject) .setInitiator(initiator) .setSessionId(sessionId); diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/Jingle.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/Jingle.java index 40acf187a..7598d1894 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/Jingle.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/Jingle.java @@ -1,6 +1,6 @@ /** * - * Copyright 2003-2007 Jive Software, 2014-2017 Florian Schmaus + * Copyright 2003-2007 Jive Software, 2014-2021 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,7 +21,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.packet.IQ; +import org.jivesoftware.smack.packet.IqBuilder; +import org.jivesoftware.smack.packet.IqData; +import org.jivesoftware.smack.packet.id.StandardStanzaIdSource; import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.StringUtils; @@ -65,9 +69,9 @@ public final class Jingle extends IQ { private final List contents; - private Jingle(String sessionId, JingleAction action, FullJid initiator, FullJid responder, JingleReason reason, + private Jingle(Builder builder, String sessionId, JingleAction action, FullJid initiator, FullJid responder, JingleReason reason, List contents) { - super(ELEMENT, NAMESPACE); + super(builder, ELEMENT, NAMESPACE); this.sessionId = StringUtils.requireNotNullNorEmpty(sessionId, "Jingle session ID must not be null"); this.action = Objects.requireNonNull(action, "Jingle action must not be null"); this.initiator = initiator; @@ -169,11 +173,31 @@ public final class Jingle extends IQ { return xml; } + /** + * Deprecated, do not use. + * + * @return a builder. + * @deprecated use {@link #builder(XMPPConnection)} instead. + */ + @Deprecated + // TODO: Remove in Smack 4.6. public static Builder getBuilder() { - return new Builder(); + return builder(StandardStanzaIdSource.DEFAULT.getNewStanzaId()); } - public static final class Builder { + public static Builder builder(XMPPConnection connection) { + return new Builder(connection); + } + + public static Builder builder(IqData iqData) { + return new Builder(iqData); + } + + public static Builder builder(String stanzaId) { + return new Builder(stanzaId); + } + + public static final class Builder extends IqBuilder { private String sid; private JingleAction action; @@ -186,7 +210,16 @@ public final class Jingle extends IQ { private List contents; - private Builder() { + Builder(IqData iqCommon) { + super(iqCommon); + } + + Builder(XMPPConnection connection) { + super(connection); + } + + Builder(String stanzaId) { + super(stanzaId); } public Builder setSessionId(String sessionId) { @@ -228,8 +261,14 @@ public final class Jingle extends IQ { return this; } + @Override public Jingle build() { - return new Jingle(sid, action, initiator, responder, reason, contents); + return new Jingle(this, sid, action, initiator, responder, reason, contents); + } + + @Override + public Builder getThis() { + return this; } } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/provider/JingleProvider.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/provider/JingleProvider.java index 8ff1e269b..f6c352a75 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/provider/JingleProvider.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/provider/JingleProvider.java @@ -1,6 +1,6 @@ /** * - * Copyright 2017-2019 Florian Schmaus + * Copyright 2017-2021 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,11 +19,12 @@ package org.jivesoftware.smackx.jingle.provider; import java.io.IOException; import java.util.logging.Logger; +import org.jivesoftware.smack.packet.IqData; import org.jivesoftware.smack.packet.StandardExtensionElement; import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.parsing.SmackParsingException; import org.jivesoftware.smack.parsing.StandardExtensionElementProvider; -import org.jivesoftware.smack.provider.IQProvider; +import org.jivesoftware.smack.provider.IqProvider; import org.jivesoftware.smack.util.ParserUtils; import org.jivesoftware.smack.xml.XmlPullParser; import org.jivesoftware.smack.xml.XmlPullParserException; @@ -40,13 +41,13 @@ import org.jivesoftware.smackx.jingle.element.UnknownJingleContentTransport; import org.jxmpp.jid.FullJid; -public class JingleProvider extends IQProvider { +public class JingleProvider extends IqProvider { private static final Logger LOGGER = Logger.getLogger(JingleProvider.class.getName()); @Override - public Jingle parse(XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment) throws XmlPullParserException, IOException, SmackParsingException { - Jingle.Builder builder = Jingle.getBuilder(); + public Jingle parse(XmlPullParser parser, int initialDepth, IqData iqData, XmlEnvironment xmlEnvironment) throws XmlPullParserException, IOException, SmackParsingException { + Jingle.Builder builder = Jingle.builder(iqData); String actionString = parser.getAttributeValue("", Jingle.ACTION_ATTRIBUTE_NAME); if (actionString != null) { diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/JingleS5BTransportManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/JingleS5BTransportManager.java index 60b1e9f88..cae0f8e11 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/JingleS5BTransportManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/JingleS5BTransportManager.java @@ -148,7 +148,7 @@ public final class JingleS5BTransportManager extends JingleTransportManager { builder.build(); }); @@ -48,7 +48,7 @@ public class JingleTest extends SmackTestSuite { public void onlySessionIdBuilderTest() { String sessionId = "testSessionId"; - Jingle.Builder builder = Jingle.getBuilder(); + Jingle.Builder builder = Jingle.builder("id"); builder.setSessionId(sessionId); assertThrows(IllegalArgumentException.class, () -> { builder.build(); @@ -59,7 +59,7 @@ public class JingleTest extends SmackTestSuite { public void parserTest() throws XmppStringprepException { String sessionId = "testSessionId"; - Jingle.Builder builder = Jingle.getBuilder(); + Jingle.Builder builder = Jingle.builder("id"); builder.setSessionId(sessionId); builder.setAction(JingleAction.session_initiate);