From 4d298e39e350b4fb7edd04430c96772d98b39b5d Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Sat, 31 Aug 2019 19:36:10 +0200 Subject: [PATCH 01/19] XEP-0359: Fix appending origin-ids --- .../smackx/sid/StableUniqueStanzaIdManager.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/sid/StableUniqueStanzaIdManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/sid/StableUniqueStanzaIdManager.java index c2674de64..98b8a26a0 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/sid/StableUniqueStanzaIdManager.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/sid/StableUniqueStanzaIdManager.java @@ -27,6 +27,7 @@ import org.jivesoftware.smack.XMPPConnectionRegistry; import org.jivesoftware.smack.filter.AndFilter; import org.jivesoftware.smack.filter.MessageTypeFilter; import org.jivesoftware.smack.filter.NotFilter; +import org.jivesoftware.smack.filter.StanzaExtensionFilter; import org.jivesoftware.smack.filter.StanzaFilter; import org.jivesoftware.smack.filter.ToTypeFilter; import org.jivesoftware.smack.packet.Message; @@ -46,6 +47,9 @@ public final class StableUniqueStanzaIdManager extends Manager { MessageTypeFilter.NORMAL_OR_CHAT_OR_HEADLINE, ToTypeFilter.ENTITY_FULL_OR_BARE_JID); + // Filter that filters for messages with an origin id + private static final StanzaFilter ORIGIN_ID_FILTER = new StanzaExtensionFilter(OriginIdElement.ELEMENT, NAMESPACE); + // Listener for outgoing stanzas that adds origin-ids to outgoing stanzas. private static final StanzaListener ADD_ORIGIN_ID_INTERCEPTOR = new StanzaListener() { @Override @@ -93,7 +97,8 @@ public final class StableUniqueStanzaIdManager extends Manager { */ public synchronized void enable() { ServiceDiscoveryManager.getInstanceFor(connection()).addFeature(NAMESPACE); - StanzaFilter filter = new AndFilter(OUTGOING_FILTER, new NotFilter(OUTGOING_FILTER)); + // We need a filter for outgoing messages that do not carry an origin-id already + StanzaFilter filter = new AndFilter(OUTGOING_FILTER, new NotFilter(ORIGIN_ID_FILTER)); connection().addStanzaInterceptor(ADD_ORIGIN_ID_INTERCEPTOR, filter); } From 3d0e5716e72b5ce6be36ffc93668ccdca138634e Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Sat, 31 Aug 2019 19:36:17 +0200 Subject: [PATCH 02/19] Add documentation --- .../smackx/sid/StableUniqueStanzaIdManager.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/sid/StableUniqueStanzaIdManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/sid/StableUniqueStanzaIdManager.java index 98b8a26a0..b43cc6078 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/sid/StableUniqueStanzaIdManager.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/sid/StableUniqueStanzaIdManager.java @@ -36,6 +36,15 @@ import org.jivesoftware.smack.packet.Stanza; import org.jivesoftware.smackx.disco.ServiceDiscoveryManager; import org.jivesoftware.smackx.sid.element.OriginIdElement; +/** + * Manager class for Stable and Unique Stanza IDs. + * + * In order to start automatically appending origin ids to outgoing messages, use {@link #enable()}. + * This will announce support via the {@link ServiceDiscoveryManager}. If you want to stop appending origin-ids + * and de-announce support, call {@link #disable()}. + * + * @see XEP-0359: Stable and Unique Stanza IDs + */ public final class StableUniqueStanzaIdManager extends Manager { public static final String NAMESPACE = "urn:xmpp:sid:0"; @@ -70,7 +79,7 @@ public final class StableUniqueStanzaIdManager extends Manager { /** * Private constructor. - * @param connection TODO javadoc me please + * @param connection XMPP connection */ private StableUniqueStanzaIdManager(XMPPConnection connection) { super(connection); From ac77c969ac8ebb4b8a4f802ab13b044669a720a6 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 1 Sep 2019 17:09:42 +0200 Subject: [PATCH 03/19] gradle: Use project(':foo') intead of project(path: ':foo') when possible --- smack-compression-jzlib/build.gradle | 2 +- smack-resolver-dnsjava/build.gradle | 2 +- smack-resolver-javax/build.gradle | 2 +- smack-resolver-minidns/build.gradle | 2 +- smack-sasl-javax/build.gradle | 2 +- smack-sasl-provided/build.gradle | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/smack-compression-jzlib/build.gradle b/smack-compression-jzlib/build.gradle index 9f449f88e..b9aeb8b84 100644 --- a/smack-compression-jzlib/build.gradle +++ b/smack-compression-jzlib/build.gradle @@ -3,6 +3,6 @@ Compression with jzlib Allow to compress the XMPP stream with help of jzlib.""" dependencies { - compile project(path: ':smack-core') + compile project(':smack-core') compile 'com.jcraft:jzlib:[1.1,1.2)' } diff --git a/smack-resolver-dnsjava/build.gradle b/smack-resolver-dnsjava/build.gradle index 9de83e1f5..3649a2d58 100644 --- a/smack-resolver-dnsjava/build.gradle +++ b/smack-resolver-dnsjava/build.gradle @@ -4,6 +4,6 @@ Use dnsjava for DNS SRV lookups. For platforms that don't provide the javax.naming API (e.g. Android).""" dependencies { - compile project(path: ':smack-core') + compile project(':smack-core') compile 'dnsjava:dnsjava:[2.1,2.2)' } diff --git a/smack-resolver-javax/build.gradle b/smack-resolver-javax/build.gradle index c94e0e35b..9e67daeee 100644 --- a/smack-resolver-javax/build.gradle +++ b/smack-resolver-javax/build.gradle @@ -4,5 +4,5 @@ Use javax.naming for DNS SRV lookups. The javax.naming API is availabe in JavaSE since Java7.""" dependencies { - compile project(path: ':smack-core') + compile project(':smack-core') } diff --git a/smack-resolver-minidns/build.gradle b/smack-resolver-minidns/build.gradle index 627cb3f52..834233289 100644 --- a/smack-resolver-minidns/build.gradle +++ b/smack-resolver-minidns/build.gradle @@ -4,7 +4,7 @@ Use minidns for DNS SRV lookups. For platforms that don't provide the javax.naming API (e.g. Android).""" dependencies { - compile project(path: ':smack-core') + compile project(':smack-core') compile "org.minidns:minidns-hla:$miniDnsVersion" compile "org.jxmpp:jxmpp-util-cache:$jxmppVersion" } diff --git a/smack-sasl-javax/build.gradle b/smack-sasl-javax/build.gradle index af9d5af8c..da4a818cc 100644 --- a/smack-sasl-javax/build.gradle +++ b/smack-sasl-javax/build.gradle @@ -3,7 +3,7 @@ SASL with javax.security.sasl Use javax.security.sasl for SASL.""" dependencies { - compile project(path: ':smack-core') + compile project(':smack-core') testCompile project(path: ":smack-core", configuration: "testRuntime") testCompile project(path: ":smack-core", configuration: "archives") } diff --git a/smack-sasl-provided/build.gradle b/smack-sasl-provided/build.gradle index 4e284fd24..d02277ba8 100644 --- a/smack-sasl-provided/build.gradle +++ b/smack-sasl-provided/build.gradle @@ -3,7 +3,7 @@ SASL with Smack provided code Use Smack provided code for SASL.""" dependencies { - compile project(path: ':smack-core') + compile project(':smack-core') testCompile project(path: ":smack-core", configuration: "testRuntime") testCompile project(path: ":smack-core", configuration: "archives") } From 75625283ef9e33f2e3a4e032d01fd0c221de9e81 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 1 Sep 2019 17:14:51 +0200 Subject: [PATCH 04/19] Make "duplicate" package-info.java files symbolic links This is needed for javadocAll since otherwhise there will be smack-core/src/main/java/org/jivesoftware/smack/package-info.java:21: warning: a package-info.java file has already been seen for package org.jivesoftware.smack warnings. --- build.gradle | 8 ++++++- .../org/jivesoftware/smackx/package-info.java | 22 +------------------ .../smackx/ping/package-info.java | 22 +------------------ .../org/jivesoftware/smack/package-info.java | 22 +------------------ .../jivesoftware/smack/util/package-info.java | 22 +------------------ .../util/stringencoder/package-info.java | 22 +------------------ .../smackx/debugger/package-info.java | 22 +------------------ .../org/jivesoftware/smackx/package-info.java | 22 +------------------ .../smack/compression/package-info.java | 22 +------------------ .../smackx/debugger/package-info.java | 22 +------------------ .../org/jivesoftware/smackx/package-info.java | 22 +------------------ .../org/jivesoftware/smackx/package-info.java | 22 +------------------ .../org/jivesoftware/smack/package-info.java | 22 +------------------ .../org/jivesoftware/smackx/package-info.java | 22 +------------------ .../smackx/ping/package-info.java | 22 +------------------ .../util/stringencoder/package-info.java | 22 +------------------ .../org/jivesoftware/smackx/package-info.java | 22 +------------------ .../org/jivesoftware/smackx/package-info.java | 22 +------------------ .../smack/util/dns/package-info.java | 22 +------------------ .../jivesoftware/smack/util/package-info.java | 22 +------------------ .../smack/util/dns/package-info.java | 22 +------------------ .../jivesoftware/smack/util/package-info.java | 22 +------------------ .../smack/util/dns/package-info.java | 22 +------------------ .../jivesoftware/smack/util/package-info.java | 22 +------------------ 24 files changed, 30 insertions(+), 484 deletions(-) mode change 100644 => 120000 smack-android-extensions/src/main/java/org/jivesoftware/smackx/package-info.java mode change 100644 => 120000 smack-android-extensions/src/main/java/org/jivesoftware/smackx/ping/package-info.java mode change 100644 => 120000 smack-android/src/main/java/org/jivesoftware/smack/package-info.java mode change 100644 => 120000 smack-android/src/main/java/org/jivesoftware/smack/util/package-info.java mode change 100644 => 120000 smack-android/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java mode change 100644 => 120000 smack-android/src/main/java/org/jivesoftware/smackx/debugger/package-info.java mode change 100644 => 120000 smack-android/src/main/java/org/jivesoftware/smackx/package-info.java mode change 100644 => 120000 smack-compression-jzlib/src/main/java/org/jivesoftware/smack/compression/package-info.java mode change 100644 => 120000 smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/debugger/package-info.java mode change 100644 => 120000 smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/package-info.java mode change 100644 => 120000 smack-debug/src/main/java/org/jivesoftware/smackx/package-info.java mode change 100644 => 120000 smack-integration-test/src/main/java/org/jivesoftware/smack/package-info.java mode change 100644 => 120000 smack-integration-test/src/main/java/org/jivesoftware/smackx/package-info.java mode change 100644 => 120000 smack-integration-test/src/main/java/org/jivesoftware/smackx/ping/package-info.java mode change 100644 => 120000 smack-java7/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java mode change 100644 => 120000 smack-jingle-old/src/main/java/org/jivesoftware/smackx/package-info.java mode change 100644 => 120000 smack-legacy/src/main/java/org/jivesoftware/smackx/package-info.java mode change 100644 => 120000 smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/dns/package-info.java mode change 100644 => 120000 smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/package-info.java mode change 100644 => 120000 smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/package-info.java mode change 100644 => 120000 smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/package-info.java mode change 100644 => 120000 smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/dns/package-info.java mode change 100644 => 120000 smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/package-info.java diff --git a/build.gradle b/build.gradle index c59d49903..1fe03753e 100644 --- a/build.gradle +++ b/build.gradle @@ -293,7 +293,13 @@ task copyAllJavadocDocFiles(type: Copy) { task javadocAll(type: Javadoc, dependsOn: copyAllJavadocDocFiles) { source javadocAllProjects.collect {project -> - project.sourceSets.main.allJava } + project.sourceSets.main.allJava.findAll { + // Filter out symbolic links to avoid + // "warning: a package-info.java file has already been seen for package" + // javadoc warnings. + !java.nio.file.Files.isSymbolicLink(it.toPath()) + } + } destinationDir = javadocAllDir // Might need a classpath classpath = files(subprojects.collect {project -> diff --git a/smack-android-extensions/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-android-extensions/src/main/java/org/jivesoftware/smackx/package-info.java deleted file mode 100644 index 01e4ee051..000000000 --- a/smack-android-extensions/src/main/java/org/jivesoftware/smackx/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * TODO describe me. - */ -package org.jivesoftware.smackx; diff --git a/smack-android-extensions/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-android-extensions/src/main/java/org/jivesoftware/smackx/package-info.java new file mode 120000 index 000000000..f0646658f --- /dev/null +++ b/smack-android-extensions/src/main/java/org/jivesoftware/smackx/package-info.java @@ -0,0 +1 @@ +../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/package-info.java \ No newline at end of file diff --git a/smack-android-extensions/src/main/java/org/jivesoftware/smackx/ping/package-info.java b/smack-android-extensions/src/main/java/org/jivesoftware/smackx/ping/package-info.java deleted file mode 100644 index 92e6a80e4..000000000 --- a/smack-android-extensions/src/main/java/org/jivesoftware/smackx/ping/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * TODO describe me. - */ -package org.jivesoftware.smackx.ping; diff --git a/smack-android-extensions/src/main/java/org/jivesoftware/smackx/ping/package-info.java b/smack-android-extensions/src/main/java/org/jivesoftware/smackx/ping/package-info.java new file mode 120000 index 000000000..edea7d8fd --- /dev/null +++ b/smack-android-extensions/src/main/java/org/jivesoftware/smackx/ping/package-info.java @@ -0,0 +1 @@ +../../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/ping/package-info.java \ No newline at end of file diff --git a/smack-android/src/main/java/org/jivesoftware/smack/package-info.java b/smack-android/src/main/java/org/jivesoftware/smack/package-info.java deleted file mode 100644 index 78d959e23..000000000 --- a/smack-android/src/main/java/org/jivesoftware/smack/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * TODO describe me. - */ -package org.jivesoftware.smack; diff --git a/smack-android/src/main/java/org/jivesoftware/smack/package-info.java b/smack-android/src/main/java/org/jivesoftware/smack/package-info.java new file mode 120000 index 000000000..a3d8f86a1 --- /dev/null +++ b/smack-android/src/main/java/org/jivesoftware/smack/package-info.java @@ -0,0 +1 @@ +../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/package-info.java \ No newline at end of file diff --git a/smack-android/src/main/java/org/jivesoftware/smack/util/package-info.java b/smack-android/src/main/java/org/jivesoftware/smack/util/package-info.java deleted file mode 100644 index 9ad9b1354..000000000 --- a/smack-android/src/main/java/org/jivesoftware/smack/util/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * TODO describe me. - */ -package org.jivesoftware.smack.util; diff --git a/smack-android/src/main/java/org/jivesoftware/smack/util/package-info.java b/smack-android/src/main/java/org/jivesoftware/smack/util/package-info.java new file mode 120000 index 000000000..6c269f201 --- /dev/null +++ b/smack-android/src/main/java/org/jivesoftware/smack/util/package-info.java @@ -0,0 +1 @@ +../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/util/package-info.java \ No newline at end of file diff --git a/smack-android/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java b/smack-android/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java deleted file mode 100644 index 8609a8018..000000000 --- a/smack-android/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * TODO describe me. - */ -package org.jivesoftware.smack.util.stringencoder; diff --git a/smack-android/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java b/smack-android/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java new file mode 120000 index 000000000..1843c7f20 --- /dev/null +++ b/smack-android/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java @@ -0,0 +1 @@ +../../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java \ No newline at end of file diff --git a/smack-android/src/main/java/org/jivesoftware/smackx/debugger/package-info.java b/smack-android/src/main/java/org/jivesoftware/smackx/debugger/package-info.java deleted file mode 100644 index a6e02ba25..000000000 --- a/smack-android/src/main/java/org/jivesoftware/smackx/debugger/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Smack optional Debuggers. - */ -package org.jivesoftware.smackx.debugger; diff --git a/smack-android/src/main/java/org/jivesoftware/smackx/debugger/package-info.java b/smack-android/src/main/java/org/jivesoftware/smackx/debugger/package-info.java new file mode 120000 index 000000000..ff0f3fb31 --- /dev/null +++ b/smack-android/src/main/java/org/jivesoftware/smackx/debugger/package-info.java @@ -0,0 +1 @@ +../../../../../../../../smack-debug/src/main/java/org/jivesoftware/smackx/debugger/package-info.java \ No newline at end of file diff --git a/smack-android/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-android/src/main/java/org/jivesoftware/smackx/package-info.java deleted file mode 100644 index 01e4ee051..000000000 --- a/smack-android/src/main/java/org/jivesoftware/smackx/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * TODO describe me. - */ -package org.jivesoftware.smackx; diff --git a/smack-android/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-android/src/main/java/org/jivesoftware/smackx/package-info.java new file mode 120000 index 000000000..f0646658f --- /dev/null +++ b/smack-android/src/main/java/org/jivesoftware/smackx/package-info.java @@ -0,0 +1 @@ +../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/package-info.java \ No newline at end of file diff --git a/smack-compression-jzlib/src/main/java/org/jivesoftware/smack/compression/package-info.java b/smack-compression-jzlib/src/main/java/org/jivesoftware/smack/compression/package-info.java deleted file mode 100644 index a6f2a8bb9..000000000 --- a/smack-compression-jzlib/src/main/java/org/jivesoftware/smack/compression/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Classes and interfaces for XMPP stream compression (XEP-138). - */ -package org.jivesoftware.smack.compression; diff --git a/smack-compression-jzlib/src/main/java/org/jivesoftware/smack/compression/package-info.java b/smack-compression-jzlib/src/main/java/org/jivesoftware/smack/compression/package-info.java new file mode 120000 index 000000000..c88ae8f0b --- /dev/null +++ b/smack-compression-jzlib/src/main/java/org/jivesoftware/smack/compression/package-info.java @@ -0,0 +1 @@ +../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/compression/package-info.java \ No newline at end of file diff --git a/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/debugger/package-info.java b/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/debugger/package-info.java deleted file mode 100644 index a6e02ba25..000000000 --- a/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/debugger/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Smack optional Debuggers. - */ -package org.jivesoftware.smackx.debugger; diff --git a/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/debugger/package-info.java b/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/debugger/package-info.java new file mode 120000 index 000000000..ff0f3fb31 --- /dev/null +++ b/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/debugger/package-info.java @@ -0,0 +1 @@ +../../../../../../../../smack-debug/src/main/java/org/jivesoftware/smackx/debugger/package-info.java \ No newline at end of file diff --git a/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/package-info.java deleted file mode 100644 index 01e4ee051..000000000 --- a/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * TODO describe me. - */ -package org.jivesoftware.smackx; diff --git a/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/package-info.java new file mode 120000 index 000000000..f0646658f --- /dev/null +++ b/smack-debug-slf4j/src/main/java/org/jivesoftware/smackx/package-info.java @@ -0,0 +1 @@ +../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/package-info.java \ No newline at end of file diff --git a/smack-debug/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-debug/src/main/java/org/jivesoftware/smackx/package-info.java deleted file mode 100644 index 01e4ee051..000000000 --- a/smack-debug/src/main/java/org/jivesoftware/smackx/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * TODO describe me. - */ -package org.jivesoftware.smackx; diff --git a/smack-debug/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-debug/src/main/java/org/jivesoftware/smackx/package-info.java new file mode 120000 index 000000000..f0646658f --- /dev/null +++ b/smack-debug/src/main/java/org/jivesoftware/smackx/package-info.java @@ -0,0 +1 @@ +../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/package-info.java \ No newline at end of file diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smack/package-info.java b/smack-integration-test/src/main/java/org/jivesoftware/smack/package-info.java deleted file mode 100644 index ba596a352..000000000 --- a/smack-integration-test/src/main/java/org/jivesoftware/smack/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Core classes of the Smack API. - */ -package org.jivesoftware.smack; diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smack/package-info.java b/smack-integration-test/src/main/java/org/jivesoftware/smack/package-info.java new file mode 120000 index 000000000..a3d8f86a1 --- /dev/null +++ b/smack-integration-test/src/main/java/org/jivesoftware/smack/package-info.java @@ -0,0 +1 @@ +../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/package-info.java \ No newline at end of file diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-integration-test/src/main/java/org/jivesoftware/smackx/package-info.java deleted file mode 100644 index b7b3f868f..000000000 --- a/smack-integration-test/src/main/java/org/jivesoftware/smackx/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Integration tests. - */ -package org.jivesoftware.smackx; diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-integration-test/src/main/java/org/jivesoftware/smackx/package-info.java new file mode 120000 index 000000000..f0646658f --- /dev/null +++ b/smack-integration-test/src/main/java/org/jivesoftware/smackx/package-info.java @@ -0,0 +1 @@ +../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/package-info.java \ No newline at end of file diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smackx/ping/package-info.java b/smack-integration-test/src/main/java/org/jivesoftware/smackx/ping/package-info.java deleted file mode 100644 index 49e29068b..000000000 --- a/smack-integration-test/src/main/java/org/jivesoftware/smackx/ping/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Smacks implementation of XEP-0199: XMPP Ping. - */ -package org.jivesoftware.smackx.ping; diff --git a/smack-integration-test/src/main/java/org/jivesoftware/smackx/ping/package-info.java b/smack-integration-test/src/main/java/org/jivesoftware/smackx/ping/package-info.java new file mode 120000 index 000000000..edea7d8fd --- /dev/null +++ b/smack-integration-test/src/main/java/org/jivesoftware/smackx/ping/package-info.java @@ -0,0 +1 @@ +../../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/ping/package-info.java \ No newline at end of file diff --git a/smack-java7/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java b/smack-java7/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java deleted file mode 100644 index bf6407aba..000000000 --- a/smack-java7/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Java7 related classes for Smacks StringEncoder. - */ -package org.jivesoftware.smack.util.stringencoder; diff --git a/smack-java7/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java b/smack-java7/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java new file mode 120000 index 000000000..1843c7f20 --- /dev/null +++ b/smack-java7/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java @@ -0,0 +1 @@ +../../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java \ No newline at end of file diff --git a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/package-info.java deleted file mode 100644 index 01e4ee051..000000000 --- a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * TODO describe me. - */ -package org.jivesoftware.smackx; diff --git a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/package-info.java new file mode 120000 index 000000000..f0646658f --- /dev/null +++ b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/package-info.java @@ -0,0 +1 @@ +../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/package-info.java \ No newline at end of file diff --git a/smack-legacy/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-legacy/src/main/java/org/jivesoftware/smackx/package-info.java deleted file mode 100644 index 01e4ee051..000000000 --- a/smack-legacy/src/main/java/org/jivesoftware/smackx/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * TODO describe me. - */ -package org.jivesoftware.smackx; diff --git a/smack-legacy/src/main/java/org/jivesoftware/smackx/package-info.java b/smack-legacy/src/main/java/org/jivesoftware/smackx/package-info.java new file mode 120000 index 000000000..f0646658f --- /dev/null +++ b/smack-legacy/src/main/java/org/jivesoftware/smackx/package-info.java @@ -0,0 +1 @@ +../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/package-info.java \ No newline at end of file diff --git a/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/dns/package-info.java b/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/dns/package-info.java deleted file mode 100644 index 4461efc1e..000000000 --- a/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/dns/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Smacks DNS resolvers. - */ -package org.jivesoftware.smack.util.dns; diff --git a/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/dns/package-info.java b/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/dns/package-info.java new file mode 120000 index 000000000..a814e10da --- /dev/null +++ b/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/dns/package-info.java @@ -0,0 +1 @@ +../../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/util/dns/package-info.java \ No newline at end of file diff --git a/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/package-info.java b/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/package-info.java deleted file mode 100644 index 41218a37d..000000000 --- a/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Smack util classes. - */ -package org.jivesoftware.smack.util; diff --git a/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/package-info.java b/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/package-info.java new file mode 120000 index 000000000..6c269f201 --- /dev/null +++ b/smack-resolver-dnsjava/src/main/java/org/jivesoftware/smack/util/package-info.java @@ -0,0 +1 @@ +../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/util/package-info.java \ No newline at end of file diff --git a/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/package-info.java b/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/package-info.java deleted file mode 100644 index 4461efc1e..000000000 --- a/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Smacks DNS resolvers. - */ -package org.jivesoftware.smack.util.dns; diff --git a/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/package-info.java b/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/package-info.java new file mode 120000 index 000000000..a814e10da --- /dev/null +++ b/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/package-info.java @@ -0,0 +1 @@ +../../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/util/dns/package-info.java \ No newline at end of file diff --git a/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/package-info.java b/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/package-info.java deleted file mode 100644 index 41218a37d..000000000 --- a/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Smack util classes. - */ -package org.jivesoftware.smack.util; diff --git a/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/package-info.java b/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/package-info.java new file mode 120000 index 000000000..6c269f201 --- /dev/null +++ b/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/package-info.java @@ -0,0 +1 @@ +../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/util/package-info.java \ No newline at end of file diff --git a/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/dns/package-info.java b/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/dns/package-info.java deleted file mode 100644 index 4461efc1e..000000000 --- a/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/dns/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Smacks DNS resolvers. - */ -package org.jivesoftware.smack.util.dns; diff --git a/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/dns/package-info.java b/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/dns/package-info.java new file mode 120000 index 000000000..a814e10da --- /dev/null +++ b/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/dns/package-info.java @@ -0,0 +1 @@ +../../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/util/dns/package-info.java \ No newline at end of file diff --git a/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/package-info.java b/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/package-info.java deleted file mode 100644 index 41218a37d..000000000 --- a/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * - * Copyright 2015 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. - */ - -/** - * Smack util classes. - */ -package org.jivesoftware.smack.util; diff --git a/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/package-info.java b/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/package-info.java new file mode 120000 index 000000000..6c269f201 --- /dev/null +++ b/smack-resolver-minidns/src/main/java/org/jivesoftware/smack/util/package-info.java @@ -0,0 +1 @@ +../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/util/package-info.java \ No newline at end of file From 1a7e2c1510fe59757117a80b9f84e00c5b527f0e Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 1 Sep 2019 22:44:14 +0200 Subject: [PATCH 05/19] javadocAll: Set source to sourceCompatibility to work around bug in JDK 11. See https://bugs.openjdk.java.net/browse/JDK-8217177 --- build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.gradle b/build.gradle index 1fe03753e..131ddeb86 100644 --- a/build.gradle +++ b/build.gradle @@ -306,6 +306,12 @@ task javadocAll(type: Javadoc, dependsOn: copyAllJavadocDocFiles) { project.sourceSets.main.compileClasspath}) classpath += files(androidBootClasspath) options { + // Add source compatiblitiy statement to work around bug in JDK 11 + // See + // - https://bugs.openjdk.java.net/browse/JDK-8217177 + // - http://hg.openjdk.java.net/jdk/jdk/rev/8ce4083fc831 + // - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=920020 + source = sourceCompatibility linkSource = true use = true links = [ From ff8d1b829930e1b065acd20651daf5e456b7a780 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 1 Sep 2019 17:15:51 +0200 Subject: [PATCH 06/19] travis: Add javadocAll to 'script' gradle targets to ensure that javadocAll works correctly. A nice side-effect, this also ensures that the package-info.java symbolic links are still correct and haven't been replaced by some IDE or editor with the content of the link target. --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d8223459f..76b041f70 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,8 @@ install: gradle assemble --stacktrace # archive to additionaly test if artifact creation is # functional. Which hasn't always be the case in the past, see # 90cbcaebc7a89f4f771f733a33ac9f389df85be2 -script: gradle check install --stacktrace +# Also run javadocAll to ensure it works. +script: gradle check install javadocAll --stacktrace after_success: - JAVAC_VERSION=$((javac -version) 2>&1) From 85ef149c832442737b2b880d0d1d6a7e94016d47 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Wed, 4 Sep 2019 09:45:53 +0200 Subject: [PATCH 07/19] Make XmlStringBuilder.prelude() protected as the user should never be required to call it. --- .../java/org/jivesoftware/smack/util/XmlStringBuilder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java index c033a84b2..e59e8e423 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java @@ -461,11 +461,11 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { return escape(text.toString()); } - public XmlStringBuilder prelude(FullyQualifiedElement pe) { + protected XmlStringBuilder prelude(FullyQualifiedElement pe) { return prelude(pe.getElementName(), pe.getNamespace()); } - public XmlStringBuilder prelude(String elementName, String namespace) { + protected XmlStringBuilder prelude(String elementName, String namespace) { halfOpenElement(elementName); xmlnsAttribute(namespace); return this; From 935465a11b7376be29c6967b5be5c9fde7a1e51a Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Wed, 4 Sep 2019 09:47:29 +0200 Subject: [PATCH 08/19] Remove duplicate code in XmlStringBuilder --- .../smack/util/XmlStringBuilder.java | 32 ++++++++----------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java index e59e8e423..8724eb8b5 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java @@ -591,21 +591,10 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { * @throws IOException if an I/O error occured. */ public void write(Writer writer, String enclosingNamespace) throws IOException { - for (CharSequence csq : sb.getAsList()) { - if (csq instanceof XmlStringBuilder) { - ((XmlStringBuilder) csq).write(writer, enclosingNamespace); - } - else if (csq instanceof XmlNsAttribute) { - XmlNsAttribute xmlNsAttribute = (XmlNsAttribute) csq; - if (!xmlNsAttribute.value.equals(enclosingNamespace)) { - writer.write(xmlNsAttribute.toString()); - enclosingNamespace = xmlNsAttribute.value; - } - } - else { - writer.write(csq.toString()); - } - } + XmlEnvironment enclosingXmlEnvironment = XmlEnvironment.builder() + .withNamespace(enclosingNamespace) + .build(); + appendXmlTo(writer, enclosingXmlEnvironment); } public Iterator getCharSequenceIterator() { @@ -615,14 +604,19 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { @Override public CharSequence toXML(XmlEnvironment enclosingXmlEnvironment) { StringBuilder res = new StringBuilder(); - appendXmlTo(res, enclosingXmlEnvironment); + try { + appendXmlTo(res, enclosingXmlEnvironment); + } catch (IOException e) { + // Should never happen. + throw new AssertionError(e); + } return res; } - private void appendXmlTo(StringBuilder res, XmlEnvironment enclosingXmlEnvironment) { + private void appendXmlTo(Appendable appendable, XmlEnvironment enclosingXmlEnvironment) throws IOException { for (CharSequence csq : sb.getAsList()) { if (csq instanceof XmlStringBuilder) { - ((XmlStringBuilder) csq).appendXmlTo(res, enclosingXmlEnvironment); + ((XmlStringBuilder) csq).appendXmlTo(appendable, enclosingXmlEnvironment); } else if (csq instanceof XmlNsAttribute) { XmlNsAttribute xmlNsAttribute = (XmlNsAttribute) csq; @@ -632,7 +626,7 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { } } else { - res.append(csq); + appendable.append(csq); } } } From dd4df0a5ef2435f1c380a1c83c5b838b6986b2ce Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Wed, 4 Sep 2019 09:48:02 +0200 Subject: [PATCH 09/19] Improve how XmlStringBuilder handles enclosing XML environments to avoid emitting unnecessary attributes like xmlns. Also add a test for MediaElement that checks that does not carry a xmlns attribute. --- .../smack/util/XmlStringBuilder.java | 16 +++++-- .../mediaelement/element/MediaElement.java | 2 +- .../element/MediaElementTest.java | 42 +++++++++++++++++++ 3 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 smack-extensions/src/test/java/org/jivesoftware/smackx/mediaelement/element/MediaElementTest.java diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java index 8724eb8b5..3b7d91c72 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java @@ -56,9 +56,17 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { halfOpenElement(e.getElementName()); } - public XmlStringBuilder(FullyQualifiedElement ee, XmlEnvironment enclosingXmlEnvironment) { - this(enclosingXmlEnvironment); - prelude(ee); + public XmlStringBuilder(FullyQualifiedElement element, XmlEnvironment enclosingXmlEnvironment) { + sb = new LazyStringBuilder(); + halfOpenElement(element); + if (enclosingXmlEnvironment != null + && !enclosingXmlEnvironment.effectiveNamespaceEquals(element.getNamespace())) { + xmlnsAttribute(element.getNamespace()); + } + effectiveXmlEnvironment = XmlEnvironment.builder() + .withNamespace(element.getNamespace()) + .withNext(enclosingXmlEnvironment) + .build(); } public XmlStringBuilder escapedElement(String name, String escapedContent) { @@ -492,7 +500,7 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { } public XmlStringBuilder append(Collection elements) { - return append(elements, null); + return append(elements, effectiveXmlEnvironment); } public XmlStringBuilder append(Collection elements, XmlEnvironment enclosingXmlEnvironment) { diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/mediaelement/element/MediaElement.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/mediaelement/element/MediaElement.java index 08ebeba32..f82e47c40 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/mediaelement/element/MediaElement.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/mediaelement/element/MediaElement.java @@ -87,7 +87,7 @@ public class MediaElement implements FormFieldChildElement { .optAttribute("width", width) .rightAngleBracket(); - xml.append(uris, xmlEnvironment); + xml.append(uris); xml.closeElement(this); return xml; diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/mediaelement/element/MediaElementTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/mediaelement/element/MediaElementTest.java new file mode 100644 index 000000000..aed828fef --- /dev/null +++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/mediaelement/element/MediaElementTest.java @@ -0,0 +1,42 @@ +/** + * + * Copyright 2019 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.smackx.mediaelement.element; + +import static org.junit.Assert.assertEquals; + +import java.net.URI; +import java.net.URISyntaxException; + +import org.junit.jupiter.api.Test; + +public class MediaElementTest { + + @Test + public void simpleToXmlTest() throws URISyntaxException { + MediaElement.Uri uri = new MediaElement.Uri(new URI("http://example.org"), "test-type"); + + MediaElement mediaElement = MediaElement.builder() + .addUri(uri) + .setHeightAndWidth(16, 16) + .build(); + + String xml = mediaElement.toXML().toString(); + + String expected = "http://example.org"; + assertEquals(expected, xml); + } +} From e8819d31dd9c765fd654b524b5496575a7ed305b Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 7 Sep 2019 10:11:32 +0200 Subject: [PATCH 10/19] PagingTest: Call assertsEquals with the correct order of arguments first expected, then actual. --- .../src/test/java/org/jivesoftware/smackx/mam/PagingTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/smack-experimental/src/test/java/org/jivesoftware/smackx/mam/PagingTest.java b/smack-experimental/src/test/java/org/jivesoftware/smackx/mam/PagingTest.java index 91487e62a..d0919dbcf 100644 --- a/smack-experimental/src/test/java/org/jivesoftware/smackx/mam/PagingTest.java +++ b/smack-experimental/src/test/java/org/jivesoftware/smackx/mam/PagingTest.java @@ -47,7 +47,7 @@ public class PagingTest extends MamTest { assertEquals(mamQueryIQ.getDataForm(), dataForm); assertEquals(mamQueryIQ.getDataForm().getFields().get(0).getValues().get(0).toString(), "urn:xmpp:mam:1"); - assertEquals(mamQueryIQ.toXML(StreamOpen.CLIENT_NAMESPACE).toString(), pagingStanza); + assertEquals(pagingStanza, mamQueryIQ.toXML(StreamOpen.CLIENT_NAMESPACE).toString()); } } From e9bcdf3e6dfe85d87e652c809c3ffb9159878d8f Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 7 Sep 2019 17:05:37 +0200 Subject: [PATCH 11/19] QueryArchiveTest: Call assertsEquals with the correct order of arguments first expected, then actual. --- .../java/org/jivesoftware/smackx/mam/QueryArchiveTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/smack-experimental/src/test/java/org/jivesoftware/smackx/mam/QueryArchiveTest.java b/smack-experimental/src/test/java/org/jivesoftware/smackx/mam/QueryArchiveTest.java index bcd4e00ab..44990f420 100644 --- a/smack-experimental/src/test/java/org/jivesoftware/smackx/mam/QueryArchiveTest.java +++ b/smack-experimental/src/test/java/org/jivesoftware/smackx/mam/QueryArchiveTest.java @@ -82,8 +82,7 @@ public class QueryArchiveTest extends MamTest { message.addExtension(new MamResultExtension("g27", "34482-21985-73620", forwarded)); - // FIXME: The order of assertEquals is reversed, fix it by switching it. - assertEquals(message.toXML(StreamOpen.CLIENT_NAMESPACE).toString(), mamQueryResultExample); + assertEquals(mamQueryResultExample, message.toXML(StreamOpen.CLIENT_NAMESPACE).toString()); MamResultExtension mamResultExtension = MamResultExtension.from(message); From 65576cf3c276fe2e374eac22802ae034c5200df0 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 7 Sep 2019 18:17:08 +0200 Subject: [PATCH 12/19] Rework XML Element hierarchy and XmlStringBuilder - Reduce the amount of types that are subtypes of NamedElement. See javadoc of NamedElement for rationale. - Work more with XmlEnvironment in XmlStringBuilder. - Some minor changes to XmlStringBuilder API. --- .../smack/packet/AbstractError.java | 4 +- .../smack/packet/AbstractTextElement.java | 18 +++- .../smack/packet/FullyQualifiedElement.java | 9 ++ .../org/jivesoftware/smack/packet/IQ.java | 74 +++++++------ .../jivesoftware/smack/packet/Message.java | 35 +++--- .../smack/packet/NamedElement.java | 11 +- .../org/jivesoftware/smack/packet/Nonza.java | 4 +- .../org/jivesoftware/smack/packet/Packet.java | 6 +- .../jivesoftware/smack/packet/Presence.java | 14 ++- .../org/jivesoftware/smack/packet/Stanza.java | 43 +++----- .../smack/packet/TopLevelStreamElement.java | 4 +- .../smack/packet/XmlEnvironment.java | 23 ++++ .../smack/util/XmlStringBuilder.java | 49 ++++++--- .../smack/StanzaCollectorTest.java | 5 + .../smack/util/PacketParserUtilsTest.java | 4 - .../smackx/debugger/EnhancedDebugger.java | 5 + .../hoxt/packet/AbstractHttpOverXmpp.java | 34 +++--- .../smackx/iot/control/element/SetData.java | 13 ++- .../data/element/IoTDataExtensionElement.java | 28 +++++ .../smackx/iot/data/element/IoTDataField.java | 5 +- .../smackx/iot/data/element/NodeElement.java | 6 +- .../iot/data/element/TimestampElement.java | 5 +- .../jingle_filetransfer/element/Checksum.java | 2 +- .../element/JingleFileTransferChild.java | 16 ++- .../jingle_filetransfer/element/Range.java | 13 ++- .../smackx/mam/element/MamElements.java | 9 +- .../smackx/mam/element/MamFinIQ.java | 2 +- .../smackx/mam/element/MamPrefsIQ.java | 4 +- .../element/BlockQuoteElement.java | 28 +---- .../element/CodeBlockElement.java | 28 +---- .../message_markup/element/ListElement.java | 45 +++----- .../message_markup/element/MarkupElement.java | 82 ++++++++++---- .../message_markup/element/SpanElement.java | 29 +---- .../element/MUCLightAffiliationsIQ.java | 2 +- .../muclight/element/MUCLightBlockingIQ.java | 2 +- .../element/MUCLightChangeAffiliationsIQ.java | 2 +- .../element/MUCLightConfigurationIQ.java | 2 +- .../muclight/element/MUCLightCreateIQ.java | 4 +- .../muclight/element/MUCLightElements.java | 4 +- .../muclight/element/MUCLightInfoIQ.java | 4 +- .../element/EnablePushNotificationsIQ.java | 2 +- .../spoiler/element/SpoilerElement.java | 10 +- .../address/MultipleRecipientManager.java | 17 ++- .../address/packet/MultipleAddresses.java | 13 ++- .../bytestreams/socks5/packet/Bytestream.java | 22 ++-- .../smackx/delay/packet/DelayInformation.java | 2 +- .../smackx/forward/packet/Forwarded.java | 4 +- .../smackx/jingle/element/JingleContent.java | 17 ++- .../JingleContentDescriptionChildElement.java | 12 +-- .../element/JingleContentTransport.java | 7 +- .../JingleContentTransportCandidate.java | 6 +- .../element/JingleContentTransportInfo.java | 6 +- .../smackx/jingle/element/JingleReason.java | 19 ++-- .../elements/JingleS5BTransportCandidate.java | 15 ++- .../elements/JingleS5BTransportInfo.java | 15 ++- .../smackx/mood/element/MoodElement.java | 26 +++-- .../smackx/muc/packet/MUCUser.java | 9 +- .../jivesoftware/smackx/xdata/FormField.java | 2 +- .../smackx/xdata/packet/DataForm.java | 9 +- .../smackx/xdatalayout/packet/DataLayout.java | 44 ++++---- .../packet/ValidateElement.java | 16 ++- .../smackx/jingle/JingleContentTest.java | 2 +- .../smackx/jingle/JingleReasonTest.java | 102 ++++++++++-------- .../smack/roster/packet/RosterPacket.java | 11 +- .../smackx/jingleold/packet/Jingle.java | 19 ---- .../jingleold/provider/JingleProvider.java | 2 +- .../workgroup/packet/AgentStatusRequest.java | 8 -- .../smackx/omemo/element/OmemoElement.java | 2 +- .../omemo/element/OmemoHeaderElement.java | 24 +++-- .../smackx/omemo/element/OmemoKeyElement.java | 26 +++-- .../omemo/provider/OmemoVAxolotlProvider.java | 4 +- .../smackx/ox/element/PubkeyElement.java | 12 ++- .../ox/element/PublicKeysListElement.java | 12 ++- .../provider/ParseStreamManagementTest.java | 2 +- 74 files changed, 653 insertions(+), 523 deletions(-) create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/IoTDataExtensionElement.java diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/AbstractError.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/AbstractError.java index d6a0d56a2..3b5fe6b0e 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/AbstractError.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/AbstractError.java @@ -114,9 +114,7 @@ public class AbstractError { xml.escape(text); xml.closeElement("text"); } - for (ExtensionElement packetExtension : extensions) { - xml.append(packetExtension.toXML()); - } + xml.append(extensions); } public abstract static class Builder> { diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/AbstractTextElement.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/AbstractTextElement.java index b60f66e40..00e82d704 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/AbstractTextElement.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/AbstractTextElement.java @@ -1,6 +1,6 @@ /** * - * Copyright ยฉ 2017 Florian Schmaus + * Copyright ยฉ 2017-2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,8 +38,7 @@ public abstract class AbstractTextElement implements ExtensionElement { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); - xml.optXmlLangAttribute(lang); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.rightAngleBracket(); xml.escape(text); xml.closeElement(this); @@ -50,6 +49,19 @@ public abstract class AbstractTextElement implements ExtensionElement { return text; } + @Override + public final String getLanguage() { + return lang; + } + + /** + * Deprecated. + * + * @return deprecated + * @deprecated use {@link #getLanguage()} instead. + */ + @Deprecated + // TODO: Remove in Smack 4.5. public final String getLang() { return lang; } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/FullyQualifiedElement.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/FullyQualifiedElement.java index 1ed979548..2e93d23bd 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/FullyQualifiedElement.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/FullyQualifiedElement.java @@ -32,4 +32,13 @@ public interface FullyQualifiedElement extends NamedElement { String localPart = getElementName(); return new QName(namespaceURI, localPart); } + + /** + * Returns the xml:lang of this XML element, or null if one has not been set. + * + * @return the xml:lang of this XML element, or null. + */ + default String getLanguage() { + return null; + } } 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 5bbfa9d17..ec80133c7 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 @@ -136,6 +136,11 @@ public abstract class IQ extends Stanza { return childElementNamespace; } + @Override + public final String getElementName() { + return IQ_ELEMENT; + } + @Override public final String toString() { StringBuilder sb = new StringBuilder(); @@ -150,9 +155,8 @@ public abstract class IQ extends Stanza { @Override public final XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { - XmlStringBuilder buf = new XmlStringBuilder(enclosingXmlEnvironment); - buf.halfOpenElement(IQ_ELEMENT); - addCommonAttributes(buf, enclosingXmlEnvironment); + XmlStringBuilder buf = new XmlStringBuilder(this, enclosingXmlEnvironment); + addCommonAttributes(buf); if (type == null) { buf.attribute("type", "get"); } @@ -160,7 +164,7 @@ public abstract class IQ extends Stanza { buf.attribute("type", type.toString()); } buf.rightAngleBracket(); - buf.append(getChildElementXML(enclosingXmlEnvironment)); + appendInnerXml(buf); buf.closeElement(IQ_ELEMENT); return buf; } @@ -171,44 +175,52 @@ public abstract class IQ extends Stanza { * * @return the child element section of the IQ XML. */ + // TODO: This method should not be part of the public API as it is mostly used for testing purposes, with the one + // exception of AdHocCommand.getRaw(). public final XmlStringBuilder getChildElementXML() { - return getChildElementXML(null); + XmlStringBuilder xml = new XmlStringBuilder(); + appendInnerXml(xml); + return xml; } /** - * Returns the sub-element XML section of the IQ packet, or the empty String if there - * isn't one. + * Append the sub-element XML section of the IQ stanza. * - * @param enclosingXmlEnvironment the enclosing XML namespace. - * @return the child element section of the IQ XML. - * @since 4.3.0 + * @param xml the XmlStringBuilder to append to. */ - public final XmlStringBuilder getChildElementXML(XmlEnvironment enclosingXmlEnvironment) { - XmlStringBuilder xml = new XmlStringBuilder(); + private void appendInnerXml(XmlStringBuilder xml) { if (type == Type.error) { // Add the error sub-packet, if there is one. - appendErrorIfExists(xml, enclosingXmlEnvironment); + appendErrorIfExists(xml); + return; + } + if (childElementName == null) { + return; } - else if (childElementName != null) { - // Add the query section if there is one. - IQChildElementXmlStringBuilder iqChildElement = getIQChildElementBuilder(new IQChildElementXmlStringBuilder(this)); - if (iqChildElement != null) { - xml.append(iqChildElement); - List extensionsXml = getExtensions(); - if (iqChildElement.isEmptyElement) { - if (extensionsXml.isEmpty()) { - xml.closeEmptyElement(); - return xml; - } else { - xml.rightAngleBracket(); - } - } - xml.append(extensionsXml); - xml.closeElement(iqChildElement.element); - } + // Add the query section if there is one. + IQChildElementXmlStringBuilder iqChildElement = getIQChildElementBuilder( + new IQChildElementXmlStringBuilder(this)); + // TOOD: Document the cases where iqChildElement is null but childElementName not. And if there are none, change + // the logic. + if (iqChildElement == null) { + return; } - return xml; + + xml.append(iqChildElement); + + List extensionsXml = getExtensions(); + if (iqChildElement.isEmptyElement) { + if (extensionsXml.isEmpty()) { + xml.closeEmptyElement(); + return; + } + + xml.rightAngleBracket(); + } + + xml.append(extensionsXml); + xml.closeElement(iqChildElement.element); } /** 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 c1f8f3f1f..b6f426139 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 @@ -467,6 +467,11 @@ public final class Message extends Stanza implements TypedCloneable { return language; } + @Override + public String getElementName() { + return ELEMENT; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -481,9 +486,8 @@ public final class Message extends Stanza implements TypedCloneable { @Override public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { - XmlStringBuilder buf = new XmlStringBuilder(enclosingXmlEnvironment); - buf.halfOpenElement(ELEMENT); - enclosingXmlEnvironment = addCommonAttributes(buf, enclosingXmlEnvironment); + XmlStringBuilder buf = new XmlStringBuilder(this, enclosingXmlEnvironment); + addCommonAttributes(buf); buf.optAttribute("type", type); buf.rightAngleBracket(); @@ -497,16 +501,16 @@ public final class Message extends Stanza implements TypedCloneable { // Skip the default language if (subject.equals(defaultSubject)) continue; - buf.append(subject.toXML()); + buf.append(subject); } buf.optElement("thread", thread); // Append the error subpacket if the message type is an error. if (type == Type.error) { - appendErrorIfExists(buf, enclosingXmlEnvironment); + appendErrorIfExists(buf); } // Add extension elements, if any are defined. - buf.append(getExtensions(), enclosingXmlEnvironment); + buf.append(getExtensions()); buf.closeElement(ELEMENT); return buf; @@ -544,11 +548,7 @@ public final class Message extends Stanza implements TypedCloneable { this.subject = subject; } - /** - * Returns the language of this message subject. - * - * @return the language of this message subject. - */ + @Override public String getLanguage() { return language; } @@ -592,8 +592,8 @@ public final class Message extends Stanza implements TypedCloneable { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(getElementName()).optXmlLangAttribute(getLanguage()).rightAngleBracket(); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); + xml.rightAngleBracket(); xml.escape(subject); xml.closeElement(getElementName()); return xml; @@ -642,12 +642,7 @@ public final class Message extends Stanza implements TypedCloneable { this.namespace = Objects.requireNonNull(namespace); } - /** - * Returns the language of this message body or {@code null} if the body extension element does not explicitly - * set a language, but instead inherits it from the outer element (usually a {@link Message} stanza). - * - * @return the language of this message body or {@code null}. - */ + @Override public String getLanguage() { return language; } @@ -692,7 +687,7 @@ public final class Message extends Stanza implements TypedCloneable { @Override public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { XmlStringBuilder xml = new XmlStringBuilder(this, enclosingXmlEnvironment); - xml.optXmlLangAttribute(getLanguage()).rightAngleBracket(); + xml.rightAngleBracket(); xml.escape(message); xml.closeElement(getElementName()); return xml; diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/NamedElement.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/NamedElement.java index bdfa0e2cf..219b35ad1 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/NamedElement.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/NamedElement.java @@ -1,6 +1,6 @@ /** * - * Copyright ยฉ 2014 Florian Schmaus + * Copyright ยฉ 2014-2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,8 +18,13 @@ package org.jivesoftware.smack.packet; /** - * Interface to represent a XML element. This is similar to {@link ExtensionElement}, but does not - * carry a namespace and is usually included as child element of an stanza extension. + * Interface to represent a XML element. This is similar to {@link ExtensionElement}, but does not carry a single + * namespace, but instead is used with multiple namespaces. Examples for this include MUC's <destroy/> element. + *

+ * Please note that usage of this interface is discouraged. The reason is that every XML element is fully + * qualified, i.e., it is qualified by a namespace. The namespace may not be explicitly given, but instead, is inherited + * from an outer element. Use {@link FullyQualifiedElement} instead when possible. + *

*/ public interface NamedElement extends Element { diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/Nonza.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/Nonza.java index 6e2435637..a86a4e1db 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/Nonza.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/Nonza.java @@ -1,6 +1,6 @@ /** * - * Copyright ยฉ 2014-2015 Florian Schmaus + * Copyright ยฉ 2014-2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +30,6 @@ package org.jivesoftware.smack.packet; * @author Florian Schmaus * @see XEP-0360: Nonzas (are not Stanzas) */ -public interface Nonza extends TopLevelStreamElement, FullyQualifiedElement { +public interface Nonza extends TopLevelStreamElement { } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/Packet.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/Packet.java index d82209ac3..2a97d0eae 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/Packet.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/Packet.java @@ -113,11 +113,7 @@ public interface Packet extends TopLevelStreamElement { */ void setError(StanzaError error); - /** - * Returns the xml:lang of this Stanza, or null if one has not been set. - * - * @return the xml:lang of this Stanza, or null. - */ + @Override String getLanguage(); /** 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 ae6de5573..62630ecfb 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 @@ -256,6 +256,11 @@ public final class Presence extends Stanza implements TypedCloneable { this.mode = mode; } + @Override + public String getElementName() { + return ELEMENT; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -277,9 +282,8 @@ public final class Presence extends Stanza implements TypedCloneable { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder buf = new XmlStringBuilder(enclosingNamespace); - buf.halfOpenElement(ELEMENT); - addCommonAttributes(buf, enclosingNamespace); + XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); + addCommonAttributes(buf); if (type != Type.available) { buf.attribute("type", type); } @@ -291,10 +295,10 @@ public final class Presence extends Stanza implements TypedCloneable { buf.element("show", mode); } - buf.append(getExtensions(), enclosingNamespace); + buf.append(getExtensions()); // Add the error sub-packet, if there is one. - appendErrorIfExists(buf, enclosingNamespace); + appendErrorIfExists(buf); buf.closeElement(ELEMENT); 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 d1362bea9..d4906ff91 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 @@ -59,6 +59,10 @@ public abstract class Stanza implements TopLevelStreamElement { private final MultiMap extensionElements = new MultiMap<>(); + // Assume that all stanzas Smack handles are in the client namespace, since Smack is an XMPP client library. We can + // change this behavior later if it is required. + private final String namespace = StreamOpen.CLIENT_NAMESPACE; + private String id = null; private Jid to; private Jid from; @@ -283,11 +287,7 @@ public abstract class Stanza implements TopLevelStreamElement { error = xmppErrorBuilder.build(); } - /** - * Returns the xml:lang of this Stanza, or null if one has not been set. - * - * @return the xml:lang of this Stanza, or null. - */ + @Override public String getLanguage() { return language; } @@ -491,6 +491,11 @@ public abstract class Stanza implements TopLevelStreamElement { @Override public abstract String toString(); + @Override + public final String getNamespace() { + return namespace; + } + /** * Returns the default language used for all messages containing localized content. * @@ -501,33 +506,14 @@ public abstract class Stanza implements TopLevelStreamElement { } /** - * Add to, from, id and 'xml:lang' attributes + * Add to, from, and id attributes. * * @param xml the {@link XmlStringBuilder}. - * @param enclosingXmlEnvironment the enclosing XML namespace. - * @return the XML environment for this stanza. */ - protected XmlEnvironment addCommonAttributes(XmlStringBuilder xml, XmlEnvironment enclosingXmlEnvironment) { - String language = getLanguage(); - String namespace = StreamOpen.CLIENT_NAMESPACE; - if (enclosingXmlEnvironment != null) { - String effectiveEnclosingNamespace = enclosingXmlEnvironment.getEffectiveNamespaceOrUse(namespace); - switch (effectiveEnclosingNamespace) { - case StreamOpen.CLIENT_NAMESPACE: - case StreamOpen.SERVER_NAMESPACE: - break; - default: - namespace = effectiveEnclosingNamespace; - } - } - - xml.xmlnsAttribute(namespace); + protected final void addCommonAttributes(XmlStringBuilder xml) { xml.optAttribute("to", getTo()); xml.optAttribute("from", getFrom()); xml.optAttribute("id", getStanzaId()); - xml.xmllangAttribute(language); - - return new XmlEnvironment(namespace, language); } protected void logCommonAttributes(StringBuilder sb) { @@ -546,12 +532,11 @@ public abstract class Stanza implements TopLevelStreamElement { * Append an XMPPError is this stanza has one set. * * @param xml the XmlStringBuilder to append the error to. - * @param enclosingXmlEnvironment the enclosing XML environment. */ - protected void appendErrorIfExists(XmlStringBuilder xml, XmlEnvironment enclosingXmlEnvironment) { + protected void appendErrorIfExists(XmlStringBuilder xml) { StanzaError error = getError(); if (error != null) { - xml.append(error.toXML(enclosingXmlEnvironment)); + xml.append(error); } } } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/TopLevelStreamElement.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/TopLevelStreamElement.java index b952a5d54..7cca472ca 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/TopLevelStreamElement.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/TopLevelStreamElement.java @@ -1,6 +1,6 @@ /** * - * Copyright ยฉ 2014-2018 Florian Schmaus + * Copyright ยฉ 2014-2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,6 @@ package org.jivesoftware.smack.packet; * A XMPP top level stream element. This is either a stanza ({@link Stanza}) or * just a plain stream element ({@link Nonza}). */ -public interface TopLevelStreamElement extends Element { +public interface TopLevelStreamElement extends FullyQualifiedElement { } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java index 0e713a04c..4abc3eb06 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java @@ -106,6 +106,29 @@ public class XmlEnvironment { return effectiveLanguage; } + public boolean effectiveLanguageEquals(String language) { + String effectiveLanguage = getEffectiveLanguage(); + if (effectiveLanguage == null) { + return false; + } + return effectiveLanguage.equals(language); + } + + private transient String toStringCache; + + @Override + public String toString() { + if (toStringCache == null) { + StringBuilder sb = new StringBuilder(); + sb.append(XmlEnvironment.class.getSimpleName()).append(' '); + sb.append("xmlns=").append(getEffectiveNamespace()).append(' '); + sb.append("xmllang=").append(getEffectiveLanguage()).append(' '); + + toStringCache = sb.toString(); + } + return toStringCache; + } + public static XmlEnvironment from(XmlPullParser parser) { return from(parser, null); } diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java index 3b7d91c72..acf5ac1b4 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/XmlStringBuilder.java @@ -38,17 +38,12 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { private final XmlEnvironment effectiveXmlEnvironment; public XmlStringBuilder() { - this((XmlEnvironment) null); - } - - public XmlStringBuilder(XmlEnvironment effectiveXmlEnvironment) { sb = new LazyStringBuilder(); - this.effectiveXmlEnvironment = effectiveXmlEnvironment; + effectiveXmlEnvironment = null; } public XmlStringBuilder(ExtensionElement pe) { - this(); - prelude(pe); + this(pe, null); } public XmlStringBuilder(NamedElement e) { @@ -59,12 +54,24 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { public XmlStringBuilder(FullyQualifiedElement element, XmlEnvironment enclosingXmlEnvironment) { sb = new LazyStringBuilder(); halfOpenElement(element); - if (enclosingXmlEnvironment != null - && !enclosingXmlEnvironment.effectiveNamespaceEquals(element.getNamespace())) { - xmlnsAttribute(element.getNamespace()); + + String xmlNs = element.getNamespace(); + String xmlLang = element.getLanguage(); + if (enclosingXmlEnvironment == null) { + xmlnsAttribute(xmlNs); + xmllangAttribute(xmlLang); + } else { + if (!enclosingXmlEnvironment.effectiveNamespaceEquals(xmlNs)) { + xmlnsAttribute(xmlNs); + } + if (!enclosingXmlEnvironment.effectiveLanguageEquals(xmlLang)) { + xmllangAttribute(xmlLang); + } } + effectiveXmlEnvironment = XmlEnvironment.builder() - .withNamespace(element.getNamespace()) + .withNamespace(xmlNs) + .withLanguage(xmlLang) .withNext(enclosingXmlEnvironment) .build(); } @@ -124,6 +131,15 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { return this; } + /** + * Deprecated. + * + * @param element deprecated. + * @return deprecated. + * @deprecated use {@link #append(Element)} instead. + */ + @Deprecated + // TODO: Remove in Smack 4.5. public XmlStringBuilder element(Element element) { assert element != null; return append(element.toXML()); @@ -161,7 +177,7 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { public XmlStringBuilder optElement(Element element) { if (element != null) { - append(element.toXML()); + append(element); } return this; } @@ -435,6 +451,7 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { } public XmlStringBuilder xmllangAttribute(String value) { + // TODO: This should probably be attribute(), not optAttribute(). optAttribute("xml:lang", value); return this; } @@ -499,13 +516,13 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element { return this; } - public XmlStringBuilder append(Collection elements) { - return append(elements, effectiveXmlEnvironment); + public XmlStringBuilder append(Element element) { + return append(element.toXML(effectiveXmlEnvironment)); } - public XmlStringBuilder append(Collection elements, XmlEnvironment enclosingXmlEnvironment) { + public XmlStringBuilder append(Collection elements) { for (Element element : elements) { - append(element.toXML(enclosingXmlEnvironment)); + append(element); } return this; } diff --git a/smack-core/src/test/java/org/jivesoftware/smack/StanzaCollectorTest.java b/smack-core/src/test/java/org/jivesoftware/smack/StanzaCollectorTest.java index 988cbafef..4eeb028ce 100644 --- a/smack-core/src/test/java/org/jivesoftware/smack/StanzaCollectorTest.java +++ b/smack-core/src/test/java/org/jivesoftware/smack/StanzaCollectorTest.java @@ -188,5 +188,10 @@ public class StanzaCollectorTest { public String toString() { return toXML().toString(); } + + @Override + public String getElementName() { + return "packetId"; + } } } diff --git a/smack-core/src/test/java/org/jivesoftware/smack/util/PacketParserUtilsTest.java b/smack-core/src/test/java/org/jivesoftware/smack/util/PacketParserUtilsTest.java index 8518c1188..76f0d996a 100644 --- a/smack-core/src/test/java/org/jivesoftware/smack/util/PacketParserUtilsTest.java +++ b/smack-core/src/test/java/org/jivesoftware/smack/util/PacketParserUtilsTest.java @@ -738,10 +738,6 @@ public class PacketParserUtilsTest { .a("type", "chat") .a("xml:lang", "en") .e("body") - // TODO: Remove the following xml:lang once Smack's serialization toXml() API is aware of a potential - // scoping xml:lang value. The out message stanza already declares an xml:lang with the exact same - // value, hence this statement is redundant. - .a("xml:lang", "en") .t("This is a test of the emergency broadcast system, 1.") .up() .e("body") 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 958117672..c30f0aaf4 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 @@ -943,6 +943,11 @@ public class EnhancedDebugger extends SmackDebugger { public String toString() { return toXML((XmlEnvironment) null); } + + @Override + public String getElementName() { + return null; + } } /** diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/hoxt/packet/AbstractHttpOverXmpp.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/hoxt/packet/AbstractHttpOverXmpp.java index 1a5e88c43..735807f4b 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/hoxt/packet/AbstractHttpOverXmpp.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/hoxt/packet/AbstractHttpOverXmpp.java @@ -16,6 +16,7 @@ */ package org.jivesoftware.smackx.hoxt.packet; +import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.util.Objects; @@ -145,12 +146,19 @@ public abstract class AbstractHttpOverXmpp extends IQ { protected abstract B getThis(); } + private abstract static class HoxExtensionElement implements ExtensionElement { + @Override + public final String getNamespace() { + return NAMESPACE; + } + } + /** * Representation of Data element. *

* This class is immutable. */ - public static class Data implements NamedElement { + public static class Data extends HoxExtensionElement { public static final String ELEMENT = "data"; @@ -172,9 +180,9 @@ public abstract class AbstractHttpOverXmpp extends IQ { */ @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.rightAngleBracket(); - xml.element(child); + xml.append(child); xml.closeElement(this); return xml; } @@ -199,7 +207,7 @@ public abstract class AbstractHttpOverXmpp extends IQ { *

* This class is immutable. */ - public static class Text implements NamedElement { + public static class Text extends HoxExtensionElement { public static final String ELEMENT = "text"; @@ -216,7 +224,7 @@ public abstract class AbstractHttpOverXmpp extends IQ { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.rightAngleBracket(); xml.optAppend(text); xml.closeElement(this); @@ -243,7 +251,7 @@ public abstract class AbstractHttpOverXmpp extends IQ { *

* This class is immutable. */ - public static class Base64 implements NamedElement { + public static class Base64 extends HoxExtensionElement { public static final String ELEMENT = "base64"; @@ -260,7 +268,7 @@ public abstract class AbstractHttpOverXmpp extends IQ { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.rightAngleBracket(); xml.optAppend(text); xml.closeElement(this); @@ -287,7 +295,7 @@ public abstract class AbstractHttpOverXmpp extends IQ { *

* This class is immutable. */ - public static class Xml implements NamedElement { + public static class Xml extends HoxExtensionElement { public static final String ELEMENT = "xml"; @@ -304,7 +312,7 @@ public abstract class AbstractHttpOverXmpp extends IQ { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.rightAngleBracket(); xml.optAppend(text); xml.closeElement(this); @@ -331,7 +339,7 @@ public abstract class AbstractHttpOverXmpp extends IQ { *

* This class is immutable. */ - public static class ChunkedBase64 implements NamedElement { + public static class ChunkedBase64 extends HoxExtensionElement { public static final String ELEMENT = "chunkedBase64"; @@ -348,7 +356,7 @@ public abstract class AbstractHttpOverXmpp extends IQ { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.attribute("streamId", streamId); xml.closeEmptyElement(); return xml; @@ -374,7 +382,7 @@ public abstract class AbstractHttpOverXmpp extends IQ { *

* This class is immutable. */ - public static class Ibb implements NamedElement { + public static class Ibb extends HoxExtensionElement { public static final String ELEMENT = "ibb"; @@ -391,7 +399,7 @@ public abstract class AbstractHttpOverXmpp extends IQ { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.attribute("sid", sid); xml.closeEmptyElement(); return xml; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/control/element/SetData.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/control/element/SetData.java index 9c1e0e94e..15d44f641 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/control/element/SetData.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/control/element/SetData.java @@ -1,6 +1,6 @@ /** * - * Copyright ยฉ 2016 Florian Schmaus + * Copyright ยฉ 2016-2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,10 +18,10 @@ package org.jivesoftware.smackx.iot.control.element; import java.util.Locale; -import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.util.XmlStringBuilder; -public abstract class SetData implements NamedElement { +public abstract class SetData implements ExtensionElement { public enum Type { BOOL, @@ -76,6 +76,11 @@ public abstract class SetData implements NamedElement { return getType().toString(); } + @Override + public final String getNamespace() { + return IoTSetRequest.NAMESPACE; + } + /** * Returns the XML representation of this Element. * @@ -83,7 +88,7 @@ public abstract class SetData implements NamedElement { */ @Override public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.attribute("name", name); xml.attribute("value", value); xml.closeEmptyElement(); diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/IoTDataExtensionElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/IoTDataExtensionElement.java new file mode 100644 index 000000000..62e0cf3c6 --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/IoTDataExtensionElement.java @@ -0,0 +1,28 @@ +/** + * + * Copyright 2019 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.smackx.iot.data.element; + +import org.jivesoftware.smack.packet.ExtensionElement; + +public abstract class IoTDataExtensionElement implements ExtensionElement { + + @Override + public final String getNamespace() { + return IoTFieldsExtension.NAMESPACE; + } + +} diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/IoTDataField.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/IoTDataField.java index a3a31fa67..7b10a41ea 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/IoTDataField.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/IoTDataField.java @@ -16,10 +16,9 @@ */ package org.jivesoftware.smackx.iot.data.element; -import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.util.XmlStringBuilder; -public abstract class IoTDataField implements NamedElement { +public abstract class IoTDataField extends IoTDataExtensionElement { enum Type { integer("int"), @@ -53,7 +52,7 @@ public abstract class IoTDataField implements NamedElement { @Override public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.attribute("name", name).attribute("value", getValueString()); // TODO handle 'unit' attribute as special case if is implemented. xml.closeEmptyElement(); diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/NodeElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/NodeElement.java index f344c99d7..bde5d94f8 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/NodeElement.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/NodeElement.java @@ -19,12 +19,10 @@ package org.jivesoftware.smackx.iot.data.element; import java.util.Collections; import java.util.List; -import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.util.XmlStringBuilder; - import org.jivesoftware.smackx.iot.element.NodeInfo; -public class NodeElement implements NamedElement { +public class NodeElement extends IoTDataExtensionElement { public static final String ELEMENT = "node"; @@ -51,7 +49,7 @@ public class NodeElement implements NamedElement { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); nodeInfo.appendTo(xml); xml.rightAngleBracket(); diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/TimestampElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/TimestampElement.java index 1d428b6eb..a3e6ebc75 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/TimestampElement.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/iot/data/element/TimestampElement.java @@ -20,10 +20,9 @@ import java.util.Collections; import java.util.Date; import java.util.List; -import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.util.XmlStringBuilder; -public class TimestampElement implements NamedElement { +public class TimestampElement extends IoTDataExtensionElement { public static final String ELEMENT = "timestamp"; @@ -46,7 +45,7 @@ public class TimestampElement implements NamedElement { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.attribute("value", date); xml.rightAngleBracket(); diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/Checksum.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/Checksum.java index 1f94c6927..f1455b7ca 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/Checksum.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/Checksum.java @@ -52,7 +52,7 @@ public class Checksum implements ExtensionElement { sb.optAttribute(ATTR_CREATOR, creator); sb.optAttribute(ATTR_NAME, name); sb.rightAngleBracket(); - sb.element(file); + sb.append(file); sb.closeElement(this); return sb; } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/JingleFileTransferChild.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/JingleFileTransferChild.java index 2758f3c18..b4e9021ec 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/JingleFileTransferChild.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/JingleFileTransferChild.java @@ -1,6 +1,6 @@ /** * - * Copyright 2017 Paul Schaub + * Copyright 2017 Paul Schaub, 2019 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,6 +19,7 @@ package org.jivesoftware.smackx.jingle_filetransfer.element; import java.io.File; import java.util.Date; +import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smackx.hashes.element.HashElement; @@ -27,8 +28,10 @@ import org.jivesoftware.smackx.jingle.element.JingleContentDescriptionChildEleme /** * Content of type File. */ -public class JingleFileTransferChild extends JingleContentDescriptionChildElement { +public class JingleFileTransferChild implements JingleContentDescriptionChildElement { public static final String ELEMENT = "file"; + public static final String NAMESPACE = JingleFileTransfer.NAMESPACE_V5; + public static final String ELEM_DATE = "date"; public static final String ELEM_DESC = "desc"; public static final String ELEM_MEDIA_TYPE = "media-type"; @@ -87,8 +90,13 @@ public class JingleFileTransferChild extends JingleContentDescriptionChildElemen } @Override - public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder sb = new XmlStringBuilder(this); + public String getNamespace() { + return NAMESPACE; + } + + @Override + public XmlStringBuilder toXML(XmlEnvironment enclosingNamespace) { + XmlStringBuilder sb = new XmlStringBuilder(this, enclosingNamespace); sb.rightAngleBracket(); sb.optElement(ELEM_DATE, date); diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/Range.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/Range.java index 43e422429..20bfc9f6a 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/Range.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jingle_filetransfer/element/Range.java @@ -16,7 +16,7 @@ */ package org.jivesoftware.smackx.jingle_filetransfer.element; -import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.FullyQualifiedElement; import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smackx.hashes.element.HashElement; @@ -24,9 +24,11 @@ import org.jivesoftware.smackx.hashes.element.HashElement; /** * RangeElement which specifies, which range of a file shall be transferred. */ -public class Range implements NamedElement { +public class Range implements FullyQualifiedElement { public static final String ELEMENT = "range"; + public static final String NAMESPACE = JingleFileTransferChild.NAMESPACE; + public static final String ATTR_OFFSET = "offset"; public static final String ATTR_LENGTH = "length"; @@ -99,6 +101,11 @@ public class Range implements NamedElement { return ELEMENT; } + @Override + public String getNamespace() { + return NAMESPACE; + } + @Override public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { XmlStringBuilder sb = new XmlStringBuilder(this); @@ -108,7 +115,7 @@ public class Range implements NamedElement { if (hash != null) { sb.rightAngleBracket(); - sb.element(hash); + sb.append(hash); sb.closeElement(this); } else { sb.closeEmptyElement(); diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamElements.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamElements.java index 148f1079b..540ffe774 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamElements.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamElements.java @@ -126,15 +126,14 @@ public class MamElements { } @Override - public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(this); - xml.xmlnsAttribute(NAMESPACE); + public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); + xml.optAttribute("queryid", getQueryId()); xml.optAttribute("id", getId()); xml.rightAngleBracket(); - xml.element(getForwarded()); + xml.append(getForwarded()); xml.closeElement(this); return xml; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamFinIQ.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamFinIQ.java index 3f6439a70..cd5b92669 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamFinIQ.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamFinIQ.java @@ -124,7 +124,7 @@ public class MamFinIQ extends IQ { xml.setEmptyElement(); } else { xml.rightAngleBracket(); - xml.element(rsmSet); + xml.append(rsmSet); } return xml; } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamPrefsIQ.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamPrefsIQ.java index b0a3e57e5..743847914 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamPrefsIQ.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/mam/element/MamPrefsIQ.java @@ -134,12 +134,12 @@ public class MamPrefsIQ extends IQ { if (alwaysJids != null) { MamElements.AlwaysJidListElement alwaysElement = new AlwaysJidListElement(alwaysJids); - xml.element(alwaysElement); + xml.append(alwaysElement); } if (neverJids != null) { MamElements.NeverJidListElement neverElement = new NeverJidListElement(neverJids); - xml.element(neverElement); + xml.append(neverElement); } return xml; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/BlockQuoteElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/BlockQuoteElement.java index 0a8acf272..7d66db83a 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/BlockQuoteElement.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/BlockQuoteElement.java @@ -16,14 +16,10 @@ */ package org.jivesoftware.smackx.message_markup.element; -import org.jivesoftware.smack.util.XmlStringBuilder; - -public class BlockQuoteElement implements MarkupElement.BlockLevelMarkupElement { +public class BlockQuoteElement extends MarkupElement.BlockLevelMarkupElement { public static final String ELEMENT = "bquote"; - private final int start, end; - /** * Create a new Block Quote element. * @@ -31,18 +27,7 @@ public class BlockQuoteElement implements MarkupElement.BlockLevelMarkupElement * @param end end index */ public BlockQuoteElement(int start, int end) { - this.start = start; - this.end = end; - } - - @Override - public int getStart() { - return start; - } - - @Override - public int getEnd() { - return end; + super(start, end); } @Override @@ -50,13 +35,4 @@ public class BlockQuoteElement implements MarkupElement.BlockLevelMarkupElement return ELEMENT; } - @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(this); - xml.attribute(ATTR_START, getStart()); - xml.attribute(ATTR_END, getEnd()); - xml.closeEmptyElement(); - return xml; - } } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/CodeBlockElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/CodeBlockElement.java index 73e333af3..4a741c0c0 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/CodeBlockElement.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/CodeBlockElement.java @@ -16,14 +16,10 @@ */ package org.jivesoftware.smackx.message_markup.element; -import org.jivesoftware.smack.util.XmlStringBuilder; - -public class CodeBlockElement implements MarkupElement.BlockLevelMarkupElement { +public class CodeBlockElement extends MarkupElement.BlockLevelMarkupElement { public static final String ELEMENT = "bcode"; - private final int start, end; - /** * Create a new Code Block element. * @@ -31,18 +27,7 @@ public class CodeBlockElement implements MarkupElement.BlockLevelMarkupElement { * @param end end index */ public CodeBlockElement(int start, int end) { - this.start = start; - this.end = end; - } - - @Override - public int getStart() { - return start; - } - - @Override - public int getEnd() { - return end; + super(start, end); } @Override @@ -50,13 +35,4 @@ public class CodeBlockElement implements MarkupElement.BlockLevelMarkupElement { return ELEMENT; } - @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(this); - xml.attribute(ATTR_START, getStart()); - xml.attribute(ATTR_END, getEnd()); - xml.closeEmptyElement(); - return xml; - } } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/ListElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/ListElement.java index 499fdaa61..241bd8053 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/ListElement.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/ListElement.java @@ -19,15 +19,14 @@ package org.jivesoftware.smackx.message_markup.element; import java.util.Collections; import java.util.List; -import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.util.XmlStringBuilder; -public class ListElement implements MarkupElement.MarkupChildElement { +public class ListElement extends MarkupElement.NonEmptyChildElement { public static final String ELEMENT = "list"; public static final String ELEM_LI = "li"; - private final int start, end; private final List entries; /** @@ -38,21 +37,10 @@ public class ListElement implements MarkupElement.MarkupChildElement { * @param entries list entries */ public ListElement(int start, int end, List entries) { - this.start = start; - this.end = end; + super(start, end); this.entries = Collections.unmodifiableList(entries); } - @Override - public int getStart() { - return start; - } - - @Override - public int getEnd() { - return end; - } - /** * Return a list of all list entries. * @@ -68,22 +56,11 @@ public class ListElement implements MarkupElement.MarkupChildElement { } @Override - public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(this); - xml.attribute(ATTR_START, getStart()); - xml.attribute(ATTR_END, getEnd()); - xml.rightAngleBracket(); - - for (ListEntryElement li : getEntries()) { - xml.append(li.toXML()); - } - - xml.closeElement(this); - return xml; + public void appendInnerXml(XmlStringBuilder xml) { + xml.append(getEntries()); } - public static class ListEntryElement implements NamedElement { + public static class ListEntryElement implements ExtensionElement { private final int start; @@ -109,11 +86,15 @@ public class ListElement implements MarkupElement.MarkupChildElement { return ELEM_LI; } + @Override + public String getNamespace() { + return MarkupElement.NAMESPACE; + } + @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(this); - xml.attribute(ATTR_START, getStart()); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); + xml.attribute(MarkupElement.MarkupChildElement.ATTR_START, getStart()); xml.closeEmptyElement(); return xml; } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/MarkupElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/MarkupElement.java index be76e158b..0c368e0cf 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/MarkupElement.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/MarkupElement.java @@ -22,7 +22,6 @@ import java.util.List; import java.util.Set; import org.jivesoftware.smack.packet.ExtensionElement; -import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.util.XmlStringBuilder; public class MarkupElement implements ExtensionElement { @@ -267,46 +266,89 @@ public class MarkupElement implements ExtensionElement { } } - - - - - - - - - - - - - /** * Interface for child elements. */ - public interface MarkupChildElement extends NamedElement { + public abstract static class MarkupChildElement implements ExtensionElement { - String ATTR_START = "start"; - String ATTR_END = "end"; + public static final String ATTR_START = "start"; + public static final String ATTR_END = "end"; + + private final int start, end; + + protected MarkupChildElement(int start, int end) { + this.start = start; + this.end = end; + } /** * Return the start index of this element. * * @return start index */ - int getStart(); + public final int getStart() { + return start; + } /** * Return the end index of this element. * * @return end index */ - int getEnd(); + public final int getEnd() { + return end; + } + + @Override + public final String getNamespace() { + return NAMESPACE; + } + + @Override + public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); + xml.attribute(ATTR_START, getStart()); + xml.attribute(ATTR_END, getEnd()); + + afterXmlPrelude(xml); + return xml; + } + + protected abstract void afterXmlPrelude(XmlStringBuilder xml); + } + + public abstract static class NonEmptyChildElement extends MarkupChildElement { + + protected NonEmptyChildElement(int start, int end) { + super(start, end); + } + + @Override + protected final void afterXmlPrelude(XmlStringBuilder xml) { + xml.rightAngleBracket(); + + appendInnerXml(xml); + + xml.closeElement(this); + } + + protected abstract void appendInnerXml(XmlStringBuilder xml); + } /** * Interface for block level child elements. */ - public interface BlockLevelMarkupElement extends MarkupChildElement { + public abstract static class BlockLevelMarkupElement extends MarkupChildElement { + + protected BlockLevelMarkupElement(int start, int end) { + super(start, end); + } + + @Override + protected final void afterXmlPrelude(XmlStringBuilder xml) { + xml.closeEmptyElement(); + } } } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/SpanElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/SpanElement.java index 74f3adebb..5a5fa1338 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/SpanElement.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/SpanElement.java @@ -21,11 +21,10 @@ import java.util.Set; import org.jivesoftware.smack.util.XmlStringBuilder; -public class SpanElement implements MarkupElement.MarkupChildElement { +public class SpanElement extends MarkupElement.NonEmptyChildElement { public static final String ELEMENT = "span"; - private final int start, end; private final Set styles; /** @@ -36,21 +35,10 @@ public class SpanElement implements MarkupElement.MarkupChildElement { * @param styles list of styles that apply to this span */ public SpanElement(int start, int end, Set styles) { - this.start = start; - this.end = end; + super(start, end); this.styles = Collections.unmodifiableSet(styles); } - @Override - public int getStart() { - return start; - } - - @Override - public int getEnd() { - return end; - } - /** * Return all styles of this span. * @@ -76,18 +64,9 @@ public class SpanElement implements MarkupElement.MarkupChildElement { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(this); - xml.attribute(ATTR_START, getStart()); - xml.attribute(ATTR_END, getEnd()); - xml.rightAngleBracket(); - + protected void appendInnerXml(XmlStringBuilder xml) { for (SpanStyle style : getStyles()) { - xml.halfOpenElement(style.toString()).closeEmptyElement(); + xml.emptyElement(style); } - - xml.closeElement(this); - return xml; } } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightAffiliationsIQ.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightAffiliationsIQ.java index 9ca1e3ffe..c9e0ead62 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightAffiliationsIQ.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightAffiliationsIQ.java @@ -62,7 +62,7 @@ public class MUCLightAffiliationsIQ extends IQ { Iterator> it = affiliations.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); - xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); + xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); } return xml; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightBlockingIQ.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightBlockingIQ.java index b18eb762b..c519ab9bf 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightBlockingIQ.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightBlockingIQ.java @@ -90,7 +90,7 @@ public class MUCLightBlockingIQ extends IQ { Iterator> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); - xml.element(new BlockingElement(pair.getKey(), pair.getValue(), isRoom)); + xml.append(new BlockingElement(pair.getKey(), pair.getValue(), isRoom)); } } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightChangeAffiliationsIQ.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightChangeAffiliationsIQ.java index d5ab577a9..494a7a4d7 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightChangeAffiliationsIQ.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightChangeAffiliationsIQ.java @@ -71,7 +71,7 @@ public class MUCLightChangeAffiliationsIQ extends IQ { Iterator> it = affiliations.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); - xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); + xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); } } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightConfigurationIQ.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightConfigurationIQ.java index a20a7047d..f284d0656 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightConfigurationIQ.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightConfigurationIQ.java @@ -52,7 +52,7 @@ public class MUCLightConfigurationIQ extends IQ { protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) { xml.rightAngleBracket(); xml.optElement("version", version); - xml.element(new ConfigurationElement(configuration)); + xml.append(new ConfigurationElement(configuration)); return xml; } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightCreateIQ.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightCreateIQ.java index b3c059eae..d15d47db5 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightCreateIQ.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightCreateIQ.java @@ -99,10 +99,10 @@ public class MUCLightCreateIQ extends IQ { @Override protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) { xml.rightAngleBracket(); - xml.element(new ConfigurationElement(configuration)); + xml.append(new ConfigurationElement(configuration)); if (!occupants.isEmpty()) { - xml.element(new OccupantsElement(occupants)); + xml.append(new OccupantsElement(occupants)); } return xml; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightElements.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightElements.java index 4365a7e18..2828bebfb 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightElements.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightElements.java @@ -104,7 +104,7 @@ public abstract class MUCLightElements { Iterator> it = affiliations.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); - xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); + xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); } xml.closeElement(this); @@ -303,7 +303,7 @@ public abstract class MUCLightElements { Iterator> it = occupants.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); - xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); + xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); } xml.closeElement("occupants"); diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightInfoIQ.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightInfoIQ.java index c737453ef..42a2b9308 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightInfoIQ.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightInfoIQ.java @@ -62,8 +62,8 @@ public class MUCLightInfoIQ extends IQ { protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) { xml.rightAngleBracket(); xml.optElement("version", version); - xml.element(new ConfigurationElement(configuration)); - xml.element(new OccupantsElement(occupants)); + xml.append(new ConfigurationElement(configuration)); + xml.append(new OccupantsElement(occupants)); return xml; } diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/push_notifications/element/EnablePushNotificationsIQ.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/push_notifications/element/EnablePushNotificationsIQ.java index 577b1ab2c..7c86584d8 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/push_notifications/element/EnablePushNotificationsIQ.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/push_notifications/element/EnablePushNotificationsIQ.java @@ -115,7 +115,7 @@ public class EnablePushNotificationsIQ extends IQ { dataForm.addField(field.build()); } - xml.element(dataForm); + xml.append(dataForm); } return xml; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/spoiler/element/SpoilerElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/spoiler/element/SpoilerElement.java index 65bb14e4b..d2cb7c333 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/spoiler/element/SpoilerElement.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/spoiler/element/SpoilerElement.java @@ -131,12 +131,7 @@ public class SpoilerElement implements ExtensionElement { return map; } - /** - * Return the language of the hint. - * May be null. - * - * @return language of hint text - */ + @Override public String getLanguage() { return language; } @@ -153,8 +148,7 @@ public class SpoilerElement implements ExtensionElement { @Override public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); - xml.optXmlLangAttribute(getLanguage()); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); if (getHint() == null) { xml.closeEmptyElement(); } else { 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 d9d7131b4..fc361c392 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 @@ -212,19 +212,19 @@ public class MultipleRecipientManager { if (to != null) { for (Jid jid : to) { packet.setTo(jid); - connection.sendStanza(new PacketCopy(packet.toXML())); + connection.sendStanza(new PacketCopy(packet)); } } if (cc != null) { for (Jid jid : cc) { packet.setTo(jid); - connection.sendStanza(new PacketCopy(packet.toXML())); + connection.sendStanza(new PacketCopy(packet)); } } if (bcc != null) { for (Jid jid : bcc) { packet.setTo(jid); - connection.sendStanza(new PacketCopy(packet.toXML())); + connection.sendStanza(new PacketCopy(packet)); } } } @@ -297,6 +297,7 @@ public class MultipleRecipientManager { */ private static final class PacketCopy extends Stanza { + private final String elementName; private final CharSequence text; /** @@ -305,8 +306,9 @@ public class MultipleRecipientManager { * * @param text the whole text of the stanza to send */ - private PacketCopy(CharSequence text) { - this.text = text; + private PacketCopy(Stanza stanza) { + this.elementName = stanza.getElementName(); + this.text = stanza.toXML(); } @Override @@ -319,6 +321,11 @@ public class MultipleRecipientManager { return toXML().toString(); } + @Override + public String getElementName() { + return elementName; + } + } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/packet/MultipleAddresses.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/packet/MultipleAddresses.java index 2ec8cd3d7..4e3f76f15 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/packet/MultipleAddresses.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/packet/MultipleAddresses.java @@ -21,7 +21,6 @@ import java.util.ArrayList; import java.util.List; import org.jivesoftware.smack.packet.ExtensionElement; -import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.util.XmlStringBuilder; import org.jxmpp.jid.Jid; @@ -129,7 +128,7 @@ public class MultipleAddresses implements ExtensionElement { return buf; } - public static final class Address implements NamedElement { + public static final class Address implements ExtensionElement { public static final String ELEMENT = "address"; @@ -193,10 +192,15 @@ public class MultipleAddresses implements ExtensionElement { return ELEMENT; } + @Override + public String getNamespace() { + return NAMESPACE; + } + @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder buf = new XmlStringBuilder(); - buf.halfOpenElement(this).attribute("type", type); + XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); + buf.attribute("type", type); buf.optAttribute("jid", jid); buf.optAttribute("node", node); buf.optAttribute("desc", description); @@ -209,5 +213,6 @@ public class MultipleAddresses implements ExtensionElement { buf.closeEmptyElement(); return buf; } + } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/packet/Bytestream.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/packet/Bytestream.java index e51b10061..64b3ad7d9 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/packet/Bytestream.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/bytestreams/socks5/packet/Bytestream.java @@ -21,8 +21,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.IQ; -import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.util.InternetAddress; import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.XmlStringBuilder; @@ -260,13 +260,20 @@ public class Bytestream extends IQ { return xml; } + private abstract static class BytestreamExtensionElement implements ExtensionElement { + @Override + public final String getNamespace() { + return NAMESPACE; + } + } + /** * Stanza extension that represents a potential SOCKS5 proxy for the file transfer. Stream hosts * are forwarded to the target of the file transfer who then chooses and connects to one. * * @author Alexander Wenckus */ - public static class StreamHost implements NamedElement { + public static class StreamHost extends BytestreamExtensionElement { public static String ELEMENTNAME = "streamhost"; @@ -342,7 +349,7 @@ public class Bytestream extends IQ { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.attribute("jid", getJID()); xml.attribute("host", address); if (getPort() != 0) { @@ -366,7 +373,7 @@ public class Bytestream extends IQ { * * @author Alexander Wenckus */ - public static class StreamHostUsed implements NamedElement { + public static class StreamHostUsed extends BytestreamExtensionElement { public static String ELEMENTNAME = "streamhost-used"; @@ -397,7 +404,7 @@ public class Bytestream extends IQ { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.attribute("jid", getJID()); xml.closeEmptyElement(); return xml; @@ -409,7 +416,7 @@ public class Bytestream extends IQ { * * @author Alexander Wenckus */ - public static class Activate implements NamedElement { + public static class Activate extends BytestreamExtensionElement { public static String ELEMENTNAME = "activate"; @@ -440,12 +447,13 @@ public class Bytestream extends IQ { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.rightAngleBracket(); xml.escape(getTarget()); xml.closeElement(this); return xml; } + } /** diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/delay/packet/DelayInformation.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/delay/packet/DelayInformation.java index 7a81102bf..24c85d1d8 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/delay/packet/DelayInformation.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/delay/packet/DelayInformation.java @@ -103,7 +103,7 @@ public class DelayInformation implements ExtensionElement { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.attribute("stamp", XmppDateTime.formatXEP0082Date(stamp)); xml.optAttribute("from", from); xml.rightAngleBracket(); diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/forward/packet/Forwarded.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/forward/packet/Forwarded.java index 72d9fdb88..e8c886692 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/forward/packet/Forwarded.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/forward/packet/Forwarded.java @@ -72,10 +72,10 @@ public class Forwarded implements ExtensionElement { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.rightAngleBracket(); xml.optElement(getDelayInformation()); - xml.append(forwardedPacket.toXML(NAMESPACE)); + xml.append(forwardedPacket); xml.closeElement(this); return xml; } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContent.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContent.java index c88978828..171231a9b 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContent.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContent.java @@ -1,6 +1,6 @@ /** * - * Copyright 2017 Florian Schmaus + * Copyright 2017-2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,8 @@ */ package org.jivesoftware.smackx.jingle.element; -import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.FullyQualifiedElement; +import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.XmlStringBuilder; @@ -24,9 +25,10 @@ import org.jivesoftware.smack.util.XmlStringBuilder; /** * Jingle content element. */ -public final class JingleContent implements NamedElement { +public final class JingleContent implements FullyQualifiedElement { public static final String ELEMENT = "content"; + public static final String NAMESPACE = Jingle.NAMESPACE; public static final String CREATOR_ATTRIBUTE_NAME = "creator"; @@ -132,8 +134,13 @@ public final class JingleContent implements NamedElement { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + public String getNamespace() { + return NAMESPACE; + } + + @Override + public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingXmlEnvironment); xml.attribute(CREATOR_ATTRIBUTE_NAME, creator); xml.optAttribute(DISPOSITION_ATTRIBUTE_NAME, disposition); xml.attribute(NAME_ATTRIBUTE_NAME, name); diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentDescriptionChildElement.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentDescriptionChildElement.java index bb09f205d..aaf2cb269 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentDescriptionChildElement.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentDescriptionChildElement.java @@ -1,6 +1,6 @@ /** * - * Copyright ยฉ 2014-2017 Florian Schmaus + * Copyright ยฉ 2014-2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,18 +16,12 @@ */ package org.jivesoftware.smackx.jingle.element; -import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.FullyQualifiedElement; /** * An element found usually in 'description' elements. * */ -public abstract class JingleContentDescriptionChildElement implements NamedElement { +public interface JingleContentDescriptionChildElement extends FullyQualifiedElement { - public static final String ELEMENT = "payload-type"; - - @Override - public String getElementName() { - return ELEMENT; - } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransport.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransport.java index f3580540a..a683a9d6e 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransport.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransport.java @@ -1,6 +1,6 @@ /** * - * Copyright 2017 Florian Schmaus + * Copyright 2017-2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import java.util.Collections; import java.util.List; import org.jivesoftware.smack.packet.ExtensionElement; +import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.XmlStringBuilder; /** @@ -66,8 +67,8 @@ public abstract class JingleContentTransport implements ExtensionElement { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { + XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment); addExtraAttributes(xml); if (candidates.isEmpty() && info == null) { diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportCandidate.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportCandidate.java index be38c8864..1a8cfb923 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportCandidate.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportCandidate.java @@ -1,6 +1,6 @@ /** * - * Copyright 2017 Florian Schmaus + * Copyright 2017-2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +16,13 @@ */ package org.jivesoftware.smackx.jingle.element; -import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.FullyQualifiedElement; /** * An element found usually in Jingle 'transport' elements. * */ -public abstract class JingleContentTransportCandidate implements NamedElement { +public abstract class JingleContentTransportCandidate implements FullyQualifiedElement { public static final String ELEMENT = "candidate"; diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportInfo.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportInfo.java index 6e1680046..7b4a13e9e 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportInfo.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleContentTransportInfo.java @@ -1,6 +1,6 @@ /** * - * Copyright 2017 Paul Schaub + * Copyright 2017 Paul Schaub, 2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,11 +16,11 @@ */ package org.jivesoftware.smackx.jingle.element; -import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.FullyQualifiedElement; /** * Abstract JingleContentTransportInfo element. */ -public abstract class JingleContentTransportInfo implements NamedElement { +public interface JingleContentTransportInfo extends FullyQualifiedElement { } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleReason.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleReason.java index e4d601aea..91c909aba 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleReason.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/element/JingleReason.java @@ -1,6 +1,6 @@ /** * - * Copyright 2017 Florian Schmaus + * Copyright 2017-2019 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,7 +19,8 @@ package org.jivesoftware.smackx.jingle.element; import java.util.HashMap; import java.util.Map; -import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.FullyQualifiedElement; +import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.XmlStringBuilder; @@ -29,9 +30,10 @@ import org.jivesoftware.smack.util.XmlStringBuilder; * @see XEP-0166 ยง 7.4 * */ -public class JingleReason implements NamedElement { +public class JingleReason implements FullyQualifiedElement { public static final String ELEMENT = "reason"; + public static final String NAMESPACE = Jingle.NAMESPACE; public static AlternativeSession AlternativeSession(String sessionId) { return new AlternativeSession(sessionId); @@ -114,11 +116,16 @@ public class JingleReason implements NamedElement { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + public String getNamespace() { + return NAMESPACE; + } + + @Override + public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingXmlEnvironment); xml.rightAngleBracket(); - xml.emptyElement(reason.asString); + xml.emptyElement(reason); xml.closeElement(this); return xml; diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportCandidate.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportCandidate.java index 1947fec41..4ad96fcca 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportCandidate.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportCandidate.java @@ -16,6 +16,7 @@ */ package org.jivesoftware.smackx.jingle.transports.jingle_s5b.elements; +import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.InternetAddress; import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.StringUtils; @@ -33,6 +34,8 @@ import org.jxmpp.stringprep.XmppStringprepException; */ public final class JingleS5BTransportCandidate extends JingleContentTransportCandidate { + public static final String NAMESPACE = JingleS5BTransport.NAMESPACE_V1; + public static final String ATTR_CID = "cid"; public static final String ATTR_HOST = "host"; public static final String ATTR_JID = "jid"; @@ -130,10 +133,15 @@ public final class JingleS5BTransportCandidate extends JingleContentTransportCan return new Bytestream.StreamHost(jid, host, port); } + @Override - public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(this); + public String getNamespace() { + return NAMESPACE; + } + + @Override + public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingXmlEnvironment); xml.attribute(ATTR_CID, cid); xml.attribute(ATTR_HOST, host); xml.attribute(ATTR_JID, jid); @@ -207,4 +215,5 @@ public final class JingleS5BTransportCandidate extends JingleContentTransportCan return new JingleS5BTransportCandidate(cid, host, jid, port, priority, type); } } + } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportInfo.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportInfo.java index e21cd77bf..92733a5c0 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportInfo.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/jingle/transports/jingle_s5b/elements/JingleS5BTransportInfo.java @@ -16,6 +16,7 @@ */ package org.jivesoftware.smackx.jingle.transports.jingle_s5b.elements; +import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smackx.jingle.element.JingleContentTransportInfo; @@ -23,7 +24,14 @@ import org.jivesoftware.smackx.jingle.element.JingleContentTransportInfo; /** * Class representing possible SOCKS5 TransportInfo elements. */ -public abstract class JingleS5BTransportInfo extends JingleContentTransportInfo { +public abstract class JingleS5BTransportInfo implements JingleContentTransportInfo { + + public static final String NAMESPACE = JingleS5BTransport.NAMESPACE_V1; + + @Override + public final String getNamespace() { + return NAMESPACE; + } public abstract static class JingleS5BCandidateTransportInfo extends JingleS5BTransportInfo { public static final String ATTR_CID = "cid"; @@ -39,9 +47,8 @@ public abstract class JingleS5BTransportInfo extends JingleContentTransportInfo } @Override - public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); - xml.halfOpenElement(this); + public final XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { + XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment); xml.attribute(ATTR_CID, getCandidateId()); xml.closeEmptyElement(); return xml; diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/mood/element/MoodElement.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/mood/element/MoodElement.java index 192865faf..ef606387e 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/mood/element/MoodElement.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/mood/element/MoodElement.java @@ -17,8 +17,10 @@ package org.jivesoftware.smackx.mood.element; import org.jivesoftware.smack.packet.ExtensionElement; +import org.jivesoftware.smack.packet.FullyQualifiedElement; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.XmlStringBuilder; @@ -107,8 +109,8 @@ public class MoodElement implements ExtensionElement { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { + XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment); if (mood == null && text == null) { // Empty mood element used as STOP signal @@ -152,7 +154,7 @@ public class MoodElement implements ExtensionElement { * {@link NamedElement} which represents the mood. * This element has the element name of the mood selected from {@link Mood}. */ - public static class MoodSubjectElement implements NamedElement { + public static class MoodSubjectElement implements FullyQualifiedElement { private final Mood mood; private final MoodConcretisation concretisation; @@ -168,16 +170,17 @@ public class MoodElement implements ExtensionElement { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(); + public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { + XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment); if (concretisation == null) { - return xml.emptyElement(getElementName()); + return xml.closeEmptyElement(); } - return xml.openElement(getElementName()) - .append(concretisation.toXML()) - .closeElement(getElementName()); + xml.rightAngleBracket() + .append(concretisation) + .closeElement(this); + return xml; } /** @@ -197,5 +200,10 @@ public class MoodElement implements ExtensionElement { public MoodConcretisation getConcretisation() { return concretisation; } + + @Override + public String getNamespace() { + return NAMESPACE; + } } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java index 9d5ff84a9..600799d56 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java @@ -323,7 +323,7 @@ public class MUCUser implements ExtensionElement { * * @author Gaston Dombiak */ - public static class Decline implements NamedElement { + public static class Decline implements ExtensionElement { public static final String ELEMENT = "decline"; private final String reason; @@ -370,7 +370,7 @@ public class MUCUser implements ExtensionElement { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.optAttribute("to", getTo()); xml.optAttribute("from", getFrom()); xml.rightAngleBracket(); @@ -383,6 +383,11 @@ public class MUCUser implements ExtensionElement { public String getElementName() { return ELEMENT; } + + @Override + public String getNamespace() { + return NAMESPACE; + } } /** diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java index 387c1e7fd..525d8fa75 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java @@ -417,7 +417,7 @@ public final class FormField implements FullyQualifiedElement { } else { buf.rightAngleBracket(); - buf.append(formFieldChildElements, enclosingNamespace); + buf.append(formFieldChildElements); buf.closeElement(this); } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/packet/DataForm.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/packet/DataForm.java index 661f3bd08..79360a471 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/packet/DataForm.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/packet/DataForm.java @@ -325,15 +325,10 @@ public class DataForm implements ExtensionElement { @Override public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { - XmlStringBuilder buf = new XmlStringBuilder(this); + XmlStringBuilder buf = new XmlStringBuilder(this, xmlEnvironment); buf.attribute("type", getType()); buf.rightAngleBracket(); - XmlEnvironment dataFormxmlEnvironment = XmlEnvironment.builder() - .withNamespace(NAMESPACE) - .withNext(xmlEnvironment) - .build(); - buf.optElement("title", getTitle()); for (String instruction : getInstructions()) { buf.element("instructions", instruction); @@ -347,7 +342,7 @@ public class DataForm implements ExtensionElement { buf.append(item.toXML()); } // Add all form fields. - buf.append(getFields(), dataFormxmlEnvironment); + buf.append(getFields()); for (Element element : extensionElements) { buf.append(element.toXML()); } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdatalayout/packet/DataLayout.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdatalayout/packet/DataLayout.java index 4d5720829..e13c405db 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdatalayout/packet/DataLayout.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdatalayout/packet/DataLayout.java @@ -1,6 +1,6 @@ /** * - * Copyright 2014 Anno van Vliet + * Copyright 2014 Anno van Vliet, 2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.List; import org.jivesoftware.smack.packet.ExtensionElement; -import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.util.XmlStringBuilder; /** @@ -96,24 +95,14 @@ public class DataLayout implements ExtensionElement { buf.optAttribute("label", getLabel()); buf.rightAngleBracket(); - walkList(buf, getPageLayout()); + buf.append(getPageLayout()); buf.closeElement(this); return buf; } - /** - * @param buf TODO javadoc me please - * @param pageLayout TODO javadoc me please - */ - private static void walkList(XmlStringBuilder buf, List pageLayout) { - for (DataFormLayoutElement object : pageLayout) { - buf.append(object.toXML()); - } - } - - public static class Fieldref implements DataFormLayoutElement{ + public static class Fieldref extends DataFormLayoutElement{ public static final String ELEMENT = "fieldref"; private final String var; @@ -128,7 +117,7 @@ public class DataLayout implements ExtensionElement { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder buf = new XmlStringBuilder(this); + XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); buf.attribute("var", getVar()); buf.closeEmptyElement(); return buf; @@ -150,7 +139,7 @@ public class DataLayout implements ExtensionElement { } - public static class Section implements DataFormLayoutElement{ + public static class Section extends DataFormLayoutElement{ public static final String ELEMENT = "section"; private final List sectionLayout = new ArrayList<>(); @@ -188,11 +177,12 @@ public class DataLayout implements ExtensionElement { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder buf = new XmlStringBuilder(this); + XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); buf.optAttribute("label", getLabel()); buf.rightAngleBracket(); - walkList(buf, getSectionLayout()); + buf.append(getSectionLayout()); + buf.closeElement(ELEMENT); return buf; } @@ -213,13 +203,13 @@ public class DataLayout implements ExtensionElement { } - public static class Reportedref implements DataFormLayoutElement{ + public static class Reportedref extends DataFormLayoutElement{ public static final String ELEMENT = "reportedref"; @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder buf = new XmlStringBuilder(this); + XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); buf.closeEmptyElement(); return buf; } @@ -231,7 +221,7 @@ public class DataLayout implements ExtensionElement { } - public static class Text implements DataFormLayoutElement{ + public static class Text extends DataFormLayoutElement{ public static final String ELEMENT = "text"; private final String text; @@ -245,8 +235,10 @@ public class DataLayout implements ExtensionElement { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder buf = new XmlStringBuilder(); - buf.element(ELEMENT, getText()); + XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); + buf.rightAngleBracket(); + buf.escape(getText()); + buf.closeElement(this); return buf; } @@ -266,7 +258,11 @@ public class DataLayout implements ExtensionElement { } - public interface DataFormLayoutElement extends NamedElement { + public abstract static class DataFormLayoutElement implements ExtensionElement { + @Override + public final String getNamespace() { + return NAMESPACE; + } } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdatavalidation/packet/ValidateElement.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdatavalidation/packet/ValidateElement.java index 83edfdf1c..a3643f023 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdatavalidation/packet/ValidateElement.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdatavalidation/packet/ValidateElement.java @@ -1,6 +1,6 @@ /** * - * Copyright 2014 Anno van Vliet + * Copyright 2014 Anno van Vliet, 2019 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,7 +19,8 @@ package org.jivesoftware.smackx.xdatavalidation.packet; import javax.xml.namespace.QName; import org.jivesoftware.smack.datatypes.UInt32; -import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.FullyQualifiedElement; +import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.XmlStringBuilder; @@ -336,7 +337,7 @@ public abstract class ValidateElement implements FormFieldChildElement { * This element indicates for "list-multi", that a minimum and maximum number of options should be selected and/or * entered. */ - public static class ListRange implements NamedElement { + public static class ListRange implements FullyQualifiedElement { public static final String ELEMENT = "list-range"; private final UInt32 min; @@ -363,8 +364,8 @@ public abstract class ValidateElement implements FormFieldChildElement { } @Override - public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder buf = new XmlStringBuilder(this); + public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { + XmlStringBuilder buf = new XmlStringBuilder(this, enclosingXmlEnvironment); buf.optAttribute("min", getMin()); buf.optAttribute("max", getMax()); buf.closeEmptyElement(); @@ -394,6 +395,11 @@ public abstract class ValidateElement implements FormFieldChildElement { return max; } + @Override + public String getNamespace() { + return NAMESPACE; + } + } /** diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleContentTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleContentTest.java index 6023f257e..64d6ea070 100644 --- a/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleContentTest.java +++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleContentTest.java @@ -70,7 +70,7 @@ public class JingleContentTest extends SmackTestSuite { assertEquals(content1.toXML().toString(), builder.build().toXML().toString()); String xml = - "" + + "" + ""; assertEquals(xml, content1.toXML().toString()); } diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleReasonTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleReasonTest.java index d62de70b3..2e643248e 100644 --- a/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleReasonTest.java +++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/jingle/JingleReasonTest.java @@ -1,6 +1,6 @@ /** * - * Copyright 2017 Paul Schaub + * Copyright 2017-2019 Paul Schaub, 2019 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +16,14 @@ */ package org.jivesoftware.smackx.jingle; -import static junit.framework.TestCase.assertEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import org.jivesoftware.smack.test.util.SmackTestSuite; import org.jivesoftware.smackx.jingle.element.JingleReason; -import org.junit.Test; +import org.junit.jupiter.api.Test; /** * Test JingleReason functionality. @@ -31,56 +32,67 @@ public class JingleReasonTest extends SmackTestSuite { @Test public void parserTest() { - assertEquals("", - JingleReason.Success.toXML().toString()); - assertEquals("", - JingleReason.Busy.toXML().toString()); - assertEquals("", - JingleReason.Cancel.toXML().toString()); - assertEquals("", - JingleReason.ConnectivityError.toXML().toString()); - assertEquals("", - JingleReason.Decline.toXML().toString()); - assertEquals("", - JingleReason.Expired.toXML().toString()); - assertEquals("", - JingleReason.UnsupportedTransports.toXML().toString()); - assertEquals("", - JingleReason.FailedTransport.toXML().toString()); - assertEquals("", - JingleReason.GeneralError.toXML().toString()); - assertEquals("", - JingleReason.Gone.toXML().toString()); - assertEquals("", - JingleReason.MediaError.toXML().toString()); - assertEquals("", - JingleReason.SecurityError.toXML().toString()); - assertEquals("", - JingleReason.UnsupportedApplications.toXML().toString()); - assertEquals("", - JingleReason.Timeout.toXML().toString()); - assertEquals("", - JingleReason.FailedApplication.toXML().toString()); - assertEquals("", - JingleReason.IncompatibleParameters.toXML().toString()); - assertEquals("1234", - JingleReason.AlternativeSession("1234").toXML().toString()); + assertReasonXml("", + JingleReason.Success); + assertReasonXml("", + JingleReason.Busy); + assertReasonXml("", + JingleReason.Cancel); + assertReasonXml("", + JingleReason.ConnectivityError); + assertReasonXml("", + JingleReason.Decline); + assertReasonXml("", + JingleReason.Expired); + assertReasonXml("", + JingleReason.UnsupportedTransports); + assertReasonXml("", + JingleReason.FailedTransport); + assertReasonXml("", + JingleReason.GeneralError); + assertReasonXml("", + JingleReason.Gone); + assertReasonXml("", + JingleReason.MediaError); + assertReasonXml("", + JingleReason.SecurityError); + assertReasonXml("", + JingleReason.UnsupportedApplications); + assertReasonXml("", + JingleReason.Timeout); + assertReasonXml("", + JingleReason.FailedApplication); + assertReasonXml("", + JingleReason.IncompatibleParameters); + assertReasonXml("1234", + JingleReason.AlternativeSession("1234")); } - @Test(expected = NullPointerException.class) + private static void assertReasonXml(String expected, JingleReason reason) { + String actualXml = reason.toXML(JingleReason.NAMESPACE).toString(); + assertEquals(expected, actualXml); + } + + @Test public void alternativeSessionEmptyStringTest() { - // Alternative sessionID must not be empty - JingleReason.AlternativeSession(""); + assertThrows(NullPointerException.class, () -> + // Alternative sessionID must not be empty + JingleReason.AlternativeSession("") + ); } - @Test(expected = NullPointerException.class) + @Test public void alternativeSessionNullStringTest() { - // Alternative sessionID must not be null - JingleReason.AlternativeSession(null); + assertThrows(NullPointerException.class, () -> + // Alternative sessionID must not be null + JingleReason.AlternativeSession(null) + ); } - @Test(expected = IllegalArgumentException.class) + @Test public void illegalArgumentTest() { - JingleReason.Reason.fromString("illegal-reason"); + assertThrows(IllegalArgumentException.class, () -> + JingleReason.Reason.fromString("illegal-reason") + ); } } diff --git a/smack-im/src/main/java/org/jivesoftware/smack/roster/packet/RosterPacket.java b/smack-im/src/main/java/org/jivesoftware/smack/roster/packet/RosterPacket.java index 3c079a39c..2944cf6be 100644 --- a/smack-im/src/main/java/org/jivesoftware/smack/roster/packet/RosterPacket.java +++ b/smack-im/src/main/java/org/jivesoftware/smack/roster/packet/RosterPacket.java @@ -24,8 +24,8 @@ import java.util.Locale; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; +import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.IQ; -import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.packet.Stanza; import org.jivesoftware.smack.util.EqualsUtil; import org.jivesoftware.smack.util.HashCode; @@ -112,7 +112,7 @@ public final class RosterPacket extends IQ { * the groups the roster item belongs to. */ // TODO Make this class immutable. - public static final class Item implements NamedElement { + public static final class Item implements ExtensionElement { /** * The constant value "{@value}". @@ -163,6 +163,11 @@ public final class RosterPacket extends IQ { return ELEMENT; } + @Override + public String getNamespace() { + return NAMESPACE; + } + /** * Returns the user. * @@ -275,7 +280,7 @@ public final class RosterPacket extends IQ { @Override public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder xml = new XmlStringBuilder(this); + XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); xml.attribute("jid", jid); xml.optAttribute("name", name); xml.optAttribute("subscription", itemType); diff --git a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/packet/Jingle.java b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/packet/Jingle.java index cfb08d374..d904f0d34 100644 --- a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/packet/Jingle.java +++ b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/packet/Jingle.java @@ -182,25 +182,6 @@ public class Jingle extends IQ { return sid; } - /** - * Returns the XML element name of the extension sub-packet root element. - * Always returns "jingle" - * - * @return the XML element name of the stanza extension. - */ - public static String getElementName() { - return NODENAME; - } - - /** - * Returns the XML namespace of the extension sub-packet root element. - * - * @return the XML namespace of the stanza extension. - */ - public static String getNamespace() { - return NAMESPACE; - } - /** * Jingle content info. * diff --git a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/provider/JingleProvider.java b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/provider/JingleProvider.java index e78457342..f717d7303 100644 --- a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/provider/JingleProvider.java +++ b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/provider/JingleProvider.java @@ -120,7 +120,7 @@ public class JingleProvider extends IQProvider { } } else if (eventType == XmlPullParser.Event.END_ELEMENT) { - if (parser.getName().equals(Jingle.getElementName())) { + if (parser.getName().equals(Jingle.NODENAME)) { done = true; } } diff --git a/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/AgentStatusRequest.java b/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/AgentStatusRequest.java index b52e61e99..a94042d23 100644 --- a/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/AgentStatusRequest.java +++ b/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/AgentStatusRequest.java @@ -65,14 +65,6 @@ public class AgentStatusRequest extends IQ { return Collections.unmodifiableSet(agents); } - public String getElementName() { - return ELEMENT_NAME; - } - - public String getNamespace() { - return NAMESPACE; - } - @Override protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder buf) { buf.rightAngleBracket(); diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoElement.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoElement.java index 877436214..6d28da919 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoElement.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoElement.java @@ -76,7 +76,7 @@ public abstract class OmemoElement implements ExtensionElement { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { XmlStringBuilder sb = new XmlStringBuilder(this, enclosingNamespace).rightAngleBracket(); - sb.element(header); + sb.append(header); if (payload != null) { sb.openElement(ATTR_PAYLOAD).append(Base64.encodeToString(payload)).closeElement(ATTR_PAYLOAD); diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoHeaderElement.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoHeaderElement.java index 8e8a07c09..a0fa6f5f8 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoHeaderElement.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoHeaderElement.java @@ -19,17 +19,22 @@ package org.jivesoftware.smackx.omemo.element; import java.util.ArrayList; import java.util.List; -import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.FullyQualifiedElement; +import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.stringencoder.Base64; +import org.jivesoftware.smackx.omemo.util.OmemoConstants; + /** * Header element of the message. The header contains information about the sender and the encrypted keys for * the recipients, as well as the iv element for AES. */ -public abstract class OmemoHeaderElement implements NamedElement { +public abstract class OmemoHeaderElement implements FullyQualifiedElement { + + public static final String ELEMENT = "header"; + public static final String NAMESPACE = OmemoConstants.OMEMO_NAMESPACE_V_AXOLOTL; - public static final String NAME_HEADER = "header"; public static final String ATTR_SID = "sid"; public static final String ATTR_IV = "iv"; @@ -62,16 +67,21 @@ public abstract class OmemoHeaderElement implements NamedElement { @Override public String getElementName() { - return NAME_HEADER; + return ELEMENT; } @Override - public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder sb = new XmlStringBuilder(this); + public String getNamespace() { + return NAMESPACE; + } + + @Override + public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { + XmlStringBuilder sb = new XmlStringBuilder(this, enclosingXmlEnvironment); sb.attribute(ATTR_SID, getSid()).rightAngleBracket(); for (OmemoKeyElement k : getKeys()) { - sb.element(k); + sb.append(k); } sb.openElement(ATTR_IV).append(Base64.encodeToString(getIv())).closeElement(ATTR_IV); diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoKeyElement.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoKeyElement.java index 75c0327d8..fc55c3300 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoKeyElement.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/element/OmemoKeyElement.java @@ -16,16 +16,21 @@ */ package org.jivesoftware.smackx.omemo.element; -import org.jivesoftware.smack.packet.NamedElement; +import org.jivesoftware.smack.packet.FullyQualifiedElement; +import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.stringencoder.Base64; +import org.jivesoftware.smackx.omemo.util.OmemoConstants; + /** * Small class to collect key (byte[]), its id and whether its a preKey or not. */ -public class OmemoKeyElement implements NamedElement { +public class OmemoKeyElement implements FullyQualifiedElement { + + public static final String ELEMENT = "key"; + public static final String NAMESPACE = OmemoConstants.OMEMO_NAMESPACE_V_AXOLOTL; - public static final String NAME_KEY = "key"; public static final String ATTR_RID = "rid"; public static final String ATTR_PREKEY = "prekey"; @@ -34,9 +39,7 @@ public class OmemoKeyElement implements NamedElement { private final boolean preKey; public OmemoKeyElement(byte[] data, int id) { - this.data = data; - this.id = id; - this.preKey = false; + this(data, id, false); } public OmemoKeyElement(byte[] data, int id, boolean preKey) { @@ -64,12 +67,17 @@ public class OmemoKeyElement implements NamedElement { @Override public String getElementName() { - return NAME_KEY; + return ELEMENT; } @Override - public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { - XmlStringBuilder sb = new XmlStringBuilder(this); + public String getNamespace() { + return NAMESPACE; + } + + @Override + public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { + XmlStringBuilder sb = new XmlStringBuilder(this, enclosingXmlEnvironment); if (isPreKey()) { sb.attribute(ATTR_PREKEY, true); diff --git a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/provider/OmemoVAxolotlProvider.java b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/provider/OmemoVAxolotlProvider.java index 1fa0d05ea..cd6ae16f7 100644 --- a/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/provider/OmemoVAxolotlProvider.java +++ b/smack-omemo/src/main/java/org/jivesoftware/smackx/omemo/provider/OmemoVAxolotlProvider.java @@ -54,14 +54,14 @@ public class OmemoVAxolotlProvider extends ExtensionElementProvider Date: Sat, 7 Sep 2019 22:59:38 +0200 Subject: [PATCH 13/19] build.gradle: Bump gradle-errorprone-plugin to 0.8.1 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 131ddeb86..77f375da3 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ buildscript { plugins { id 'ru.vyarus.animalsniffer' version '1.5.0' - id 'net.ltgt.errorprone' version '0.8' + id 'net.ltgt.errorprone' version '0.8.1' } apply plugin: 'org.kordamp.gradle.markdown' From 34f1c2b79efc7f3631f3987b41f9c6ca91659b69 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 7 Sep 2019 23:01:39 +0200 Subject: [PATCH 14/19] errorprone: Enable MethodCanBeStatic --- build.gradle | 6 ++++- .../muclight/element/MUCLightBlockingIQ.java | 2 +- .../provider/MediaElementProvider.java | 2 +- .../smackx/jingleold/JingleSession.java | 2 +- .../jingleold/JingleSessionStateActive.java | 2 +- .../jingleold/JingleSessionStatePending.java | 6 ++--- .../jingleold/JingleSessionStateUnknown.java | 6 ++--- .../jingleold/media/MediaNegotiator.java | 2 +- .../smackx/jingleold/mediaimpl/JMFInit.java | 26 ++++++++----------- .../jingleold/mediaimpl/jmf/AudioChannel.java | 2 +- .../smackx/jingleold/nat/STUNResolver.java | 2 +- .../ext/history/AgentChatHistory.java | 4 +-- .../workgroup/packet/AgentStatusRequest.java | 2 +- .../workgroup/packet/OccupantsInfo.java | 4 +-- .../workgroup/packet/TranscriptsProvider.java | 7 ++--- 15 files changed, 38 insertions(+), 37 deletions(-) diff --git a/build.gradle b/build.gradle index 77f375da3..2c9ba38b2 100644 --- a/build.gradle +++ b/build.gradle @@ -203,7 +203,11 @@ allprojects { '-Werror', ] options.errorprone { - error("UnusedVariable", "UnusedMethod") + error( + "UnusedVariable", + "UnusedMethod", + "MethodCanBeStatic", + ) errorproneArgs = [ // Disable errorprone checks '-Xep:TypeParameterUnusedInFormals:OFF', diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightBlockingIQ.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightBlockingIQ.java index c519ab9bf..f3334b651 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightBlockingIQ.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/muclight/element/MUCLightBlockingIQ.java @@ -86,7 +86,7 @@ public class MUCLightBlockingIQ extends IQ { return xml; } - private void parseBlocking(IQChildElementXmlStringBuilder xml, HashMap map, boolean isRoom) { + private static void parseBlocking(IQChildElementXmlStringBuilder xml, HashMap map, boolean isRoom) { Iterator> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry pair = it.next(); diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/mediaelement/provider/MediaElementProvider.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/mediaelement/provider/MediaElementProvider.java index c4b8616b5..432e40c49 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/mediaelement/provider/MediaElementProvider.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/mediaelement/provider/MediaElementProvider.java @@ -74,7 +74,7 @@ public class MediaElementProvider extends FormFieldChildElementProvider action. */ - private IQ receiveSessionTerminateAction(JingleSession session, Jingle jingle) { + private static IQ receiveSessionTerminateAction(JingleSession session, Jingle jingle) { // According to XEP-166 the only thing we can do is ack. IQ response = session.createAck(jingle); diff --git a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/JingleSessionStatePending.java b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/JingleSessionStatePending.java index 5942209bc..1b905184c 100644 --- a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/JingleSessionStatePending.java +++ b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/JingleSessionStatePending.java @@ -103,7 +103,7 @@ public class JingleSessionStatePending extends JingleSessionState { /** * Receive and process the action. */ - private IQ receiveContentAcceptAction(Jingle inJingle) { + private static IQ receiveContentAcceptAction(Jingle inJingle) { // According to XEP-167 the only thing we can do is ack. // setSessionState(JingleSessionStateEnum.ACTIVE); @@ -116,7 +116,7 @@ public class JingleSessionStatePending extends JingleSessionState { /** * Receive and process the action. */ - private IQ receiveSessionAcceptAction(JingleSession session, Jingle inJingle) { + private static IQ receiveSessionAcceptAction(JingleSession session, Jingle inJingle) { // According to XEP-166 the only thing we can do is ack. session.setSessionState(JingleSessionStateActive.getInstance()); @@ -126,7 +126,7 @@ public class JingleSessionStatePending extends JingleSessionState { /** * Receive and process the action. */ - private IQ receiveSessionTerminateAction(JingleSession session, Jingle jingle) { + private static IQ receiveSessionTerminateAction(JingleSession session, Jingle jingle) { // According to XEP-166 the only thing we can do is ack. IQ response = session.createAck(jingle); diff --git a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/JingleSessionStateUnknown.java b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/JingleSessionStateUnknown.java index 619458f29..87cb7ee4f 100644 --- a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/JingleSessionStateUnknown.java +++ b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/JingleSessionStateUnknown.java @@ -101,8 +101,8 @@ public class JingleSessionStateUnknown extends JingleSessionState { * @throws SmackException if Smack detected an exceptional situation. * @throws InterruptedException if the calling thread was interrupted. */ - - private IQ receiveSessionInitiateAction(JingleSession session, Jingle inJingle) throws SmackException, InterruptedException { + private static IQ receiveSessionInitiateAction(JingleSession session, Jingle inJingle) + throws SmackException, InterruptedException { IQ response; boolean shouldAck = true; @@ -208,7 +208,7 @@ public class JingleSessionStateUnknown extends JingleSessionState { /** * Receive and process the action. */ - private IQ receiveSessionTerminateAction(JingleSession session, Jingle jingle) { + private static IQ receiveSessionTerminateAction(JingleSession session, Jingle jingle) { // According to XEP-166 the only thing we can do is ack. IQ response = session.createAck(jingle); diff --git a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/media/MediaNegotiator.java b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/media/MediaNegotiator.java index eb461208c..67291fe9a 100644 --- a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/media/MediaNegotiator.java +++ b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/media/MediaNegotiator.java @@ -183,7 +183,7 @@ public class MediaNegotiator extends JingleNegotiator { /** * Process the ACK of our list of codecs (our offer). */ - private Jingle receiveResult(IQ iq) throws XMPPException { + private static Jingle receiveResult(IQ iq) throws XMPPException { Jingle response = null; // if (!remoteAudioPts.isEmpty()) { diff --git a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/mediaimpl/JMFInit.java b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/mediaimpl/JMFInit.java index 64199a974..ed86a85de 100644 --- a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/mediaimpl/JMFInit.java +++ b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/mediaimpl/JMFInit.java @@ -58,7 +58,7 @@ public class JMFInit extends Frame implements Runnable { } catch (Exception e) { - message("Failed to commit to JMFRegistry!"); + LOGGER.fine("Failed to commit to JMFRegistry!"); } Thread detectThread = new Thread(this); @@ -89,28 +89,28 @@ public class JMFInit extends Frame implements Runnable { if (args != null && args.length > 0) { tempDir = args[0]; - message("Setting cache directory to " + tempDir); + LOGGER.fine("Setting cache directory to " + tempDir); try { Registry.set("secure.cacheDir", tempDir); Registry.commit(); - message("Updated registry"); + LOGGER.fine("Updated registry"); } catch (Exception e) { - message("Couldn't update registry!"); + LOGGER.fine("Couldn't update registry!"); } } } @SuppressWarnings("LiteralClassName") - private void detectCaptureDevices() { + private static void detectCaptureDevices() { // check if JavaSound capture is available - message("Looking for Audio capturer"); + LOGGER.fine("Looking for Audio capturer"); Class dsauto; try { dsauto = Class.forName("DirectSoundAuto"); dsauto.getConstructor().newInstance(); - message("Finished detecting DirectSound capturer"); + LOGGER.fine("Finished detecting DirectSound capturer"); } catch (ThreadDeath td) { throw td; @@ -123,13 +123,13 @@ public class JMFInit extends Frame implements Runnable { try { jsauto = Class.forName("JavaSoundAuto"); jsauto.getConstructor().newInstance(); - message("Finished detecting javasound capturer"); + LOGGER.fine("Finished detecting javasound capturer"); } catch (ThreadDeath td) { throw td; } catch (Throwable t) { - message("JavaSound capturer detection failed!"); + LOGGER.fine("JavaSound capturer detection failed!"); } /* @@ -182,7 +182,7 @@ public class JMFInit extends Frame implements Runnable { */ } - private void detectDirectAudio() { + private static void detectDirectAudio() { Class cls; int plType = PlugInManager.RENDERER; String dar = "com.sun.media.renderer.audio.DirectAudioRenderer"; @@ -229,7 +229,7 @@ public class JMFInit extends Frame implements Runnable { } } - private void detectS8DirectAudio() { + private static void detectS8DirectAudio() { Class cls; int plType = PlugInManager.RENDERER; String dar = "com.sun.media.renderer.audio.DirectAudioRenderer"; @@ -273,10 +273,6 @@ public class JMFInit extends Frame implements Runnable { } } - private void message(String mesg) { - LOGGER.fine(mesg); - } - public static void start(boolean visible) { new JMFInit(null, visible); } diff --git a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/mediaimpl/jmf/AudioChannel.java b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/mediaimpl/jmf/AudioChannel.java index 4d16933d0..f91263337 100644 --- a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/mediaimpl/jmf/AudioChannel.java +++ b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/mediaimpl/jmf/AudioChannel.java @@ -318,7 +318,7 @@ public class AudioChannel { * @return the best stanza size * @throws IllegalArgumentException if an illegal argument was given. */ - private int getPacketSize(Format codecFormat, int milliseconds) throws IllegalArgumentException { + private static int getPacketSize(Format codecFormat, int milliseconds) throws IllegalArgumentException { String encoding = codecFormat.getEncoding(); if (encoding.equalsIgnoreCase(AudioFormat.GSM) || encoding.equalsIgnoreCase(AudioFormat.GSM_RTP)) { diff --git a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/nat/STUNResolver.java b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/nat/STUNResolver.java index dd68939c0..0501621d4 100644 --- a/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/nat/STUNResolver.java +++ b/smack-jingle-old/src/main/java/org/jivesoftware/smackx/jingleold/nat/STUNResolver.java @@ -252,7 +252,7 @@ public class STUNResolver extends TransportResolver { * * @return the best STUN server that can be used. */ - private STUNService bestSTUNServer(ArrayList listServers) { + private static STUNService bestSTUNServer(ArrayList listServers) { if (listServers.isEmpty()) { return null; } else { diff --git a/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/ext/history/AgentChatHistory.java b/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/ext/history/AgentChatHistory.java index 678402fb3..c624f894b 100644 --- a/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/ext/history/AgentChatHistory.java +++ b/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/ext/history/AgentChatHistory.java @@ -115,8 +115,8 @@ public class AgentChatHistory extends IQ { return agentChatHistory; } - private AgentChatSession parseChatSetting(XmlPullParser parser) throws XmlPullParserException, IOException { - + private static AgentChatSession parseChatSetting(XmlPullParser parser) + throws XmlPullParserException, IOException { boolean done = false; Date date = null; long duration = 0; diff --git a/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/AgentStatusRequest.java b/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/AgentStatusRequest.java index a94042d23..8161896ad 100644 --- a/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/AgentStatusRequest.java +++ b/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/AgentStatusRequest.java @@ -131,7 +131,7 @@ public class AgentStatusRequest extends IQ { return statusRequest; } - private Item parseAgent(XmlPullParser parser) throws XmlPullParserException, IOException { + private static Item parseAgent(XmlPullParser parser) throws XmlPullParserException, IOException { boolean done = false; EntityBareJid jid = ParserUtils.getBareJidAttribute(parser); diff --git a/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/OccupantsInfo.java b/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/OccupantsInfo.java index bb10ed916..c60233339 100644 --- a/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/OccupantsInfo.java +++ b/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/OccupantsInfo.java @@ -154,8 +154,8 @@ public class OccupantsInfo extends IQ { return occupantsInfo; } - private OccupantInfo parseOccupantInfo(XmlPullParser parser) throws XmlPullParserException, IOException, SmackTextParseException { - + private static OccupantInfo parseOccupantInfo(XmlPullParser parser) + throws XmlPullParserException, IOException, SmackTextParseException { boolean done = false; String jid = null; String nickname = null; diff --git a/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/TranscriptsProvider.java b/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/TranscriptsProvider.java index eb701ee68..07c3c05ab 100644 --- a/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/TranscriptsProvider.java +++ b/smack-legacy/src/main/java/org/jivesoftware/smackx/workgroup/packet/TranscriptsProvider.java @@ -69,8 +69,8 @@ public class TranscriptsProvider extends IQProvider { return new Transcripts(userID, summaries); } - private Transcripts.TranscriptSummary parseSummary(XmlPullParser parser) throws IOException, - XmlPullParserException { + private static Transcripts.TranscriptSummary parseSummary(XmlPullParser parser) + throws IOException, XmlPullParserException { String sessionID = parser.getAttributeValue("", "sessionID"); Date joinTime = null; Date leftTime = null; @@ -108,7 +108,8 @@ public class TranscriptsProvider extends IQProvider { return new Transcripts.TranscriptSummary(sessionID, joinTime, leftTime, agents); } - private List parseAgents(XmlPullParser parser) throws IOException, XmlPullParserException { + private static List parseAgents(XmlPullParser parser) + throws IOException, XmlPullParserException { List agents = new ArrayList<>(); String agentJID = null; Date joinTime = null; From a6a1142255dc06c997623e46865c75ddc4792499 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sat, 7 Sep 2019 23:27:36 +0200 Subject: [PATCH 15/19] Improve OX's PubkeyElement there is no reason why we want to store the bytes of the base64 encoded string. Simply store the string itself. Also add a convenience method to get the decoded bytes of the PubKey. --- .../smackx/ox/OpenPgpManager.java | 3 +- .../smackx/ox/element/PubkeyElement.java | 21 ++++++++---- .../ox/provider/PubkeyElementProvider.java | 11 +++--- .../smackx/ox/PubkeyElementTest.java | 34 +++++++++++-------- 4 files changed, 40 insertions(+), 29 deletions(-) diff --git a/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/OpenPgpManager.java b/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/OpenPgpManager.java index 7c8231a90..85912490b 100644 --- a/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/OpenPgpManager.java +++ b/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/OpenPgpManager.java @@ -636,7 +636,8 @@ public final class OpenPgpManager extends Manager { * @return {@link PubkeyElement} containing the key */ private static PubkeyElement createPubkeyElement(byte[] bytes, Date date) { - return new PubkeyElement(new PubkeyElement.PubkeyDataElement(Base64.encode(bytes)), date); + String base64EncodedOpenPgpPubKey = Base64.encodeToString(bytes); + return new PubkeyElement(new PubkeyElement.PubkeyDataElement(base64EncodedOpenPgpPubKey), date); } /** diff --git a/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/element/PubkeyElement.java b/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/element/PubkeyElement.java index d535d560a..902227024 100644 --- a/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/element/PubkeyElement.java +++ b/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/element/PubkeyElement.java @@ -16,12 +16,12 @@ */ package org.jivesoftware.smackx.ox.element; -import java.nio.charset.Charset; import java.util.Date; import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.XmlStringBuilder; +import org.jivesoftware.smack.util.stringencoder.Base64; /** * Class representing a pubkey element which is used to transport OpenPGP public keys. @@ -88,21 +88,30 @@ public class PubkeyElement implements ExtensionElement { public static final String ELEMENT = "data"; - private final byte[] b64Data; + private final String b64Data; - public PubkeyDataElement(byte[] b64Data) { + public PubkeyDataElement(String b64Data) { this.b64Data = Objects.requireNonNull(b64Data); } /** * Base64 encoded public key. * - * @return public key bytes. + * @return the base64 encoded version of the public key. */ - public byte[] getB64Data() { + public String getB64Data() { return b64Data; } + private transient byte[] pubKeyBytesCache; + + public byte[] getPubKeyBytes() { + if (pubKeyBytesCache == null) { + pubKeyBytesCache = Base64.decode(b64Data); + } + return pubKeyBytesCache.clone(); + } + @Override public String getElementName() { return ELEMENT; @@ -117,7 +126,7 @@ public class PubkeyElement implements ExtensionElement { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace) .rightAngleBracket() - .append(new String(b64Data, Charset.forName("UTF-8"))) + .append(b64Data) .closeElement(this); return xml; } diff --git a/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/provider/PubkeyElementProvider.java b/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/provider/PubkeyElementProvider.java index e3c2f9692..7325ca91a 100644 --- a/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/provider/PubkeyElementProvider.java +++ b/smack-openpgp/src/main/java/org/jivesoftware/smackx/ox/provider/PubkeyElementProvider.java @@ -17,7 +17,6 @@ package org.jivesoftware.smackx.ox.provider; import java.io.IOException; -import java.nio.charset.Charset; import java.util.Date; import org.jivesoftware.smack.packet.XmlEnvironment; @@ -34,7 +33,7 @@ import org.jivesoftware.smackx.ox.element.PubkeyElement; */ public class PubkeyElementProvider extends ExtensionElementProvider { - public static final PubkeyElementProvider TEST_INSTANCE = new PubkeyElementProvider(); + public static final PubkeyElementProvider INSTANCE = new PubkeyElementProvider(); @Override public PubkeyElement parse(XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment) throws XmlPullParserException, IOException, SmackTextParseException { @@ -46,11 +45,9 @@ public class PubkeyElementProvider extends ExtensionElementProvider" + - "BASE64_OPENPGP_PUBLIC_KEY" + + base64EncodedOpenPgpPublicKey + "" + ""; Date date = XmppDateTime.parseXEP0082Date("2018-01-21T10:46:21.000+00:00"); - byte[] key = "BASE64_OPENPGP_PUBLIC_KEY".getBytes(Charset.forName("UTF-8")); - PubkeyElement element = new PubkeyElement(new PubkeyElement.PubkeyDataElement(key), date); + PubkeyElement element = new PubkeyElement(new PubkeyElement.PubkeyDataElement(base64EncodedOpenPgpPublicKey), date); - assertXmlSimilar(expected, element.toXML().toString()); + assertXmlSimilar(pubkeyElement, element.toXML().toString()); - XmlPullParser parser = TestUtils.getParser(expected); - PubkeyElement parsed = PubkeyElementProvider.TEST_INSTANCE.parse(parser); + XmlPullParser parser = SmackTestUtil.getParserFor(pubkeyElement, parserKind); + PubkeyElement parsed = PubkeyElementProvider.INSTANCE.parse(parser); assertEquals(element.getDate(), parsed.getDate()); - assertTrue(Arrays.equals(element.getDataElement().getB64Data(), parsed.getDataElement().getB64Data())); + assertEquals(element.getDataElement().getB64Data(), parsed.getDataElement().getB64Data()); } } From 09e7368313c6a61387358c1790bdfbe6bd62e4e6 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 8 Sep 2019 18:17:35 +0200 Subject: [PATCH 16/19] Delete unused IQ(String) constructor --- .../src/main/java/org/jivesoftware/smack/packet/IQ.java | 4 ---- 1 file changed, 4 deletions(-) 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 ec80133c7..3d875b7e1 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 @@ -62,10 +62,6 @@ public abstract class IQ extends Stanza { this.childElementQName = iq.childElementQName; } - protected IQ(String childElementName) { - this(childElementName, null); - } - protected IQ(String childElementName, String childElementNamespace) { this.childElementName = childElementName; this.childElementNamespace = childElementNamespace; From 9b186f254144025a7c113eb95beaa326f0a23567 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 8 Sep 2019 18:29:46 +0200 Subject: [PATCH 17/19] Add support for XEP-0328: JID Prep Fixes SMACK-878. --- documentation/extensions/index.md | 1 + .../smackx/jid_prep/JidPrepManager.java | 91 +++++++++++++++++++ .../smackx/jid_prep/element/JidPrepIq.java | 44 +++++++++ .../smackx/jid_prep/element/package-info.java | 21 +++++ .../smackx/jid_prep/package-info.java | 23 +++++ .../jid_prep/provider/JidPrepIqProvider.java | 38 ++++++++ .../jid_prep/provider/package-info.java | 21 +++++ .../experimental.providers | 7 ++ 8 files changed, 246 insertions(+) create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/JidPrepManager.java create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/element/JidPrepIq.java create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/element/package-info.java create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/package-info.java create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/provider/JidPrepIqProvider.java create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/provider/package-info.java diff --git a/documentation/extensions/index.md b/documentation/extensions/index.md index 2adcb5170..b5c279f7d 100644 --- a/documentation/extensions/index.md +++ b/documentation/extensions/index.md @@ -90,6 +90,7 @@ Experimental Smack Extensions and currently supported XEPs of smack-experimental | [Internet of Things - Sensor Data](iot.md) | [XEP-0323](https://xmpp.org/extensions/xep-0323.html) | n/a | Sensor data interchange over XMPP. | | [Internet of Things - Provisioning](iot.md) | [XEP-0324](https://xmpp.org/extensions/xep-0324.html) | n/a | Provisioning, access rights and user privileges for the Internet of Things. | | [Internet of Things - Control](iot.md) | [XEP-0325](https://xmpp.org/extensions/xep-0325.html) | n/a | Describes how to control devices or actuators in an XMPP-based sensor network. | +| Jid Prep | [XEP-0328](https://xmpp.org/extensions/xep-0328.html) | 0.1 | Describes a way for an XMPP client to request an XMPP server to prep and normalize a given JID. | | [HTTP over XMPP transport](hoxt.md) | [XEP-0332](https://xmpp.org/extensions/xep-0332.html) | n/a | Allows to transport HTTP communication over XMPP peer-to-peer networks. | | Chat Markers | [XEP-0333](https://xmpp.org/extensions/xep-0333.html) | n/a | A solution of marking the last received, displayed and acknowledged message in a chat. | | Message Processing Hints | [XEP-0334](https://xmpp.org/extensions/xep-0334.html) | n/a | Hints to entities routing or receiving a message. | diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/JidPrepManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/JidPrepManager.java new file mode 100644 index 000000000..b5ebc8ce7 --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/JidPrepManager.java @@ -0,0 +1,91 @@ +/** + * + * Copyright 2019 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.smackx.jid_prep; + +import java.util.Map; +import java.util.WeakHashMap; + +import org.jivesoftware.smack.Manager; +import org.jivesoftware.smack.SmackException.NoResponseException; +import org.jivesoftware.smack.SmackException.NotConnectedException; +import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smack.XMPPException.XMPPErrorException; +import org.jivesoftware.smack.packet.StanzaError; + +import org.jivesoftware.smackx.disco.ServiceDiscoveryManager; +import org.jivesoftware.smackx.jid_prep.element.JidPrepIq; + +import org.jxmpp.jid.DomainBareJid; +import org.jxmpp.jid.Jid; + +public class JidPrepManager extends Manager { + + public static final String NAMESPACE = JidPrepIq.NAMESPACE; + + private static final Map INSTANCES = new WeakHashMap<>(); + + private final ServiceDiscoveryManager serviceDiscoveryManager; + + public static synchronized JidPrepManager getInstanceFor(XMPPConnection connection) { + JidPrepManager manager = INSTANCES.get(connection); + if (manager == null) { + manager = new JidPrepManager(connection); + INSTANCES.put(connection, manager); + } + return manager; + } + + public JidPrepManager(XMPPConnection connection) { + super(connection); + + serviceDiscoveryManager = ServiceDiscoveryManager.getInstanceFor(connection); + } + + public String requestJidPrep(String jidToBePrepped) + throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException { + DomainBareJid serviceAddress = serviceDiscoveryManager.findService(NAMESPACE, true); + return requestJidPrep(serviceAddress, jidToBePrepped); + } + + public String requestJidPrep(Jid jidPrepService, String jidToBePrepped) + throws NoResponseException, NotConnectedException, InterruptedException, XMPPErrorException { + JidPrepIq jidPrepRequest = new JidPrepIq(jidToBePrepped); + jidPrepRequest.setTo(jidPrepService); + + JidPrepIq jidPrepResponse; + try { + jidPrepResponse = connection().sendIqRequestAndWaitForResponse(jidPrepRequest); + } catch (XMPPErrorException e) { + StanzaError stanzaError = e.getStanzaError(); + if (stanzaError.getCondition() == StanzaError.Condition.jid_malformed) { + // jid-malformed is, sadly, returned if the jid can not be normalized. This means we can not distinguish + // if the error is returned because e.g. the IQ's 'to' address was malformed (c.f. RFC 6120 ยง 8.3.3.8) + // or if the JID to prep was malformed. Assume the later is the case and return 'null'. + return null; + } + + throw e; + } + + return jidPrepResponse.getJid(); + } + + public boolean isSupported(Jid jid) + throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException { + return serviceDiscoveryManager.supportsFeature(jid, NAMESPACE); + } +} diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/element/JidPrepIq.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/element/JidPrepIq.java new file mode 100644 index 000000000..2e9e6c4b2 --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/element/JidPrepIq.java @@ -0,0 +1,44 @@ +/** + * + * Copyright 2019 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.smackx.jid_prep.element; + +import org.jivesoftware.smack.packet.IQ; + +public class JidPrepIq extends IQ { + + public static final String ELEMENT = "jid"; + public static final String NAMESPACE = "urn:xmpp:jidprep:0"; + + private final String jid; + + public JidPrepIq(String jid) { + super(ELEMENT, NAMESPACE); + this.jid = jid; + } + + public String getJid() { + return jid; + } + + @Override + protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) { + xml.rightAngleBracket(); + xml.escape(jid); + + return xml; + } +} diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/element/package-info.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/element/package-info.java new file mode 100644 index 000000000..9606c202d --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/element/package-info.java @@ -0,0 +1,21 @@ +/** + * + * Copyright 2019 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. + */ + +/** + * XML elements for XEP-0328: JID Prep. + */ +package org.jivesoftware.smackx.jid_prep.element; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/package-info.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/package-info.java new file mode 100644 index 000000000..47b1cae3b --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/package-info.java @@ -0,0 +1,23 @@ +/** + * + * Copyright 2019 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. + */ + +/** + * Smack's API for XEP-0328: JID Prep. + * + * @see XEP-0328: JID Prep + */ +package org.jivesoftware.smackx.jid_prep; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/provider/JidPrepIqProvider.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/provider/JidPrepIqProvider.java new file mode 100644 index 000000000..82f81f1a9 --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/provider/JidPrepIqProvider.java @@ -0,0 +1,38 @@ +/** + * + * Copyright 2019 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.smackx.jid_prep.provider; + +import java.io.IOException; + +import org.jivesoftware.smack.packet.XmlEnvironment; +import org.jivesoftware.smack.parsing.SmackParsingException; +import org.jivesoftware.smack.provider.IQProvider; +import org.jivesoftware.smack.xml.XmlPullParser; +import org.jivesoftware.smack.xml.XmlPullParserException; +import org.jivesoftware.smackx.jid_prep.element.JidPrepIq; + +public class JidPrepIqProvider extends IQProvider { + + @Override + public JidPrepIq parse(XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment) + throws XmlPullParserException, IOException, SmackParsingException { + String jid = parser.nextText(); + + return new JidPrepIq(jid); + } + +} diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/provider/package-info.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/provider/package-info.java new file mode 100644 index 000000000..7399e97f2 --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/jid_prep/provider/package-info.java @@ -0,0 +1,21 @@ +/** + * + * Copyright 2019 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. + */ + +/** + * Providers for XEP-0328: JID Prep. + */ +package org.jivesoftware.smackx.jid_prep.provider; diff --git a/smack-experimental/src/main/resources/org.jivesoftware.smack.experimental/experimental.providers b/smack-experimental/src/main/resources/org.jivesoftware.smack.experimental/experimental.providers index 974c149f2..9f42e0f57 100644 --- a/smack-experimental/src/main/resources/org.jivesoftware.smack.experimental/experimental.providers +++ b/smack-experimental/src/main/resources/org.jivesoftware.smack.experimental/experimental.providers @@ -324,4 +324,11 @@ org.jivesoftware.smackx.dox.provider.DnsIqProvider + + + jid + urn:xmpp:jidprep:0 + org.jivesoftware.smackx.jid_prep.provider.JidPrepIqProvider + + From 86c28e9d1397b4c499614a56ec900c9057b9217f Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 12 Sep 2019 15:04:07 +0200 Subject: [PATCH 18/19] Use XmlEnvironment.EMPTY instead of null in PacketParserUtils --- .../java/org/jivesoftware/smack/util/PacketParserUtils.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java index 3b30e8463..54b27879d 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java @@ -91,7 +91,7 @@ public class PacketParserUtils { @SuppressWarnings("unchecked") public static S parseStanza(String stanza) throws XmlPullParserException, SmackParsingException, IOException { - return (S) parseStanza(getParserFor(stanza), null); + return (S) parseStanza(getParserFor(stanza), XmlEnvironment.EMPTY); } /** @@ -122,7 +122,7 @@ public class PacketParserUtils { } public static Message parseMessage(XmlPullParser parser) throws XmlPullParserException, IOException, SmackParsingException { - return parseMessage(parser, null); + return parseMessage(parser, XmlEnvironment.EMPTY); } /** @@ -409,7 +409,7 @@ public class PacketParserUtils { } public static Presence parsePresence(XmlPullParser parser) throws XmlPullParserException, IOException, SmackParsingException { - return parsePresence(parser, null); + return parsePresence(parser, XmlEnvironment.EMPTY); } /** From f2e1d7ddd594e6bda1bb4c650fe3c83c7a6d1d3e Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 12 Sep 2019 15:04:51 +0200 Subject: [PATCH 19/19] Add XmlEnvironment conscious ParserUtils.getXmlLang() and unify parsing of common stanza attributes where this new method is used. --- .../smack/util/PacketParserUtils.java | 29 ++++++++++--------- .../jivesoftware/smack/util/ParserUtils.java | 9 ++++++ 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java index 54b27879d..a71361af1 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java @@ -121,6 +121,20 @@ public class PacketParserUtils { } } + private static void parseCommonStanzaAttributes(Stanza stanza, XmlPullParser parser, XmlEnvironment xmlEnvironment) throws XmppStringprepException { + String id = parser.getAttributeValue("id"); + stanza.setStanzaId(id); + + Jid to = ParserUtils.getJidAttribute(parser, "to"); + stanza.setTo(to); + + Jid from = ParserUtils.getJidAttribute(parser, "from"); + stanza.setFrom(from); + + String language = ParserUtils.getXmlLang(parser, xmlEnvironment); + stanza.setLanguage(language); + } + public static Message parseMessage(XmlPullParser parser) throws XmlPullParserException, IOException, SmackParsingException { return parseMessage(parser, XmlEnvironment.EMPTY); } @@ -142,15 +156,11 @@ public class PacketParserUtils { XmlEnvironment messageXmlEnvironment = XmlEnvironment.from(parser, outerXmlEnvironment); final int initialDepth = parser.getDepth(); Message message = new Message(); - message.setStanzaId(parser.getAttributeValue("", "id")); - message.setTo(ParserUtils.getJidAttribute(parser, "to")); - message.setFrom(ParserUtils.getJidAttribute(parser, "from")); + parseCommonStanzaAttributes(message, parser, outerXmlEnvironment); String typeString = parser.getAttributeValue("", "type"); if (typeString != null) { message.setType(Message.Type.fromString(typeString)); } - String language = ParserUtils.getXmlLang(parser); - message.setLanguage(language); // Parse sub-elements. We include extra logic to make sure the values // are only read once. This is because it's possible for the names to appear @@ -433,14 +443,7 @@ public class PacketParserUtils { type = Presence.Type.fromString(typeString); } Presence presence = new Presence(type); - presence.setTo(ParserUtils.getJidAttribute(parser, "to")); - presence.setFrom(ParserUtils.getJidAttribute(parser, "from")); - presence.setStanzaId(parser.getAttributeValue("", "id")); - - String language = ParserUtils.getXmlLang(parser); - if (language != null && !"".equals(language.trim())) { - presence.setLanguage(language); - } + parseCommonStanzaAttributes(presence, parser, outerXmlEnvironment); // Parse sub-elements outerloop: while (true) { diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/ParserUtils.java b/smack-core/src/main/java/org/jivesoftware/smack/util/ParserUtils.java index 81d232f10..3486b372d 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/ParserUtils.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/ParserUtils.java @@ -27,6 +27,7 @@ import javax.xml.namespace.QName; import org.jivesoftware.smack.datatypes.UInt16; import org.jivesoftware.smack.datatypes.UInt32; +import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.parsing.SmackParsingException; import org.jivesoftware.smack.parsing.SmackParsingException.SmackTextParseException; import org.jivesoftware.smack.parsing.SmackParsingException.SmackUriSyntaxParsingException; @@ -341,6 +342,14 @@ public class ParserUtils { return text; } + public static String getXmlLang(XmlPullParser parser, XmlEnvironment xmlEnvironment) { + String currentXmlLang = getXmlLang(parser); + if (currentXmlLang != null) { + return currentXmlLang; + } + return xmlEnvironment.getEffectiveLanguage(); + } + public static String getXmlLang(XmlPullParser parser) { return parser.getAttributeValue("http://www.w3.org/XML/1998/namespace", "lang"); }