1
0
Fork 0
mirror of https://github.com/vanitasvitae/Smack.git synced 2024-12-02 00:42:07 +01:00

Compare commits

..

No commits in common. "f2e1d7ddd594e6bda1bb4c650fe3c83c7a6d1d3e" and "5b23b9a6ae137fffbf6a8ee341dc126dc40dd4e5" have entirely different histories.

135 changed files with 1126 additions and 1132 deletions

View file

@ -35,8 +35,7 @@ install: gradle assemble --stacktrace
# archive to additionaly test if artifact creation is # archive to additionaly test if artifact creation is
# functional. Which hasn't always be the case in the past, see # functional. Which hasn't always be the case in the past, see
# 90cbcaebc7a89f4f771f733a33ac9f389df85be2 # 90cbcaebc7a89f4f771f733a33ac9f389df85be2
# Also run javadocAll to ensure it works. script: gradle check install --stacktrace
script: gradle check install javadocAll --stacktrace
after_success: after_success:
- JAVAC_VERSION=$((javac -version) 2>&1) - JAVAC_VERSION=$((javac -version) 2>&1)

View file

@ -15,7 +15,7 @@ buildscript {
plugins { plugins {
id 'ru.vyarus.animalsniffer' version '1.5.0' id 'ru.vyarus.animalsniffer' version '1.5.0'
id 'net.ltgt.errorprone' version '0.8.1' id 'net.ltgt.errorprone' version '0.8'
} }
apply plugin: 'org.kordamp.gradle.markdown' apply plugin: 'org.kordamp.gradle.markdown'
@ -203,11 +203,7 @@ allprojects {
'-Werror', '-Werror',
] ]
options.errorprone { options.errorprone {
error( error("UnusedVariable", "UnusedMethod")
"UnusedVariable",
"UnusedMethod",
"MethodCanBeStatic",
)
errorproneArgs = [ errorproneArgs = [
// Disable errorprone checks // Disable errorprone checks
'-Xep:TypeParameterUnusedInFormals:OFF', '-Xep:TypeParameterUnusedInFormals:OFF',
@ -297,25 +293,13 @@ task copyAllJavadocDocFiles(type: Copy) {
task javadocAll(type: Javadoc, dependsOn: copyAllJavadocDocFiles) { task javadocAll(type: Javadoc, dependsOn: copyAllJavadocDocFiles) {
source javadocAllProjects.collect {project -> source javadocAllProjects.collect {project ->
project.sourceSets.main.allJava.findAll { project.sourceSets.main.allJava }
// 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 destinationDir = javadocAllDir
// Might need a classpath // Might need a classpath
classpath = files(subprojects.collect {project -> classpath = files(subprojects.collect {project ->
project.sourceSets.main.compileClasspath}) project.sourceSets.main.compileClasspath})
classpath += files(androidBootClasspath) classpath += files(androidBootClasspath)
options { 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 linkSource = true
use = true use = true
links = [ links = [

View file

@ -90,7 +90,6 @@ 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 - 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 - 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. | | [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. | | [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. | | 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. | | Message Processing Hints | [XEP-0334](https://xmpp.org/extensions/xep-0334.html) | n/a | Hints to entities routing or receiving a message. |

View file

@ -1 +0,0 @@
../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/package-info.java

View file

@ -0,0 +1,21 @@
/**
*
* 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;

View file

@ -1 +0,0 @@
../../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/ping/package-info.java

View file

@ -0,0 +1,21 @@
/**
*
* 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;

View file

@ -1 +0,0 @@
../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/package-info.java

View file

@ -0,0 +1,21 @@
/**
*
* 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;

View file

@ -1 +0,0 @@
../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/util/package-info.java

View file

@ -0,0 +1,21 @@
/**
*
* 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;

View file

@ -1 +0,0 @@
../../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/util/stringencoder/package-info.java

View file

@ -0,0 +1,21 @@
/**
*
* 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;

View file

@ -1 +0,0 @@
../../../../../../../../smack-debug/src/main/java/org/jivesoftware/smackx/debugger/package-info.java

View file

@ -0,0 +1,21 @@
/**
*
* 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;

View file

@ -1 +0,0 @@
../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/package-info.java

View file

@ -0,0 +1,21 @@
/**
*
* 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;

View file

@ -3,6 +3,6 @@ Compression with jzlib
Allow to compress the XMPP stream with help of jzlib.""" Allow to compress the XMPP stream with help of jzlib."""
dependencies { dependencies {
compile project(':smack-core') compile project(path: ':smack-core')
compile 'com.jcraft:jzlib:[1.1,1.2)' compile 'com.jcraft:jzlib:[1.1,1.2)'
} }

View file

@ -1 +0,0 @@
../../../../../../../../smack-core/src/main/java/org/jivesoftware/smack/compression/package-info.java

View file

@ -0,0 +1,21 @@
/**
*
* 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;

View file

@ -114,7 +114,9 @@ public class AbstractError {
xml.escape(text); xml.escape(text);
xml.closeElement("text"); xml.closeElement("text");
} }
xml.append(extensions); for (ExtensionElement packetExtension : extensions) {
xml.append(packetExtension.toXML());
}
} }
public abstract static class Builder<B extends Builder<B>> { public abstract static class Builder<B extends Builder<B>> {

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright © 2017-2019 Florian Schmaus * Copyright © 2017 Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -38,7 +38,8 @@ public abstract class AbstractTextElement implements ExtensionElement {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.optXmlLangAttribute(lang);
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.escape(text); xml.escape(text);
xml.closeElement(this); xml.closeElement(this);
@ -49,19 +50,6 @@ public abstract class AbstractTextElement implements ExtensionElement {
return text; 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() { public final String getLang() {
return lang; return lang;
} }

View file

@ -32,13 +32,4 @@ public interface FullyQualifiedElement extends NamedElement {
String localPart = getElementName(); String localPart = getElementName();
return new QName(namespaceURI, localPart); 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;
}
} }

View file

@ -62,6 +62,10 @@ public abstract class IQ extends Stanza {
this.childElementQName = iq.childElementQName; this.childElementQName = iq.childElementQName;
} }
protected IQ(String childElementName) {
this(childElementName, null);
}
protected IQ(String childElementName, String childElementNamespace) { protected IQ(String childElementName, String childElementNamespace) {
this.childElementName = childElementName; this.childElementName = childElementName;
this.childElementNamespace = childElementNamespace; this.childElementNamespace = childElementNamespace;
@ -132,11 +136,6 @@ public abstract class IQ extends Stanza {
return childElementNamespace; return childElementNamespace;
} }
@Override
public final String getElementName() {
return IQ_ELEMENT;
}
@Override @Override
public final String toString() { public final String toString() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
@ -151,8 +150,9 @@ public abstract class IQ extends Stanza {
@Override @Override
public final XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { public final XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) {
XmlStringBuilder buf = new XmlStringBuilder(this, enclosingXmlEnvironment); XmlStringBuilder buf = new XmlStringBuilder(enclosingXmlEnvironment);
addCommonAttributes(buf); buf.halfOpenElement(IQ_ELEMENT);
addCommonAttributes(buf, enclosingXmlEnvironment);
if (type == null) { if (type == null) {
buf.attribute("type", "get"); buf.attribute("type", "get");
} }
@ -160,7 +160,7 @@ public abstract class IQ extends Stanza {
buf.attribute("type", type.toString()); buf.attribute("type", type.toString());
} }
buf.rightAngleBracket(); buf.rightAngleBracket();
appendInnerXml(buf); buf.append(getChildElementXML(enclosingXmlEnvironment));
buf.closeElement(IQ_ELEMENT); buf.closeElement(IQ_ELEMENT);
return buf; return buf;
} }
@ -171,52 +171,44 @@ public abstract class IQ extends Stanza {
* *
* @return the child element section of the IQ XML. * @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() { public final XmlStringBuilder getChildElementXML() {
XmlStringBuilder xml = new XmlStringBuilder(); return getChildElementXML(null);
appendInnerXml(xml);
return xml;
} }
/** /**
* Append the sub-element XML section of the IQ stanza. * Returns the sub-element XML section of the IQ packet, or the empty String if there
* isn't one.
* *
* @param xml the XmlStringBuilder to append to. * @param enclosingXmlEnvironment the enclosing XML namespace.
* @return the child element section of the IQ XML.
* @since 4.3.0
*/ */
private void appendInnerXml(XmlStringBuilder xml) { public final XmlStringBuilder getChildElementXML(XmlEnvironment enclosingXmlEnvironment) {
XmlStringBuilder xml = new XmlStringBuilder();
if (type == Type.error) { if (type == Type.error) {
// Add the error sub-packet, if there is one. // Add the error sub-packet, if there is one.
appendErrorIfExists(xml); appendErrorIfExists(xml, enclosingXmlEnvironment);
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);
// Add the query section if there is one. List<ExtensionElement> extensionsXml = getExtensions();
IQChildElementXmlStringBuilder iqChildElement = getIQChildElementBuilder( if (iqChildElement.isEmptyElement) {
new IQChildElementXmlStringBuilder(this)); if (extensionsXml.isEmpty()) {
// TOOD: Document the cases where iqChildElement is null but childElementName not. And if there are none, change xml.closeEmptyElement();
// the logic. return xml;
if (iqChildElement == null) { } else {
return; xml.rightAngleBracket();
} }
}
xml.append(iqChildElement); xml.append(extensionsXml);
xml.closeElement(iqChildElement.element);
List<ExtensionElement> extensionsXml = getExtensions();
if (iqChildElement.isEmptyElement) {
if (extensionsXml.isEmpty()) {
xml.closeEmptyElement();
return;
} }
xml.rightAngleBracket();
} }
return xml;
xml.append(extensionsXml);
xml.closeElement(iqChildElement.element);
} }
/** /**

View file

@ -467,11 +467,6 @@ public final class Message extends Stanza implements TypedCloneable<Message> {
return language; return language;
} }
@Override
public String getElementName() {
return ELEMENT;
}
@Override @Override
public String toString() { public String toString() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
@ -486,8 +481,9 @@ public final class Message extends Stanza implements TypedCloneable<Message> {
@Override @Override
public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) {
XmlStringBuilder buf = new XmlStringBuilder(this, enclosingXmlEnvironment); XmlStringBuilder buf = new XmlStringBuilder(enclosingXmlEnvironment);
addCommonAttributes(buf); buf.halfOpenElement(ELEMENT);
enclosingXmlEnvironment = addCommonAttributes(buf, enclosingXmlEnvironment);
buf.optAttribute("type", type); buf.optAttribute("type", type);
buf.rightAngleBracket(); buf.rightAngleBracket();
@ -501,16 +497,16 @@ public final class Message extends Stanza implements TypedCloneable<Message> {
// Skip the default language // Skip the default language
if (subject.equals(defaultSubject)) if (subject.equals(defaultSubject))
continue; continue;
buf.append(subject); buf.append(subject.toXML());
} }
buf.optElement("thread", thread); buf.optElement("thread", thread);
// Append the error subpacket if the message type is an error. // Append the error subpacket if the message type is an error.
if (type == Type.error) { if (type == Type.error) {
appendErrorIfExists(buf); appendErrorIfExists(buf, enclosingXmlEnvironment);
} }
// Add extension elements, if any are defined. // Add extension elements, if any are defined.
buf.append(getExtensions()); buf.append(getExtensions(), enclosingXmlEnvironment);
buf.closeElement(ELEMENT); buf.closeElement(ELEMENT);
return buf; return buf;
@ -548,7 +544,11 @@ public final class Message extends Stanza implements TypedCloneable<Message> {
this.subject = subject; this.subject = subject;
} }
@Override /**
* Returns the language of this message subject.
*
* @return the language of this message subject.
*/
public String getLanguage() { public String getLanguage() {
return language; return language;
} }
@ -592,8 +592,8 @@ public final class Message extends Stanza implements TypedCloneable<Message> {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder();
xml.rightAngleBracket(); xml.halfOpenElement(getElementName()).optXmlLangAttribute(getLanguage()).rightAngleBracket();
xml.escape(subject); xml.escape(subject);
xml.closeElement(getElementName()); xml.closeElement(getElementName());
return xml; return xml;
@ -642,7 +642,12 @@ public final class Message extends Stanza implements TypedCloneable<Message> {
this.namespace = Objects.requireNonNull(namespace); this.namespace = Objects.requireNonNull(namespace);
} }
@Override /**
* 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}.
*/
public String getLanguage() { public String getLanguage() {
return language; return language;
} }
@ -687,7 +692,7 @@ public final class Message extends Stanza implements TypedCloneable<Message> {
@Override @Override
public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) { public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingXmlEnvironment); XmlStringBuilder xml = new XmlStringBuilder(this, enclosingXmlEnvironment);
xml.rightAngleBracket(); xml.optXmlLangAttribute(getLanguage()).rightAngleBracket();
xml.escape(message); xml.escape(message);
xml.closeElement(getElementName()); xml.closeElement(getElementName());
return xml; return xml;

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright © 2014-2019 Florian Schmaus * Copyright © 2014 Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -18,13 +18,8 @@
package org.jivesoftware.smack.packet; package org.jivesoftware.smack.packet;
/** /**
* Interface to represent a XML element. This is similar to {@link ExtensionElement}, but does not carry a single * Interface to represent a XML element. This is similar to {@link ExtensionElement}, but does not
* namespace, but instead is used with multiple namespaces. Examples for this include MUC's &lt;destroy/&gt; element. * carry a namespace and is usually included as child element of an stanza extension.
* <p>
* Please note that usage of this interface is <b>discouraged</b>. 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.
* </p>
*/ */
public interface NamedElement extends Element { public interface NamedElement extends Element {

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright © 2014-2019 Florian Schmaus * Copyright © 2014-2015 Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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 * @author Florian Schmaus
* @see <a href="http://xmpp.org/extensions/xep-0360.html">XEP-0360: Nonzas (are not Stanzas)</a> * @see <a href="http://xmpp.org/extensions/xep-0360.html">XEP-0360: Nonzas (are not Stanzas)</a>
*/ */
public interface Nonza extends TopLevelStreamElement { public interface Nonza extends TopLevelStreamElement, FullyQualifiedElement {
} }

View file

@ -113,7 +113,11 @@ public interface Packet extends TopLevelStreamElement {
*/ */
void setError(StanzaError error); void setError(StanzaError error);
@Override /**
* Returns the xml:lang of this Stanza, or null if one has not been set.
*
* @return the xml:lang of this Stanza, or null.
*/
String getLanguage(); String getLanguage();
/** /**

View file

@ -256,11 +256,6 @@ public final class Presence extends Stanza implements TypedCloneable<Presence> {
this.mode = mode; this.mode = mode;
} }
@Override
public String getElementName() {
return ELEMENT;
}
@Override @Override
public String toString() { public String toString() {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
@ -282,8 +277,9 @@ public final class Presence extends Stanza implements TypedCloneable<Presence> {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder buf = new XmlStringBuilder(enclosingNamespace);
addCommonAttributes(buf); buf.halfOpenElement(ELEMENT);
addCommonAttributes(buf, enclosingNamespace);
if (type != Type.available) { if (type != Type.available) {
buf.attribute("type", type); buf.attribute("type", type);
} }
@ -295,10 +291,10 @@ public final class Presence extends Stanza implements TypedCloneable<Presence> {
buf.element("show", mode); buf.element("show", mode);
} }
buf.append(getExtensions()); buf.append(getExtensions(), enclosingNamespace);
// Add the error sub-packet, if there is one. // Add the error sub-packet, if there is one.
appendErrorIfExists(buf); appendErrorIfExists(buf, enclosingNamespace);
buf.closeElement(ELEMENT); buf.closeElement(ELEMENT);

View file

@ -59,10 +59,6 @@ public abstract class Stanza implements TopLevelStreamElement {
private final MultiMap<QName, ExtensionElement> extensionElements = new MultiMap<>(); private final MultiMap<QName, ExtensionElement> 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 String id = null;
private Jid to; private Jid to;
private Jid from; private Jid from;
@ -287,7 +283,11 @@ public abstract class Stanza implements TopLevelStreamElement {
error = xmppErrorBuilder.build(); error = xmppErrorBuilder.build();
} }
@Override /**
* Returns the xml:lang of this Stanza, or null if one has not been set.
*
* @return the xml:lang of this Stanza, or null.
*/
public String getLanguage() { public String getLanguage() {
return language; return language;
} }
@ -491,11 +491,6 @@ public abstract class Stanza implements TopLevelStreamElement {
@Override @Override
public abstract String toString(); public abstract String toString();
@Override
public final String getNamespace() {
return namespace;
}
/** /**
* Returns the default language used for all messages containing localized content. * Returns the default language used for all messages containing localized content.
* *
@ -506,14 +501,33 @@ public abstract class Stanza implements TopLevelStreamElement {
} }
/** /**
* Add to, from, and id attributes. * Add to, from, id and 'xml:lang' attributes
* *
* @param xml the {@link XmlStringBuilder}. * @param xml the {@link XmlStringBuilder}.
* @param enclosingXmlEnvironment the enclosing XML namespace.
* @return the XML environment for this stanza.
*/ */
protected final void addCommonAttributes(XmlStringBuilder xml) { 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);
xml.optAttribute("to", getTo()); xml.optAttribute("to", getTo());
xml.optAttribute("from", getFrom()); xml.optAttribute("from", getFrom());
xml.optAttribute("id", getStanzaId()); xml.optAttribute("id", getStanzaId());
xml.xmllangAttribute(language);
return new XmlEnvironment(namespace, language);
} }
protected void logCommonAttributes(StringBuilder sb) { protected void logCommonAttributes(StringBuilder sb) {
@ -532,11 +546,12 @@ public abstract class Stanza implements TopLevelStreamElement {
* Append an XMPPError is this stanza has one set. * Append an XMPPError is this stanza has one set.
* *
* @param xml the XmlStringBuilder to append the error to. * @param xml the XmlStringBuilder to append the error to.
* @param enclosingXmlEnvironment the enclosing XML environment.
*/ */
protected void appendErrorIfExists(XmlStringBuilder xml) { protected void appendErrorIfExists(XmlStringBuilder xml, XmlEnvironment enclosingXmlEnvironment) {
StanzaError error = getError(); StanzaError error = getError();
if (error != null) { if (error != null) {
xml.append(error); xml.append(error.toXML(enclosingXmlEnvironment));
} }
} }
} }

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright © 2014-2019 Florian Schmaus * Copyright © 2014-2018 Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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 * A XMPP top level stream element. This is either a stanza ({@link Stanza}) or
* just a plain stream element ({@link Nonza}). * just a plain stream element ({@link Nonza}).
*/ */
public interface TopLevelStreamElement extends FullyQualifiedElement { public interface TopLevelStreamElement extends Element {
} }

View file

@ -106,29 +106,6 @@ public class XmlEnvironment {
return effectiveLanguage; 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) { public static XmlEnvironment from(XmlPullParser parser) {
return from(parser, null); return from(parser, null);
} }

View file

@ -91,7 +91,7 @@ public class PacketParserUtils {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public static <S extends Stanza> S parseStanza(String stanza) throws XmlPullParserException, SmackParsingException, IOException { public static <S extends Stanza> S parseStanza(String stanza) throws XmlPullParserException, SmackParsingException, IOException {
return (S) parseStanza(getParserFor(stanza), XmlEnvironment.EMPTY); return (S) parseStanza(getParserFor(stanza), null);
} }
/** /**
@ -121,22 +121,8 @@ 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 { public static Message parseMessage(XmlPullParser parser) throws XmlPullParserException, IOException, SmackParsingException {
return parseMessage(parser, XmlEnvironment.EMPTY); return parseMessage(parser, null);
} }
/** /**
@ -156,11 +142,15 @@ public class PacketParserUtils {
XmlEnvironment messageXmlEnvironment = XmlEnvironment.from(parser, outerXmlEnvironment); XmlEnvironment messageXmlEnvironment = XmlEnvironment.from(parser, outerXmlEnvironment);
final int initialDepth = parser.getDepth(); final int initialDepth = parser.getDepth();
Message message = new Message(); Message message = new Message();
parseCommonStanzaAttributes(message, parser, outerXmlEnvironment); message.setStanzaId(parser.getAttributeValue("", "id"));
message.setTo(ParserUtils.getJidAttribute(parser, "to"));
message.setFrom(ParserUtils.getJidAttribute(parser, "from"));
String typeString = parser.getAttributeValue("", "type"); String typeString = parser.getAttributeValue("", "type");
if (typeString != null) { if (typeString != null) {
message.setType(Message.Type.fromString(typeString)); 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 // 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 // are only read once. This is because it's possible for the names to appear
@ -419,7 +409,7 @@ public class PacketParserUtils {
} }
public static Presence parsePresence(XmlPullParser parser) throws XmlPullParserException, IOException, SmackParsingException { public static Presence parsePresence(XmlPullParser parser) throws XmlPullParserException, IOException, SmackParsingException {
return parsePresence(parser, XmlEnvironment.EMPTY); return parsePresence(parser, null);
} }
/** /**
@ -443,7 +433,14 @@ public class PacketParserUtils {
type = Presence.Type.fromString(typeString); type = Presence.Type.fromString(typeString);
} }
Presence presence = new Presence(type); Presence presence = new Presence(type);
parseCommonStanzaAttributes(presence, parser, outerXmlEnvironment); 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);
}
// Parse sub-elements // Parse sub-elements
outerloop: while (true) { outerloop: while (true) {

View file

@ -27,7 +27,6 @@ import javax.xml.namespace.QName;
import org.jivesoftware.smack.datatypes.UInt16; import org.jivesoftware.smack.datatypes.UInt16;
import org.jivesoftware.smack.datatypes.UInt32; import org.jivesoftware.smack.datatypes.UInt32;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.parsing.SmackParsingException; import org.jivesoftware.smack.parsing.SmackParsingException;
import org.jivesoftware.smack.parsing.SmackParsingException.SmackTextParseException; import org.jivesoftware.smack.parsing.SmackParsingException.SmackTextParseException;
import org.jivesoftware.smack.parsing.SmackParsingException.SmackUriSyntaxParsingException; import org.jivesoftware.smack.parsing.SmackParsingException.SmackUriSyntaxParsingException;
@ -342,14 +341,6 @@ public class ParserUtils {
return text; 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) { public static String getXmlLang(XmlPullParser parser) {
return parser.getAttributeValue("http://www.w3.org/XML/1998/namespace", "lang"); return parser.getAttributeValue("http://www.w3.org/XML/1998/namespace", "lang");
} }

View file

@ -38,12 +38,17 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
private final XmlEnvironment effectiveXmlEnvironment; private final XmlEnvironment effectiveXmlEnvironment;
public XmlStringBuilder() { public XmlStringBuilder() {
this((XmlEnvironment) null);
}
public XmlStringBuilder(XmlEnvironment effectiveXmlEnvironment) {
sb = new LazyStringBuilder(); sb = new LazyStringBuilder();
effectiveXmlEnvironment = null; this.effectiveXmlEnvironment = effectiveXmlEnvironment;
} }
public XmlStringBuilder(ExtensionElement pe) { public XmlStringBuilder(ExtensionElement pe) {
this(pe, null); this();
prelude(pe);
} }
public XmlStringBuilder(NamedElement e) { public XmlStringBuilder(NamedElement e) {
@ -51,29 +56,9 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
halfOpenElement(e.getElementName()); halfOpenElement(e.getElementName());
} }
public XmlStringBuilder(FullyQualifiedElement element, XmlEnvironment enclosingXmlEnvironment) { public XmlStringBuilder(FullyQualifiedElement ee, XmlEnvironment enclosingXmlEnvironment) {
sb = new LazyStringBuilder(); this(enclosingXmlEnvironment);
halfOpenElement(element); prelude(ee);
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(xmlNs)
.withLanguage(xmlLang)
.withNext(enclosingXmlEnvironment)
.build();
} }
public XmlStringBuilder escapedElement(String name, String escapedContent) { public XmlStringBuilder escapedElement(String name, String escapedContent) {
@ -131,15 +116,6 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
return this; 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) { public XmlStringBuilder element(Element element) {
assert element != null; assert element != null;
return append(element.toXML()); return append(element.toXML());
@ -177,7 +153,7 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
public XmlStringBuilder optElement(Element element) { public XmlStringBuilder optElement(Element element) {
if (element != null) { if (element != null) {
append(element); append(element.toXML());
} }
return this; return this;
} }
@ -451,7 +427,6 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
} }
public XmlStringBuilder xmllangAttribute(String value) { public XmlStringBuilder xmllangAttribute(String value) {
// TODO: This should probably be attribute(), not optAttribute().
optAttribute("xml:lang", value); optAttribute("xml:lang", value);
return this; return this;
} }
@ -486,11 +461,11 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
return escape(text.toString()); return escape(text.toString());
} }
protected XmlStringBuilder prelude(FullyQualifiedElement pe) { public XmlStringBuilder prelude(FullyQualifiedElement pe) {
return prelude(pe.getElementName(), pe.getNamespace()); return prelude(pe.getElementName(), pe.getNamespace());
} }
protected XmlStringBuilder prelude(String elementName, String namespace) { public XmlStringBuilder prelude(String elementName, String namespace) {
halfOpenElement(elementName); halfOpenElement(elementName);
xmlnsAttribute(namespace); xmlnsAttribute(namespace);
return this; return this;
@ -516,13 +491,13 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
return this; return this;
} }
public XmlStringBuilder append(Element element) { public XmlStringBuilder append(Collection<? extends Element> elements) {
return append(element.toXML(effectiveXmlEnvironment)); return append(elements, null);
} }
public XmlStringBuilder append(Collection<? extends Element> elements) { public XmlStringBuilder append(Collection<? extends Element> elements, XmlEnvironment enclosingXmlEnvironment) {
for (Element element : elements) { for (Element element : elements) {
append(element); append(element.toXML(enclosingXmlEnvironment));
} }
return this; return this;
} }
@ -616,10 +591,21 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
* @throws IOException if an I/O error occured. * @throws IOException if an I/O error occured.
*/ */
public void write(Writer writer, String enclosingNamespace) throws IOException { public void write(Writer writer, String enclosingNamespace) throws IOException {
XmlEnvironment enclosingXmlEnvironment = XmlEnvironment.builder() for (CharSequence csq : sb.getAsList()) {
.withNamespace(enclosingNamespace) if (csq instanceof XmlStringBuilder) {
.build(); ((XmlStringBuilder) csq).write(writer, enclosingNamespace);
appendXmlTo(writer, enclosingXmlEnvironment); }
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());
}
}
} }
public Iterator<CharSequence> getCharSequenceIterator() { public Iterator<CharSequence> getCharSequenceIterator() {
@ -629,19 +615,14 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
@Override @Override
public CharSequence toXML(XmlEnvironment enclosingXmlEnvironment) { public CharSequence toXML(XmlEnvironment enclosingXmlEnvironment) {
StringBuilder res = new StringBuilder(); StringBuilder res = new StringBuilder();
try { appendXmlTo(res, enclosingXmlEnvironment);
appendXmlTo(res, enclosingXmlEnvironment);
} catch (IOException e) {
// Should never happen.
throw new AssertionError(e);
}
return res; return res;
} }
private void appendXmlTo(Appendable appendable, XmlEnvironment enclosingXmlEnvironment) throws IOException { private void appendXmlTo(StringBuilder res, XmlEnvironment enclosingXmlEnvironment) {
for (CharSequence csq : sb.getAsList()) { for (CharSequence csq : sb.getAsList()) {
if (csq instanceof XmlStringBuilder) { if (csq instanceof XmlStringBuilder) {
((XmlStringBuilder) csq).appendXmlTo(appendable, enclosingXmlEnvironment); ((XmlStringBuilder) csq).appendXmlTo(res, enclosingXmlEnvironment);
} }
else if (csq instanceof XmlNsAttribute) { else if (csq instanceof XmlNsAttribute) {
XmlNsAttribute xmlNsAttribute = (XmlNsAttribute) csq; XmlNsAttribute xmlNsAttribute = (XmlNsAttribute) csq;
@ -651,7 +632,7 @@ public class XmlStringBuilder implements Appendable, CharSequence, Element {
} }
} }
else { else {
appendable.append(csq); res.append(csq);
} }
} }
} }

View file

@ -188,10 +188,5 @@ public class StanzaCollectorTest {
public String toString() { public String toString() {
return toXML().toString(); return toXML().toString();
} }
@Override
public String getElementName() {
return "packetId";
}
} }
} }

View file

@ -738,6 +738,10 @@ public class PacketParserUtilsTest {
.a("type", "chat") .a("type", "chat")
.a("xml:lang", "en") .a("xml:lang", "en")
.e("body") .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.") .t("This is a test of the emergency broadcast system, 1.")
.up() .up()
.e("body") .e("body")

View file

@ -1 +0,0 @@
../../../../../../../../smack-debug/src/main/java/org/jivesoftware/smackx/debugger/package-info.java

View file

@ -0,0 +1,21 @@
/**
*
* 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;

View file

@ -1 +0,0 @@
../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/package-info.java

View file

@ -0,0 +1,21 @@
/**
*
* 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;

View file

@ -943,11 +943,6 @@ public class EnhancedDebugger extends SmackDebugger {
public String toString() { public String toString() {
return toXML((XmlEnvironment) null); return toXML((XmlEnvironment) null);
} }
@Override
public String getElementName() {
return null;
}
} }
/** /**

View file

@ -1 +0,0 @@
../../../../../../../smack-extensions/src/main/java/org/jivesoftware/smackx/package-info.java

View file

@ -0,0 +1,21 @@
/**
*
* 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;

View file

@ -16,7 +16,6 @@
*/ */
package org.jivesoftware.smackx.hoxt.packet; package org.jivesoftware.smackx.hoxt.packet;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.Objects;
@ -146,19 +145,12 @@ public abstract class AbstractHttpOverXmpp extends IQ {
protected abstract B getThis(); protected abstract B getThis();
} }
private abstract static class HoxExtensionElement implements ExtensionElement {
@Override
public final String getNamespace() {
return NAMESPACE;
}
}
/** /**
* Representation of Data element. * Representation of Data element.
* <p> * <p>
* This class is immutable. * This class is immutable.
*/ */
public static class Data extends HoxExtensionElement { public static class Data implements NamedElement {
public static final String ELEMENT = "data"; public static final String ELEMENT = "data";
@ -180,9 +172,9 @@ public abstract class AbstractHttpOverXmpp extends IQ {
*/ */
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.append(child); xml.element(child);
xml.closeElement(this); xml.closeElement(this);
return xml; return xml;
} }
@ -207,7 +199,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
* <p> * <p>
* This class is immutable. * This class is immutable.
*/ */
public static class Text extends HoxExtensionElement { public static class Text implements NamedElement {
public static final String ELEMENT = "text"; public static final String ELEMENT = "text";
@ -224,7 +216,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.optAppend(text); xml.optAppend(text);
xml.closeElement(this); xml.closeElement(this);
@ -251,7 +243,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
* <p> * <p>
* This class is immutable. * This class is immutable.
*/ */
public static class Base64 extends HoxExtensionElement { public static class Base64 implements NamedElement {
public static final String ELEMENT = "base64"; public static final String ELEMENT = "base64";
@ -268,7 +260,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.optAppend(text); xml.optAppend(text);
xml.closeElement(this); xml.closeElement(this);
@ -295,7 +287,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
* <p> * <p>
* This class is immutable. * This class is immutable.
*/ */
public static class Xml extends HoxExtensionElement { public static class Xml implements NamedElement {
public static final String ELEMENT = "xml"; public static final String ELEMENT = "xml";
@ -312,7 +304,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.optAppend(text); xml.optAppend(text);
xml.closeElement(this); xml.closeElement(this);
@ -339,7 +331,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
* <p> * <p>
* This class is immutable. * This class is immutable.
*/ */
public static class ChunkedBase64 extends HoxExtensionElement { public static class ChunkedBase64 implements NamedElement {
public static final String ELEMENT = "chunkedBase64"; public static final String ELEMENT = "chunkedBase64";
@ -356,7 +348,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.attribute("streamId", streamId); xml.attribute("streamId", streamId);
xml.closeEmptyElement(); xml.closeEmptyElement();
return xml; return xml;
@ -382,7 +374,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
* <p> * <p>
* This class is immutable. * This class is immutable.
*/ */
public static class Ibb extends HoxExtensionElement { public static class Ibb implements NamedElement {
public static final String ELEMENT = "ibb"; public static final String ELEMENT = "ibb";
@ -399,7 +391,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.attribute("sid", sid); xml.attribute("sid", sid);
xml.closeEmptyElement(); xml.closeEmptyElement();
return xml; return xml;

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright © 2016-2019 Florian Schmaus * Copyright © 2016 Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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 java.util.Locale;
import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
public abstract class SetData implements ExtensionElement { public abstract class SetData implements NamedElement {
public enum Type { public enum Type {
BOOL, BOOL,
@ -76,11 +76,6 @@ public abstract class SetData implements ExtensionElement {
return getType().toString(); return getType().toString();
} }
@Override
public final String getNamespace() {
return IoTSetRequest.NAMESPACE;
}
/** /**
* Returns the XML representation of this Element. * Returns the XML representation of this Element.
* *
@ -88,7 +83,7 @@ public abstract class SetData implements ExtensionElement {
*/ */
@Override @Override
public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.attribute("name", name); xml.attribute("name", name);
xml.attribute("value", value); xml.attribute("value", value);
xml.closeEmptyElement(); xml.closeEmptyElement();

View file

@ -1,28 +0,0 @@
/**
*
* 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;
}
}

View file

@ -16,9 +16,10 @@
*/ */
package org.jivesoftware.smackx.iot.data.element; package org.jivesoftware.smackx.iot.data.element;
import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
public abstract class IoTDataField extends IoTDataExtensionElement { public abstract class IoTDataField implements NamedElement {
enum Type { enum Type {
integer("int"), integer("int"),
@ -52,7 +53,7 @@ public abstract class IoTDataField extends IoTDataExtensionElement {
@Override @Override
public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.attribute("name", name).attribute("value", getValueString()); xml.attribute("name", name).attribute("value", getValueString());
// TODO handle 'unit' attribute as special case if <numeric/> is implemented. // TODO handle 'unit' attribute as special case if <numeric/> is implemented.
xml.closeEmptyElement(); xml.closeEmptyElement();

View file

@ -19,10 +19,12 @@ package org.jivesoftware.smackx.iot.data.element;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smackx.iot.element.NodeInfo; import org.jivesoftware.smackx.iot.element.NodeInfo;
public class NodeElement extends IoTDataExtensionElement { public class NodeElement implements NamedElement {
public static final String ELEMENT = "node"; public static final String ELEMENT = "node";
@ -49,7 +51,7 @@ public class NodeElement extends IoTDataExtensionElement {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
nodeInfo.appendTo(xml); nodeInfo.appendTo(xml);
xml.rightAngleBracket(); xml.rightAngleBracket();

View file

@ -20,9 +20,10 @@ import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
public class TimestampElement extends IoTDataExtensionElement { public class TimestampElement implements NamedElement {
public static final String ELEMENT = "timestamp"; public static final String ELEMENT = "timestamp";
@ -45,7 +46,7 @@ public class TimestampElement extends IoTDataExtensionElement {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.attribute("value", date); xml.attribute("value", date);
xml.rightAngleBracket(); xml.rightAngleBracket();

View file

@ -1,91 +0,0 @@
/**
*
* 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<XMPPConnection, JidPrepManager> 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);
}
}

View file

@ -1,44 +0,0 @@
/**
*
* 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;
}
}

View file

@ -1,21 +0,0 @@
/**
*
* 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;

View file

@ -1,23 +0,0 @@
/**
*
* 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 <a href="https://xmpp.org/extensions/xep-0328.html">XEP-0328: JID Prep</a>
*/
package org.jivesoftware.smackx.jid_prep;

View file

@ -1,38 +0,0 @@
/**
*
* 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<JidPrepIq> {
@Override
public JidPrepIq parse(XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment)
throws XmlPullParserException, IOException, SmackParsingException {
String jid = parser.nextText();
return new JidPrepIq(jid);
}
}

View file

@ -1,21 +0,0 @@
/**
*
* 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;

View file

@ -52,7 +52,7 @@ public class Checksum implements ExtensionElement {
sb.optAttribute(ATTR_CREATOR, creator); sb.optAttribute(ATTR_CREATOR, creator);
sb.optAttribute(ATTR_NAME, name); sb.optAttribute(ATTR_NAME, name);
sb.rightAngleBracket(); sb.rightAngleBracket();
sb.append(file); sb.element(file);
sb.closeElement(this); sb.closeElement(this);
return sb; return sb;
} }

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2017 Paul Schaub, 2019 Florian Schmaus * Copyright 2017 Paul Schaub
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -19,7 +19,6 @@ package org.jivesoftware.smackx.jingle_filetransfer.element;
import java.io.File; import java.io.File;
import java.util.Date; import java.util.Date;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smackx.hashes.element.HashElement; import org.jivesoftware.smackx.hashes.element.HashElement;
@ -28,10 +27,8 @@ import org.jivesoftware.smackx.jingle.element.JingleContentDescriptionChildEleme
/** /**
* Content of type File. * Content of type File.
*/ */
public class JingleFileTransferChild implements JingleContentDescriptionChildElement { public class JingleFileTransferChild extends JingleContentDescriptionChildElement {
public static final String ELEMENT = "file"; 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_DATE = "date";
public static final String ELEM_DESC = "desc"; public static final String ELEM_DESC = "desc";
public static final String ELEM_MEDIA_TYPE = "media-type"; public static final String ELEM_MEDIA_TYPE = "media-type";
@ -90,13 +87,8 @@ public class JingleFileTransferChild implements JingleContentDescriptionChildEle
} }
@Override @Override
public String getNamespace() { public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
return NAMESPACE; XmlStringBuilder sb = new XmlStringBuilder(this);
}
@Override
public XmlStringBuilder toXML(XmlEnvironment enclosingNamespace) {
XmlStringBuilder sb = new XmlStringBuilder(this, enclosingNamespace);
sb.rightAngleBracket(); sb.rightAngleBracket();
sb.optElement(ELEM_DATE, date); sb.optElement(ELEM_DATE, date);

View file

@ -16,7 +16,7 @@
*/ */
package org.jivesoftware.smackx.jingle_filetransfer.element; package org.jivesoftware.smackx.jingle_filetransfer.element;
import org.jivesoftware.smack.packet.FullyQualifiedElement; import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smackx.hashes.element.HashElement; import org.jivesoftware.smackx.hashes.element.HashElement;
@ -24,11 +24,9 @@ import org.jivesoftware.smackx.hashes.element.HashElement;
/** /**
* RangeElement which specifies, which range of a file shall be transferred. * RangeElement which specifies, which range of a file shall be transferred.
*/ */
public class Range implements FullyQualifiedElement { public class Range implements NamedElement {
public static final String ELEMENT = "range"; 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_OFFSET = "offset";
public static final String ATTR_LENGTH = "length"; public static final String ATTR_LENGTH = "length";
@ -101,11 +99,6 @@ public class Range implements FullyQualifiedElement {
return ELEMENT; return ELEMENT;
} }
@Override
public String getNamespace() {
return NAMESPACE;
}
@Override @Override
public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder sb = new XmlStringBuilder(this); XmlStringBuilder sb = new XmlStringBuilder(this);
@ -115,7 +108,7 @@ public class Range implements FullyQualifiedElement {
if (hash != null) { if (hash != null) {
sb.rightAngleBracket(); sb.rightAngleBracket();
sb.append(hash); sb.element(hash);
sb.closeElement(this); sb.closeElement(this);
} else { } else {
sb.closeEmptyElement(); sb.closeEmptyElement();

View file

@ -126,14 +126,15 @@ public class MamElements {
} }
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder();
xml.halfOpenElement(this);
xml.xmlnsAttribute(NAMESPACE);
xml.optAttribute("queryid", getQueryId()); xml.optAttribute("queryid", getQueryId());
xml.optAttribute("id", getId()); xml.optAttribute("id", getId());
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.append(getForwarded()); xml.element(getForwarded());
xml.closeElement(this); xml.closeElement(this);
return xml; return xml;

View file

@ -124,7 +124,7 @@ public class MamFinIQ extends IQ {
xml.setEmptyElement(); xml.setEmptyElement();
} else { } else {
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.append(rsmSet); xml.element(rsmSet);
} }
return xml; return xml;
} }

View file

@ -134,12 +134,12 @@ public class MamPrefsIQ extends IQ {
if (alwaysJids != null) { if (alwaysJids != null) {
MamElements.AlwaysJidListElement alwaysElement = new AlwaysJidListElement(alwaysJids); MamElements.AlwaysJidListElement alwaysElement = new AlwaysJidListElement(alwaysJids);
xml.append(alwaysElement); xml.element(alwaysElement);
} }
if (neverJids != null) { if (neverJids != null) {
MamElements.NeverJidListElement neverElement = new NeverJidListElement(neverJids); MamElements.NeverJidListElement neverElement = new NeverJidListElement(neverJids);
xml.append(neverElement); xml.element(neverElement);
} }
return xml; return xml;

View file

@ -16,10 +16,14 @@
*/ */
package org.jivesoftware.smackx.message_markup.element; package org.jivesoftware.smackx.message_markup.element;
public class BlockQuoteElement extends MarkupElement.BlockLevelMarkupElement { import org.jivesoftware.smack.util.XmlStringBuilder;
public class BlockQuoteElement implements MarkupElement.BlockLevelMarkupElement {
public static final String ELEMENT = "bquote"; public static final String ELEMENT = "bquote";
private final int start, end;
/** /**
* Create a new Block Quote element. * Create a new Block Quote element.
* *
@ -27,7 +31,18 @@ public class BlockQuoteElement extends MarkupElement.BlockLevelMarkupElement {
* @param end end index * @param end end index
*/ */
public BlockQuoteElement(int start, int end) { public BlockQuoteElement(int start, int end) {
super(start, end); this.start = start;
this.end = end;
}
@Override
public int getStart() {
return start;
}
@Override
public int getEnd() {
return end;
} }
@Override @Override
@ -35,4 +50,13 @@ public class BlockQuoteElement extends MarkupElement.BlockLevelMarkupElement {
return ELEMENT; 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;
}
} }

View file

@ -16,10 +16,14 @@
*/ */
package org.jivesoftware.smackx.message_markup.element; package org.jivesoftware.smackx.message_markup.element;
public class CodeBlockElement extends MarkupElement.BlockLevelMarkupElement { import org.jivesoftware.smack.util.XmlStringBuilder;
public class CodeBlockElement implements MarkupElement.BlockLevelMarkupElement {
public static final String ELEMENT = "bcode"; public static final String ELEMENT = "bcode";
private final int start, end;
/** /**
* Create a new Code Block element. * Create a new Code Block element.
* *
@ -27,7 +31,18 @@ public class CodeBlockElement extends MarkupElement.BlockLevelMarkupElement {
* @param end end index * @param end end index
*/ */
public CodeBlockElement(int start, int end) { public CodeBlockElement(int start, int end) {
super(start, end); this.start = start;
this.end = end;
}
@Override
public int getStart() {
return start;
}
@Override
public int getEnd() {
return end;
} }
@Override @Override
@ -35,4 +50,13 @@ public class CodeBlockElement extends MarkupElement.BlockLevelMarkupElement {
return ELEMENT; 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;
}
} }

View file

@ -19,14 +19,15 @@ package org.jivesoftware.smackx.message_markup.element;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
public class ListElement extends MarkupElement.NonEmptyChildElement { public class ListElement implements MarkupElement.MarkupChildElement {
public static final String ELEMENT = "list"; public static final String ELEMENT = "list";
public static final String ELEM_LI = "li"; public static final String ELEM_LI = "li";
private final int start, end;
private final List<ListEntryElement> entries; private final List<ListEntryElement> entries;
/** /**
@ -37,10 +38,21 @@ public class ListElement extends MarkupElement.NonEmptyChildElement {
* @param entries list entries * @param entries list entries
*/ */
public ListElement(int start, int end, List<ListEntryElement> entries) { public ListElement(int start, int end, List<ListEntryElement> entries) {
super(start, end); this.start = start;
this.end = end;
this.entries = Collections.unmodifiableList(entries); this.entries = Collections.unmodifiableList(entries);
} }
@Override
public int getStart() {
return start;
}
@Override
public int getEnd() {
return end;
}
/** /**
* Return a list of all list entries. * Return a list of all list entries.
* *
@ -56,11 +68,22 @@ public class ListElement extends MarkupElement.NonEmptyChildElement {
} }
@Override @Override
public void appendInnerXml(XmlStringBuilder xml) { public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
xml.append(getEntries()); 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 static class ListEntryElement implements ExtensionElement { public static class ListEntryElement implements NamedElement {
private final int start; private final int start;
@ -86,15 +109,11 @@ public class ListElement extends MarkupElement.NonEmptyChildElement {
return ELEM_LI; return ELEM_LI;
} }
@Override
public String getNamespace() {
return MarkupElement.NAMESPACE;
}
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder();
xml.attribute(MarkupElement.MarkupChildElement.ATTR_START, getStart()); xml.halfOpenElement(this);
xml.attribute(ATTR_START, getStart());
xml.closeEmptyElement(); xml.closeEmptyElement();
return xml; return xml;
} }

View file

@ -22,6 +22,7 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
public class MarkupElement implements ExtensionElement { public class MarkupElement implements ExtensionElement {
@ -266,89 +267,46 @@ public class MarkupElement implements ExtensionElement {
} }
} }
/** /**
* Interface for child elements. * Interface for child elements.
*/ */
public abstract static class MarkupChildElement implements ExtensionElement { public interface MarkupChildElement extends NamedElement {
public static final String ATTR_START = "start"; String ATTR_START = "start";
public static final String ATTR_END = "end"; 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 the start index of this element.
* *
* @return start index * @return start index
*/ */
public final int getStart() { int getStart();
return start;
}
/** /**
* Return the end index of this element. * Return the end index of this element.
* *
* @return end index * @return end index
*/ */
public final int getEnd() { 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. * Interface for block level child elements.
*/ */
public abstract static class BlockLevelMarkupElement extends MarkupChildElement { public interface BlockLevelMarkupElement extends MarkupChildElement {
protected BlockLevelMarkupElement(int start, int end) {
super(start, end);
}
@Override
protected final void afterXmlPrelude(XmlStringBuilder xml) {
xml.closeEmptyElement();
}
} }
} }

View file

@ -21,10 +21,11 @@ import java.util.Set;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
public class SpanElement extends MarkupElement.NonEmptyChildElement { public class SpanElement implements MarkupElement.MarkupChildElement {
public static final String ELEMENT = "span"; public static final String ELEMENT = "span";
private final int start, end;
private final Set<SpanStyle> styles; private final Set<SpanStyle> styles;
/** /**
@ -35,10 +36,21 @@ public class SpanElement extends MarkupElement.NonEmptyChildElement {
* @param styles list of styles that apply to this span * @param styles list of styles that apply to this span
*/ */
public SpanElement(int start, int end, Set<SpanStyle> styles) { public SpanElement(int start, int end, Set<SpanStyle> styles) {
super(start, end); this.start = start;
this.end = end;
this.styles = Collections.unmodifiableSet(styles); this.styles = Collections.unmodifiableSet(styles);
} }
@Override
public int getStart() {
return start;
}
@Override
public int getEnd() {
return end;
}
/** /**
* Return all styles of this span. * Return all styles of this span.
* *
@ -64,9 +76,18 @@ public class SpanElement extends MarkupElement.NonEmptyChildElement {
} }
@Override @Override
protected void appendInnerXml(XmlStringBuilder xml) { 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();
for (SpanStyle style : getStyles()) { for (SpanStyle style : getStyles()) {
xml.emptyElement(style); xml.halfOpenElement(style.toString()).closeEmptyElement();
} }
xml.closeElement(this);
return xml;
} }
} }

View file

@ -62,7 +62,7 @@ public class MUCLightAffiliationsIQ extends IQ {
Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = affiliations.entrySet().iterator(); Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = affiliations.entrySet().iterator();
while (it.hasNext()) { while (it.hasNext()) {
Map.Entry<Jid, MUCLightAffiliation> pair = it.next(); Map.Entry<Jid, MUCLightAffiliation> pair = it.next();
xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
} }
return xml; return xml;

View file

@ -86,11 +86,11 @@ public class MUCLightBlockingIQ extends IQ {
return xml; return xml;
} }
private static void parseBlocking(IQChildElementXmlStringBuilder xml, HashMap<Jid, Boolean> map, boolean isRoom) { private void parseBlocking(IQChildElementXmlStringBuilder xml, HashMap<Jid, Boolean> map, boolean isRoom) {
Iterator<Map.Entry<Jid, Boolean>> it = map.entrySet().iterator(); Iterator<Map.Entry<Jid, Boolean>> it = map.entrySet().iterator();
while (it.hasNext()) { while (it.hasNext()) {
Map.Entry<Jid, Boolean> pair = it.next(); Map.Entry<Jid, Boolean> pair = it.next();
xml.append(new BlockingElement(pair.getKey(), pair.getValue(), isRoom)); xml.element(new BlockingElement(pair.getKey(), pair.getValue(), isRoom));
} }
} }

View file

@ -71,7 +71,7 @@ public class MUCLightChangeAffiliationsIQ extends IQ {
Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = affiliations.entrySet().iterator(); Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = affiliations.entrySet().iterator();
while (it.hasNext()) { while (it.hasNext()) {
Map.Entry<Jid, MUCLightAffiliation> pair = it.next(); Map.Entry<Jid, MUCLightAffiliation> pair = it.next();
xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
} }
} }

View file

@ -52,7 +52,7 @@ public class MUCLightConfigurationIQ extends IQ {
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) { protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.optElement("version", version); xml.optElement("version", version);
xml.append(new ConfigurationElement(configuration)); xml.element(new ConfigurationElement(configuration));
return xml; return xml;
} }

View file

@ -99,10 +99,10 @@ public class MUCLightCreateIQ extends IQ {
@Override @Override
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) { protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.append(new ConfigurationElement(configuration)); xml.element(new ConfigurationElement(configuration));
if (!occupants.isEmpty()) { if (!occupants.isEmpty()) {
xml.append(new OccupantsElement(occupants)); xml.element(new OccupantsElement(occupants));
} }
return xml; return xml;

View file

@ -104,7 +104,7 @@ public abstract class MUCLightElements {
Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = affiliations.entrySet().iterator(); Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = affiliations.entrySet().iterator();
while (it.hasNext()) { while (it.hasNext()) {
Map.Entry<Jid, MUCLightAffiliation> pair = it.next(); Map.Entry<Jid, MUCLightAffiliation> pair = it.next();
xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
} }
xml.closeElement(this); xml.closeElement(this);
@ -303,7 +303,7 @@ public abstract class MUCLightElements {
Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = occupants.entrySet().iterator(); Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = occupants.entrySet().iterator();
while (it.hasNext()) { while (it.hasNext()) {
Map.Entry<Jid, MUCLightAffiliation> pair = it.next(); Map.Entry<Jid, MUCLightAffiliation> pair = it.next();
xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue())); xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
} }
xml.closeElement("occupants"); xml.closeElement("occupants");

View file

@ -62,8 +62,8 @@ public class MUCLightInfoIQ extends IQ {
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) { protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.optElement("version", version); xml.optElement("version", version);
xml.append(new ConfigurationElement(configuration)); xml.element(new ConfigurationElement(configuration));
xml.append(new OccupantsElement(occupants)); xml.element(new OccupantsElement(occupants));
return xml; return xml;
} }

View file

@ -115,7 +115,7 @@ public class EnablePushNotificationsIQ extends IQ {
dataForm.addField(field.build()); dataForm.addField(field.build());
} }
xml.append(dataForm); xml.element(dataForm);
} }
return xml; return xml;

View file

@ -27,7 +27,6 @@ import org.jivesoftware.smack.XMPPConnectionRegistry;
import org.jivesoftware.smack.filter.AndFilter; import org.jivesoftware.smack.filter.AndFilter;
import org.jivesoftware.smack.filter.MessageTypeFilter; import org.jivesoftware.smack.filter.MessageTypeFilter;
import org.jivesoftware.smack.filter.NotFilter; import org.jivesoftware.smack.filter.NotFilter;
import org.jivesoftware.smack.filter.StanzaExtensionFilter;
import org.jivesoftware.smack.filter.StanzaFilter; import org.jivesoftware.smack.filter.StanzaFilter;
import org.jivesoftware.smack.filter.ToTypeFilter; import org.jivesoftware.smack.filter.ToTypeFilter;
import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Message;
@ -36,15 +35,6 @@ import org.jivesoftware.smack.packet.Stanza;
import org.jivesoftware.smackx.disco.ServiceDiscoveryManager; import org.jivesoftware.smackx.disco.ServiceDiscoveryManager;
import org.jivesoftware.smackx.sid.element.OriginIdElement; 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 <a href="https://xmpp.org/extensions/xep-0359.html">XEP-0359: Stable and Unique Stanza IDs</a>
*/
public final class StableUniqueStanzaIdManager extends Manager { public final class StableUniqueStanzaIdManager extends Manager {
public static final String NAMESPACE = "urn:xmpp:sid:0"; public static final String NAMESPACE = "urn:xmpp:sid:0";
@ -56,9 +46,6 @@ public final class StableUniqueStanzaIdManager extends Manager {
MessageTypeFilter.NORMAL_OR_CHAT_OR_HEADLINE, MessageTypeFilter.NORMAL_OR_CHAT_OR_HEADLINE,
ToTypeFilter.ENTITY_FULL_OR_BARE_JID); 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. // Listener for outgoing stanzas that adds origin-ids to outgoing stanzas.
private static final StanzaListener ADD_ORIGIN_ID_INTERCEPTOR = new StanzaListener() { private static final StanzaListener ADD_ORIGIN_ID_INTERCEPTOR = new StanzaListener() {
@Override @Override
@ -79,7 +66,7 @@ public final class StableUniqueStanzaIdManager extends Manager {
/** /**
* Private constructor. * Private constructor.
* @param connection XMPP connection * @param connection TODO javadoc me please
*/ */
private StableUniqueStanzaIdManager(XMPPConnection connection) { private StableUniqueStanzaIdManager(XMPPConnection connection) {
super(connection); super(connection);
@ -106,8 +93,7 @@ public final class StableUniqueStanzaIdManager extends Manager {
*/ */
public synchronized void enable() { public synchronized void enable() {
ServiceDiscoveryManager.getInstanceFor(connection()).addFeature(NAMESPACE); ServiceDiscoveryManager.getInstanceFor(connection()).addFeature(NAMESPACE);
// We need a filter for outgoing messages that do not carry an origin-id already StanzaFilter filter = new AndFilter(OUTGOING_FILTER, new NotFilter(OUTGOING_FILTER));
StanzaFilter filter = new AndFilter(OUTGOING_FILTER, new NotFilter(ORIGIN_ID_FILTER));
connection().addStanzaInterceptor(ADD_ORIGIN_ID_INTERCEPTOR, filter); connection().addStanzaInterceptor(ADD_ORIGIN_ID_INTERCEPTOR, filter);
} }

View file

@ -131,7 +131,12 @@ public class SpoilerElement implements ExtensionElement {
return map; return map;
} }
@Override /**
* Return the language of the hint.
* May be null.
*
* @return language of hint text
*/
public String getLanguage() { public String getLanguage() {
return language; return language;
} }
@ -148,7 +153,8 @@ public class SpoilerElement implements ExtensionElement {
@Override @Override
public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.optXmlLangAttribute(getLanguage());
if (getHint() == null) { if (getHint() == null) {
xml.closeEmptyElement(); xml.closeEmptyElement();
} else { } else {

View file

@ -324,11 +324,4 @@
<className>org.jivesoftware.smackx.dox.provider.DnsIqProvider</className> <className>org.jivesoftware.smackx.dox.provider.DnsIqProvider</className>
</iqProvider> </iqProvider>
<!-- XEP-0328: JID Prep -->
<iqProvider>
<elementName>jid</elementName>
<namespace>urn:xmpp:jidprep:0</namespace>
<className>org.jivesoftware.smackx.jid_prep.provider.JidPrepIqProvider</className>
</iqProvider>
</smackProviders> </smackProviders>

View file

@ -47,7 +47,7 @@ public class PagingTest extends MamTest {
assertEquals(mamQueryIQ.getDataForm(), dataForm); assertEquals(mamQueryIQ.getDataForm(), dataForm);
assertEquals(mamQueryIQ.getDataForm().getFields().get(0).getValues().get(0).toString(), "urn:xmpp:mam:1"); assertEquals(mamQueryIQ.getDataForm().getFields().get(0).getValues().get(0).toString(), "urn:xmpp:mam:1");
assertEquals(pagingStanza, mamQueryIQ.toXML(StreamOpen.CLIENT_NAMESPACE).toString()); assertEquals(mamQueryIQ.toXML(StreamOpen.CLIENT_NAMESPACE).toString(), pagingStanza);
} }
} }

View file

@ -82,7 +82,8 @@ public class QueryArchiveTest extends MamTest {
message.addExtension(new MamResultExtension("g27", "34482-21985-73620", forwarded)); message.addExtension(new MamResultExtension("g27", "34482-21985-73620", forwarded));
assertEquals(mamQueryResultExample, message.toXML(StreamOpen.CLIENT_NAMESPACE).toString()); // FIXME: The order of assertEquals is reversed, fix it by switching it.
assertEquals(message.toXML(StreamOpen.CLIENT_NAMESPACE).toString(), mamQueryResultExample);
MamResultExtension mamResultExtension = MamResultExtension.from(message); MamResultExtension mamResultExtension = MamResultExtension.from(message);

View file

@ -212,19 +212,19 @@ public class MultipleRecipientManager {
if (to != null) { if (to != null) {
for (Jid jid : to) { for (Jid jid : to) {
packet.setTo(jid); packet.setTo(jid);
connection.sendStanza(new PacketCopy(packet)); connection.sendStanza(new PacketCopy(packet.toXML()));
} }
} }
if (cc != null) { if (cc != null) {
for (Jid jid : cc) { for (Jid jid : cc) {
packet.setTo(jid); packet.setTo(jid);
connection.sendStanza(new PacketCopy(packet)); connection.sendStanza(new PacketCopy(packet.toXML()));
} }
} }
if (bcc != null) { if (bcc != null) {
for (Jid jid : bcc) { for (Jid jid : bcc) {
packet.setTo(jid); packet.setTo(jid);
connection.sendStanza(new PacketCopy(packet)); connection.sendStanza(new PacketCopy(packet.toXML()));
} }
} }
} }
@ -297,7 +297,6 @@ public class MultipleRecipientManager {
*/ */
private static final class PacketCopy extends Stanza { private static final class PacketCopy extends Stanza {
private final String elementName;
private final CharSequence text; private final CharSequence text;
/** /**
@ -306,9 +305,8 @@ public class MultipleRecipientManager {
* *
* @param text the whole text of the stanza to send * @param text the whole text of the stanza to send
*/ */
private PacketCopy(Stanza stanza) { private PacketCopy(CharSequence text) {
this.elementName = stanza.getElementName(); this.text = text;
this.text = stanza.toXML();
} }
@Override @Override
@ -321,11 +319,6 @@ public class MultipleRecipientManager {
return toXML().toString(); return toXML().toString();
} }
@Override
public String getElementName() {
return elementName;
}
} }
} }

View file

@ -21,6 +21,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jxmpp.jid.Jid; import org.jxmpp.jid.Jid;
@ -128,7 +129,7 @@ public class MultipleAddresses implements ExtensionElement {
return buf; return buf;
} }
public static final class Address implements ExtensionElement { public static final class Address implements NamedElement {
public static final String ELEMENT = "address"; public static final String ELEMENT = "address";
@ -192,15 +193,10 @@ public class MultipleAddresses implements ExtensionElement {
return ELEMENT; return ELEMENT;
} }
@Override
public String getNamespace() {
return NAMESPACE;
}
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder buf = new XmlStringBuilder();
buf.attribute("type", type); buf.halfOpenElement(this).attribute("type", type);
buf.optAttribute("jid", jid); buf.optAttribute("jid", jid);
buf.optAttribute("node", node); buf.optAttribute("node", node);
buf.optAttribute("desc", description); buf.optAttribute("desc", description);
@ -213,6 +209,5 @@ public class MultipleAddresses implements ExtensionElement {
buf.closeEmptyElement(); buf.closeEmptyElement();
return buf; return buf;
} }
} }
} }

View file

@ -21,8 +21,8 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.InternetAddress; import org.jivesoftware.smack.util.InternetAddress;
import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.Objects;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
@ -260,20 +260,13 @@ public class Bytestream extends IQ {
return xml; 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 * 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. * are forwarded to the target of the file transfer who then chooses and connects to one.
* *
* @author Alexander Wenckus * @author Alexander Wenckus
*/ */
public static class StreamHost extends BytestreamExtensionElement { public static class StreamHost implements NamedElement {
public static String ELEMENTNAME = "streamhost"; public static String ELEMENTNAME = "streamhost";
@ -349,7 +342,7 @@ public class Bytestream extends IQ {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.attribute("jid", getJID()); xml.attribute("jid", getJID());
xml.attribute("host", address); xml.attribute("host", address);
if (getPort() != 0) { if (getPort() != 0) {
@ -373,7 +366,7 @@ public class Bytestream extends IQ {
* *
* @author Alexander Wenckus * @author Alexander Wenckus
*/ */
public static class StreamHostUsed extends BytestreamExtensionElement { public static class StreamHostUsed implements NamedElement {
public static String ELEMENTNAME = "streamhost-used"; public static String ELEMENTNAME = "streamhost-used";
@ -404,7 +397,7 @@ public class Bytestream extends IQ {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.attribute("jid", getJID()); xml.attribute("jid", getJID());
xml.closeEmptyElement(); xml.closeEmptyElement();
return xml; return xml;
@ -416,7 +409,7 @@ public class Bytestream extends IQ {
* *
* @author Alexander Wenckus * @author Alexander Wenckus
*/ */
public static class Activate extends BytestreamExtensionElement { public static class Activate implements NamedElement {
public static String ELEMENTNAME = "activate"; public static String ELEMENTNAME = "activate";
@ -447,13 +440,12 @@ public class Bytestream extends IQ {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.escape(getTarget()); xml.escape(getTarget());
xml.closeElement(this); xml.closeElement(this);
return xml; return xml;
} }
} }
/** /**

View file

@ -103,7 +103,7 @@ public class DelayInformation implements ExtensionElement {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.attribute("stamp", XmppDateTime.formatXEP0082Date(stamp)); xml.attribute("stamp", XmppDateTime.formatXEP0082Date(stamp));
xml.optAttribute("from", from); xml.optAttribute("from", from);
xml.rightAngleBracket(); xml.rightAngleBracket();

View file

@ -72,10 +72,10 @@ public class Forwarded implements ExtensionElement {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.optElement(getDelayInformation()); xml.optElement(getDelayInformation());
xml.append(forwardedPacket); xml.append(forwardedPacket.toXML(NAMESPACE));
xml.closeElement(this); xml.closeElement(this);
return xml; return xml;
} }

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2017-2019 Florian Schmaus * Copyright 2017 Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,8 +16,7 @@
*/ */
package org.jivesoftware.smackx.jingle.element; package org.jivesoftware.smackx.jingle.element;
import org.jivesoftware.smack.packet.FullyQualifiedElement; import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.Objects;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
@ -25,10 +24,9 @@ import org.jivesoftware.smack.util.XmlStringBuilder;
/** /**
* Jingle content element. * Jingle content element.
*/ */
public final class JingleContent implements FullyQualifiedElement { public final class JingleContent implements NamedElement {
public static final String ELEMENT = "content"; public static final String ELEMENT = "content";
public static final String NAMESPACE = Jingle.NAMESPACE;
public static final String CREATOR_ATTRIBUTE_NAME = "creator"; public static final String CREATOR_ATTRIBUTE_NAME = "creator";
@ -134,13 +132,8 @@ public final class JingleContent implements FullyQualifiedElement {
} }
@Override @Override
public String getNamespace() { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
return NAMESPACE; XmlStringBuilder xml = new XmlStringBuilder(this);
}
@Override
public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingXmlEnvironment);
xml.attribute(CREATOR_ATTRIBUTE_NAME, creator); xml.attribute(CREATOR_ATTRIBUTE_NAME, creator);
xml.optAttribute(DISPOSITION_ATTRIBUTE_NAME, disposition); xml.optAttribute(DISPOSITION_ATTRIBUTE_NAME, disposition);
xml.attribute(NAME_ATTRIBUTE_NAME, name); xml.attribute(NAME_ATTRIBUTE_NAME, name);

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright © 2014-2019 Florian Schmaus * Copyright © 2014-2017 Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,12 +16,18 @@
*/ */
package org.jivesoftware.smackx.jingle.element; package org.jivesoftware.smackx.jingle.element;
import org.jivesoftware.smack.packet.FullyQualifiedElement; import org.jivesoftware.smack.packet.NamedElement;
/** /**
* An element found usually in 'description' elements. * An element found usually in 'description' elements.
* *
*/ */
public interface JingleContentDescriptionChildElement extends FullyQualifiedElement { public abstract class JingleContentDescriptionChildElement implements NamedElement {
public static final String ELEMENT = "payload-type";
@Override
public String getElementName() {
return ELEMENT;
}
} }

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2017-2019 Florian Schmaus * Copyright 2017 Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -20,7 +20,6 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
/** /**
@ -67,8 +66,8 @@ public abstract class JingleContentTransport implements ExtensionElement {
} }
@Override @Override
public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment); XmlStringBuilder xml = new XmlStringBuilder(this);
addExtraAttributes(xml); addExtraAttributes(xml);
if (candidates.isEmpty() && info == null) { if (candidates.isEmpty() && info == null) {

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2017-2019 Florian Schmaus * Copyright 2017 Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,13 +16,13 @@
*/ */
package org.jivesoftware.smackx.jingle.element; package org.jivesoftware.smackx.jingle.element;
import org.jivesoftware.smack.packet.FullyQualifiedElement; import org.jivesoftware.smack.packet.NamedElement;
/** /**
* An element found usually in Jingle 'transport' elements. * An element found usually in Jingle 'transport' elements.
* *
*/ */
public abstract class JingleContentTransportCandidate implements FullyQualifiedElement { public abstract class JingleContentTransportCandidate implements NamedElement {
public static final String ELEMENT = "candidate"; public static final String ELEMENT = "candidate";

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2017 Paul Schaub, 2019 Florian Schmaus * Copyright 2017 Paul Schaub
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -16,11 +16,11 @@
*/ */
package org.jivesoftware.smackx.jingle.element; package org.jivesoftware.smackx.jingle.element;
import org.jivesoftware.smack.packet.FullyQualifiedElement; import org.jivesoftware.smack.packet.NamedElement;
/** /**
* Abstract JingleContentTransportInfo element. * Abstract JingleContentTransportInfo element.
*/ */
public interface JingleContentTransportInfo extends FullyQualifiedElement { public abstract class JingleContentTransportInfo implements NamedElement {
} }

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2017-2019 Florian Schmaus * Copyright 2017 Florian Schmaus
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -19,8 +19,7 @@ package org.jivesoftware.smackx.jingle.element;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.jivesoftware.smack.packet.FullyQualifiedElement; import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
@ -30,10 +29,9 @@ import org.jivesoftware.smack.util.XmlStringBuilder;
* @see <a href="https://xmpp.org/extensions/xep-0166.html#def-reason">XEP-0166 § 7.4</a> * @see <a href="https://xmpp.org/extensions/xep-0166.html#def-reason">XEP-0166 § 7.4</a>
* *
*/ */
public class JingleReason implements FullyQualifiedElement { public class JingleReason implements NamedElement {
public static final String ELEMENT = "reason"; public static final String ELEMENT = "reason";
public static final String NAMESPACE = Jingle.NAMESPACE;
public static AlternativeSession AlternativeSession(String sessionId) { public static AlternativeSession AlternativeSession(String sessionId) {
return new AlternativeSession(sessionId); return new AlternativeSession(sessionId);
@ -116,16 +114,11 @@ public class JingleReason implements FullyQualifiedElement {
} }
@Override @Override
public String getNamespace() { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
return NAMESPACE; XmlStringBuilder xml = new XmlStringBuilder(this);
}
@Override
public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingXmlEnvironment);
xml.rightAngleBracket(); xml.rightAngleBracket();
xml.emptyElement(reason); xml.emptyElement(reason.asString);
xml.closeElement(this); xml.closeElement(this);
return xml; return xml;

View file

@ -16,7 +16,6 @@
*/ */
package org.jivesoftware.smackx.jingle.transports.jingle_s5b.elements; 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.InternetAddress;
import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.Objects;
import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.StringUtils;
@ -34,8 +33,6 @@ import org.jxmpp.stringprep.XmppStringprepException;
*/ */
public final class JingleS5BTransportCandidate extends JingleContentTransportCandidate { 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_CID = "cid";
public static final String ATTR_HOST = "host"; public static final String ATTR_HOST = "host";
public static final String ATTR_JID = "jid"; public static final String ATTR_JID = "jid";
@ -133,15 +130,10 @@ public final class JingleS5BTransportCandidate extends JingleContentTransportCan
return new Bytestream.StreamHost(jid, host, port); return new Bytestream.StreamHost(jid, host, port);
} }
@Override @Override
public String getNamespace() { public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
return NAMESPACE; XmlStringBuilder xml = new XmlStringBuilder();
} xml.halfOpenElement(this);
@Override
public XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingXmlEnvironment);
xml.attribute(ATTR_CID, cid); xml.attribute(ATTR_CID, cid);
xml.attribute(ATTR_HOST, host); xml.attribute(ATTR_HOST, host);
xml.attribute(ATTR_JID, jid); xml.attribute(ATTR_JID, jid);
@ -215,5 +207,4 @@ public final class JingleS5BTransportCandidate extends JingleContentTransportCan
return new JingleS5BTransportCandidate(cid, host, jid, port, priority, type); return new JingleS5BTransportCandidate(cid, host, jid, port, priority, type);
} }
} }
} }

View file

@ -16,7 +16,6 @@
*/ */
package org.jivesoftware.smackx.jingle.transports.jingle_s5b.elements; package org.jivesoftware.smackx.jingle.transports.jingle_s5b.elements;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
import org.jivesoftware.smackx.jingle.element.JingleContentTransportInfo; import org.jivesoftware.smackx.jingle.element.JingleContentTransportInfo;
@ -24,14 +23,7 @@ import org.jivesoftware.smackx.jingle.element.JingleContentTransportInfo;
/** /**
* Class representing possible SOCKS5 TransportInfo elements. * Class representing possible SOCKS5 TransportInfo elements.
*/ */
public abstract class JingleS5BTransportInfo implements JingleContentTransportInfo { public abstract class JingleS5BTransportInfo extends JingleContentTransportInfo {
public static final String NAMESPACE = JingleS5BTransport.NAMESPACE_V1;
@Override
public final String getNamespace() {
return NAMESPACE;
}
public abstract static class JingleS5BCandidateTransportInfo extends JingleS5BTransportInfo { public abstract static class JingleS5BCandidateTransportInfo extends JingleS5BTransportInfo {
public static final String ATTR_CID = "cid"; public static final String ATTR_CID = "cid";
@ -47,8 +39,9 @@ public abstract class JingleS5BTransportInfo implements JingleContentTransportIn
} }
@Override @Override
public final XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment); XmlStringBuilder xml = new XmlStringBuilder();
xml.halfOpenElement(this);
xml.attribute(ATTR_CID, getCandidateId()); xml.attribute(ATTR_CID, getCandidateId());
xml.closeEmptyElement(); xml.closeEmptyElement();
return xml; return xml;

View file

@ -87,7 +87,7 @@ public class MediaElement implements FormFieldChildElement {
.optAttribute("width", width) .optAttribute("width", width)
.rightAngleBracket(); .rightAngleBracket();
xml.append(uris); xml.append(uris, xmlEnvironment);
xml.closeElement(this); xml.closeElement(this);
return xml; return xml;

View file

@ -74,7 +74,7 @@ public class MediaElementProvider extends FormFieldChildElementProvider<MediaEle
return mediaElementBuilder.build(); return mediaElementBuilder.build();
} }
private static MediaElement.Uri parseUri(XmlPullParser parser) private MediaElement.Uri parseUri(XmlPullParser parser)
throws SmackUriSyntaxParsingException, XmlPullParserException, IOException { throws SmackUriSyntaxParsingException, XmlPullParserException, IOException {
String type = parser.getAttributeValue("type"); String type = parser.getAttributeValue("type");
URI uri = ParserUtils.getUriFromNextText(parser); URI uri = ParserUtils.getUriFromNextText(parser);

View file

@ -17,10 +17,8 @@
package org.jivesoftware.smackx.mood.element; package org.jivesoftware.smackx.mood.element;
import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.FullyQualifiedElement;
import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.NamedElement; import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.packet.XmlEnvironment;
import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.Objects;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
@ -109,8 +107,8 @@ public class MoodElement implements ExtensionElement {
} }
@Override @Override
public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment); XmlStringBuilder xml = new XmlStringBuilder(this);
if (mood == null && text == null) { if (mood == null && text == null) {
// Empty mood element used as STOP signal // Empty mood element used as STOP signal
@ -154,7 +152,7 @@ public class MoodElement implements ExtensionElement {
* {@link NamedElement} which represents the mood. * {@link NamedElement} which represents the mood.
* This element has the element name of the mood selected from {@link Mood}. * This element has the element name of the mood selected from {@link Mood}.
*/ */
public static class MoodSubjectElement implements FullyQualifiedElement { public static class MoodSubjectElement implements NamedElement {
private final Mood mood; private final Mood mood;
private final MoodConcretisation concretisation; private final MoodConcretisation concretisation;
@ -170,17 +168,16 @@ public class MoodElement implements ExtensionElement {
} }
@Override @Override
public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment); XmlStringBuilder xml = new XmlStringBuilder();
if (concretisation == null) { if (concretisation == null) {
return xml.closeEmptyElement(); return xml.emptyElement(getElementName());
} }
xml.rightAngleBracket() return xml.openElement(getElementName())
.append(concretisation) .append(concretisation.toXML())
.closeElement(this); .closeElement(getElementName());
return xml;
} }
/** /**
@ -200,10 +197,5 @@ public class MoodElement implements ExtensionElement {
public MoodConcretisation getConcretisation() { public MoodConcretisation getConcretisation() {
return concretisation; return concretisation;
} }
@Override
public String getNamespace() {
return NAMESPACE;
}
} }
} }

View file

@ -323,7 +323,7 @@ public class MUCUser implements ExtensionElement {
* *
* @author Gaston Dombiak * @author Gaston Dombiak
*/ */
public static class Decline implements ExtensionElement { public static class Decline implements NamedElement {
public static final String ELEMENT = "decline"; public static final String ELEMENT = "decline";
private final String reason; private final String reason;
@ -370,7 +370,7 @@ public class MUCUser implements ExtensionElement {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder xml = new XmlStringBuilder(this);
xml.optAttribute("to", getTo()); xml.optAttribute("to", getTo());
xml.optAttribute("from", getFrom()); xml.optAttribute("from", getFrom());
xml.rightAngleBracket(); xml.rightAngleBracket();
@ -383,11 +383,6 @@ public class MUCUser implements ExtensionElement {
public String getElementName() { public String getElementName() {
return ELEMENT; return ELEMENT;
} }
@Override
public String getNamespace() {
return NAMESPACE;
}
} }
/** /**

View file

@ -417,7 +417,7 @@ public final class FormField implements FullyQualifiedElement {
} else { } else {
buf.rightAngleBracket(); buf.rightAngleBracket();
buf.append(formFieldChildElements); buf.append(formFieldChildElements, enclosingNamespace);
buf.closeElement(this); buf.closeElement(this);
} }

View file

@ -325,10 +325,15 @@ public class DataForm implements ExtensionElement {
@Override @Override
public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) {
XmlStringBuilder buf = new XmlStringBuilder(this, xmlEnvironment); XmlStringBuilder buf = new XmlStringBuilder(this);
buf.attribute("type", getType()); buf.attribute("type", getType());
buf.rightAngleBracket(); buf.rightAngleBracket();
XmlEnvironment dataFormxmlEnvironment = XmlEnvironment.builder()
.withNamespace(NAMESPACE)
.withNext(xmlEnvironment)
.build();
buf.optElement("title", getTitle()); buf.optElement("title", getTitle());
for (String instruction : getInstructions()) { for (String instruction : getInstructions()) {
buf.element("instructions", instruction); buf.element("instructions", instruction);
@ -342,7 +347,7 @@ public class DataForm implements ExtensionElement {
buf.append(item.toXML()); buf.append(item.toXML());
} }
// Add all form fields. // Add all form fields.
buf.append(getFields()); buf.append(getFields(), dataFormxmlEnvironment);
for (Element element : extensionElements) { for (Element element : extensionElements) {
buf.append(element.toXML()); buf.append(element.toXML());
} }

View file

@ -1,6 +1,6 @@
/** /**
* *
* Copyright 2014 Anno van Vliet, 2019 Florian Schmaus * Copyright 2014 Anno van Vliet
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.ExtensionElement;
import org.jivesoftware.smack.packet.NamedElement;
import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.XmlStringBuilder;
/** /**
@ -95,14 +96,24 @@ public class DataLayout implements ExtensionElement {
buf.optAttribute("label", getLabel()); buf.optAttribute("label", getLabel());
buf.rightAngleBracket(); buf.rightAngleBracket();
buf.append(getPageLayout()); walkList(buf, getPageLayout());
buf.closeElement(this); buf.closeElement(this);
return buf; return buf;
} }
public static class Fieldref extends DataFormLayoutElement{ /**
* @param buf TODO javadoc me please
* @param pageLayout TODO javadoc me please
*/
private static void walkList(XmlStringBuilder buf, List<DataFormLayoutElement> pageLayout) {
for (DataFormLayoutElement object : pageLayout) {
buf.append(object.toXML());
}
}
public static class Fieldref implements DataFormLayoutElement{
public static final String ELEMENT = "fieldref"; public static final String ELEMENT = "fieldref";
private final String var; private final String var;
@ -117,7 +128,7 @@ public class DataLayout implements ExtensionElement {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder buf = new XmlStringBuilder(this);
buf.attribute("var", getVar()); buf.attribute("var", getVar());
buf.closeEmptyElement(); buf.closeEmptyElement();
return buf; return buf;
@ -139,7 +150,7 @@ public class DataLayout implements ExtensionElement {
} }
public static class Section extends DataFormLayoutElement{ public static class Section implements DataFormLayoutElement{
public static final String ELEMENT = "section"; public static final String ELEMENT = "section";
private final List<DataFormLayoutElement> sectionLayout = new ArrayList<>(); private final List<DataFormLayoutElement> sectionLayout = new ArrayList<>();
@ -177,12 +188,11 @@ public class DataLayout implements ExtensionElement {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder buf = new XmlStringBuilder(this);
buf.optAttribute("label", getLabel()); buf.optAttribute("label", getLabel());
buf.rightAngleBracket(); buf.rightAngleBracket();
buf.append(getSectionLayout()); walkList(buf, getSectionLayout());
buf.closeElement(ELEMENT); buf.closeElement(ELEMENT);
return buf; return buf;
} }
@ -203,13 +213,13 @@ public class DataLayout implements ExtensionElement {
} }
public static class Reportedref extends DataFormLayoutElement{ public static class Reportedref implements DataFormLayoutElement{
public static final String ELEMENT = "reportedref"; public static final String ELEMENT = "reportedref";
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder buf = new XmlStringBuilder(this);
buf.closeEmptyElement(); buf.closeEmptyElement();
return buf; return buf;
} }
@ -221,7 +231,7 @@ public class DataLayout implements ExtensionElement {
} }
public static class Text extends DataFormLayoutElement{ public static class Text implements DataFormLayoutElement{
public static final String ELEMENT = "text"; public static final String ELEMENT = "text";
private final String text; private final String text;
@ -235,10 +245,8 @@ public class DataLayout implements ExtensionElement {
@Override @Override
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) { public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
XmlStringBuilder buf = new XmlStringBuilder(this, enclosingNamespace); XmlStringBuilder buf = new XmlStringBuilder();
buf.rightAngleBracket(); buf.element(ELEMENT, getText());
buf.escape(getText());
buf.closeElement(this);
return buf; return buf;
} }
@ -258,11 +266,7 @@ public class DataLayout implements ExtensionElement {
} }
public abstract static class DataFormLayoutElement implements ExtensionElement { public interface DataFormLayoutElement extends NamedElement {
@Override
public final String getNamespace() {
return NAMESPACE;
}
} }
} }

Some files were not shown because too many files have changed in this diff Show more