From 7ebea7ce949a367f0a410018a89c5972d46f31ba Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 19 Feb 2015 14:59:44 +0100 Subject: [PATCH] Add StanzaIdFilter, deprecate PacketIDFilter --- build.gradle | 1 + documentation/processing.md | 2 +- .../smack/AbstractXMPPConnection.java | 6 +- .../smack/filter/IQReplyFilter.java | 2 +- .../smack/filter/PacketFilter.java | 2 +- .../smack/filter/PacketIDFilter.java | 6 ++ .../smack/filter/StanzaIdFilter.java | 57 +++++++++++++++++++ .../smackx/iqregister/AccountManager.java | 4 +- .../smackx/iqversion/packet/Version.java | 20 ------- .../java/org/jivesoftware/util/Protocol.java | 2 +- 10 files changed, 73 insertions(+), 29 deletions(-) create mode 100644 smack-core/src/main/java/org/jivesoftware/smack/filter/StanzaIdFilter.java diff --git a/build.gradle b/build.gradle index bcffddd94..0fd69f2e0 100644 --- a/build.gradle +++ b/build.gradle @@ -95,6 +95,7 @@ allprojects { options.addStringOption('Xdoclint:none', '-quiet') } } + } gradle.taskGraph.whenReady { taskGraph -> diff --git a/documentation/processing.md b/documentation/processing.md index 4e4fe1b9b..6d3b41c7e 100644 --- a/documentation/processing.md +++ b/documentation/processing.md @@ -46,7 +46,7 @@ own filters by coding to the `PacketFilter` interface. The default set of filters includes: * `PacketTypeFilter` -- filters for packets that are a particular Class type. - * `PacketIDFilter` -- filters for packets with a particular packet ID. + * `StanzaIdFilter` -- filters for packets with a particular packet ID. * `ThreadFilter` -- filters for message packets with a particular thread ID. * `ToContainsFilter` -- filters for packets that are sent to a particular address. * `FromContainsFilter` -- filters for packets that are sent to a particular address. diff --git a/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java b/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java index e8585ad85..5e8b4928a 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/AbstractXMPPConnection.java @@ -57,7 +57,7 @@ import org.jivesoftware.smack.compression.XMPPInputOutputStream; import org.jivesoftware.smack.debugger.SmackDebugger; import org.jivesoftware.smack.filter.IQReplyFilter; import org.jivesoftware.smack.filter.PacketFilter; -import org.jivesoftware.smack.filter.PacketIDFilter; +import org.jivesoftware.smack.filter.StanzaIdFilter; import org.jivesoftware.smack.iqrequest.IQRequestHandler; import org.jivesoftware.smack.packet.Bind; import org.jivesoftware.smack.packet.ErrorIQ; @@ -539,7 +539,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection { // Note that we can not use IQReplyFilter here, since the users full JID is not yet // available. It will become available right after the resource has been successfully bound. Bind bindResource = Bind.newSet(resource); - PacketCollector packetCollector = createPacketCollectorAndSend(new PacketIDFilter(bindResource), bindResource); + PacketCollector packetCollector = createPacketCollectorAndSend(new StanzaIdFilter(bindResource), bindResource); Bind response = packetCollector.nextResultOrThrow(); // Set the connections user to the result of resource binding. It is important that we don't infer the user // from the login() arguments and the configurations service name, as, for example, when SASL External is used, @@ -552,7 +552,7 @@ public abstract class AbstractXMPPConnection implements XMPPConnection { // For more information see http://tools.ietf.org/html/draft-cridland-xmpp-session-01 if (sessionFeature != null && !sessionFeature.isOptional() && !getConfiguration().isLegacySessionDisabled()) { Session session = new Session(); - packetCollector = createPacketCollectorAndSend(new PacketIDFilter(session), session); + packetCollector = createPacketCollectorAndSend(new StanzaIdFilter(session), session); packetCollector.nextResultOrThrow(); } } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/filter/IQReplyFilter.java b/smack-core/src/main/java/org/jivesoftware/smack/filter/IQReplyFilter.java index e7b162356..0c3064e65 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/filter/IQReplyFilter.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/filter/IQReplyFilter.java @@ -99,7 +99,7 @@ public class IQReplyFilter implements PacketFilter { packetId = iqPacket.getStanzaId(); PacketFilter iqFilter = new OrFilter(IQTypeFilter.ERROR, IQTypeFilter.RESULT); - PacketFilter idFilter = new PacketIDFilter(iqPacket); + PacketFilter idFilter = new StanzaIdFilter(iqPacket); iqAndIdFilter = new AndFilter(iqFilter, idFilter); fromFilter = new OrFilter(); fromFilter.addFilter(FromMatchesFilter.createFull(to)); diff --git a/smack-core/src/main/java/org/jivesoftware/smack/filter/PacketFilter.java b/smack-core/src/main/java/org/jivesoftware/smack/filter/PacketFilter.java index c71cbe3fe..5aecfa2a2 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/filter/PacketFilter.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/filter/PacketFilter.java @@ -28,7 +28,7 @@ import org.jivesoftware.smack.packet.Stanza; * packet filtering by using the {@link org.jivesoftware.smack.filter.AndFilter AndFilter} and * {@link org.jivesoftware.smack.filter.OrFilter OrFilter} filters. It's also possible to define * your own filters by implementing this interface. The code example below creates a trivial filter - * for packets with a specific ID (real code should use {@link PacketIDFilter} instead). + * for packets with a specific ID (real code should use {@link StanzaIdFilter} instead). * *
  * // Use an anonymous inner class to define a packet filter that returns
diff --git a/smack-core/src/main/java/org/jivesoftware/smack/filter/PacketIDFilter.java b/smack-core/src/main/java/org/jivesoftware/smack/filter/PacketIDFilter.java
index a01b247c6..11796a0ab 100644
--- a/smack-core/src/main/java/org/jivesoftware/smack/filter/PacketIDFilter.java
+++ b/smack-core/src/main/java/org/jivesoftware/smack/filter/PacketIDFilter.java
@@ -24,7 +24,9 @@ import org.jivesoftware.smack.util.StringUtils;
  * Filters for packets with a particular packet ID.
  *
  * @author Matt Tucker
+ * @deprecated use {@link StanzaIdFilter} instead.
  */
+@Deprecated
 public class PacketIDFilter implements PacketFilter {
 
     private final String packetID;
@@ -33,7 +35,9 @@ public class PacketIDFilter implements PacketFilter {
      * Creates a new packet ID filter using the specified packet's ID.
      *
      * @param packet the packet which the ID is taken from.
+     * @deprecated use {@link StanzaIdfilter(Stanza)} instead.
      */
+    @Deprecated
     public PacketIDFilter(Stanza packet) {
         this(packet.getStanzaId());
     }
@@ -42,7 +46,9 @@ public class PacketIDFilter implements PacketFilter {
      * Creates a new packet ID filter using the specified packet ID.
      *
      * @param packetID the packet ID to filter for.
+     * @deprecated use {@link StanzaIdFilter(String)} instead.
      */
+    @Deprecated
     public PacketIDFilter(String packetID) {
         StringUtils.requireNotNullOrEmpty(packetID, "Packet ID must not be null or empty.");
         this.packetID = packetID;
diff --git a/smack-core/src/main/java/org/jivesoftware/smack/filter/StanzaIdFilter.java b/smack-core/src/main/java/org/jivesoftware/smack/filter/StanzaIdFilter.java
new file mode 100644
index 000000000..bf123726b
--- /dev/null
+++ b/smack-core/src/main/java/org/jivesoftware/smack/filter/StanzaIdFilter.java
@@ -0,0 +1,57 @@
+/**
+ *
+ * Copyright 2003-2007 Jive Software.
+ *
+ * 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.filter;
+
+import org.jivesoftware.smack.packet.Stanza;
+import org.jivesoftware.smack.util.StringUtils;
+
+/**
+ * Filters for Stanzas with a particular stanza ID.
+ *
+ * @author Matt Tucker
+ */
+public class StanzaIdFilter implements PacketFilter {
+
+    private final String stanzaId;
+
+    /**
+     * Creates a new stanza ID filter using the specified stanza's ID.
+     *
+     * @param stanza the stanza which the ID is taken from.
+     */
+    public StanzaIdFilter(Stanza stanza) {
+        this(stanza.getStanzaId());
+    }
+
+    /**
+     * Creates a new stanza ID filter using the specified stanza ID.
+     *
+     * @param stanzaID the stanza ID to filter for.
+     */
+    public StanzaIdFilter(String stanzaID) {
+        this.stanzaId = StringUtils.requireNotNullOrEmpty(stanzaID, "Stanza ID must not be null or empty.");
+    }
+
+    public boolean accept(Stanza stanza) {
+        return stanzaId.equals(stanza.getStanzaId());
+    }
+
+    public String toString() {
+        return getClass().getSimpleName() + ": id=" + stanzaId;
+    }
+}
diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/iqregister/AccountManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/iqregister/AccountManager.java
index c701e5105..b0ec24d08 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/iqregister/AccountManager.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/iqregister/AccountManager.java
@@ -31,7 +31,7 @@ import org.jivesoftware.smack.XMPPException;
 import org.jivesoftware.smack.SmackException.NoResponseException;
 import org.jivesoftware.smack.SmackException.NotConnectedException;
 import org.jivesoftware.smack.XMPPException.XMPPErrorException;
-import org.jivesoftware.smack.filter.PacketIDFilter;
+import org.jivesoftware.smack.filter.StanzaIdFilter;
 import org.jivesoftware.smack.packet.IQ;
 import org.jivesoftware.smackx.iqregister.packet.Registration;
 import org.jxmpp.util.XmppStringUtils;
@@ -290,7 +290,7 @@ public class AccountManager extends Manager {
     }
 
     private PacketCollector createPacketCollectorAndSend(IQ req) throws NotConnectedException {
-        PacketCollector collector = connection().createPacketCollectorAndSend(new PacketIDFilter(req.getStanzaId()), req);
+        PacketCollector collector = connection().createPacketCollectorAndSend(new StanzaIdFilter(req.getStanzaId()), req);
         return collector;
     }
 }
diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/iqversion/packet/Version.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/iqversion/packet/Version.java
index 58e592849..e2bf06ec7 100644
--- a/smack-extensions/src/main/java/org/jivesoftware/smackx/iqversion/packet/Version.java
+++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/iqversion/packet/Version.java
@@ -26,26 +26,6 @@ import org.jivesoftware.smack.util.StringUtils;
  * A Version IQ packet, which is used by XMPP clients to discover version information
  * about the software running at another entity's JID.

* - * An example to discover the version of the server: - *

- * // Request the version from the server.
- * Version versionRequest = new Version();
- * timeRequest.setType(IQ.Type.get);
- * timeRequest.setTo("example.com");
- *
- * // Create a packet collector to listen for a response.
- * PacketCollector collector = con.createPacketCollector(
- *                new PacketIDFilter(versionRequest.getStanzaId()));
- *
- * con.sendPacket(versionRequest);
- *
- * // Wait up to 5 seconds for a result.
- * IQ result = (IQ)collector.nextResult(5000);
- * if (result != null && result.getType() == IQ.Type.result) {
- *     Version versionResult = (Version)result;
- *     // Do something with result...
- * }

- * * @author Gaston Dombiak */ public class Version extends IQ { diff --git a/smack-extensions/src/test/java/org/jivesoftware/util/Protocol.java b/smack-extensions/src/test/java/org/jivesoftware/util/Protocol.java index 71fdbc33a..75acff249 100644 --- a/smack-extensions/src/test/java/org/jivesoftware/util/Protocol.java +++ b/smack-extensions/src/test/java/org/jivesoftware/util/Protocol.java @@ -51,7 +51,7 @@ import org.jivesoftware.smack.packet.Stanza; * * public void methodToTest() { * Packet packet = new Packet(); // create an XMPP packet - * PacketCollector collector = connection.createPacketCollector(new PacketIDFilter()); + * PacketCollector collector = connection.createPacketCollector(new StanzaIdFilter()); * connection.sendPacket(packet); * Packet reply = collector.nextResult(); * }