From 01289e96829ffb034e3dff45c0a77e7617945e7a Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Wed, 12 Jun 2019 22:32:24 +0200 Subject: [PATCH] Add support for XEP-0315: Data Forms XML Element Fixes SMACK-872. --- documentation/extensions/index.md | 1 + .../DataFormsXmlElementManager.java | 28 +++++++ .../element/DataFormsXmlElement.java | 74 +++++++++++++++++++ .../xmlelement/element/package-info.java | 21 ++++++ .../smackx/xmlelement/package-info.java | 21 ++++++ .../provider/DataFormsXmlElementProvider.java | 54 ++++++++++++++ .../xmlelement/provider/package-info.java | 21 ++++++ .../experimental.xml | 1 + 8 files changed, 221 insertions(+) create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/DataFormsXmlElementManager.java create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/element/DataFormsXmlElement.java create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/element/package-info.java create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/package-info.java create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/provider/DataFormsXmlElementProvider.java create mode 100644 smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/provider/package-info.java diff --git a/documentation/extensions/index.md b/documentation/extensions/index.md index 527c0dd10..184026eab 100644 --- a/documentation/extensions/index.md +++ b/documentation/extensions/index.md @@ -86,6 +86,7 @@ Experimental Smack Extensions and currently supported XEPs of smack-experimental |-----------------------------------------------------------|--------------------------------------------------------|-----------|-------------------------------------------------------------------------------------------------------------------------| | Message Carbons | [XEP-0280](https://xmpp.org/extensions/xep-0280.html) | n/a | Keep all IM clients for a user engaged in a conversation, by carbon-copy outbound messages to all interested resources. | | [Message Archive Management](mam.md) | [XEP-0313](https://xmpp.org/extensions/xep-0313.html) | n/a | Query and control an archive of messages stored on a server. | +| Data Forms XML Element | [XEP-0315](https://xmpp.org/extensions/xep-0315.html) | n/a | Allows to include XML-data in XEP-0004 data forms. | | [Internet of Things - Sensor Data](iot.md) | [XEP-0323](https://xmpp.org/extensions/xep-0323.html) | n/a | Sensor data interchange over XMPP. | | [Internet of Things - Provisioning](iot.md) | [XEP-0324](https://xmpp.org/extensions/xep-0324.html) | n/a | Provisioning, access rights and user privileges for the Internet of Things. | | [Internet of Things - Control](iot.md) | [XEP-0325](https://xmpp.org/extensions/xep-0325.html) | n/a | Describes how to control devices or actuators in an XMPP-based sensor network. | diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/DataFormsXmlElementManager.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/DataFormsXmlElementManager.java new file mode 100644 index 000000000..35f9e0c43 --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/DataFormsXmlElementManager.java @@ -0,0 +1,28 @@ +/** + * + * Copyright 2019 Florian Schmaus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jivesoftware.smackx.xmlelement; + +import org.jivesoftware.smackx.xdata.provider.FormFieldChildElementProviderManager; +import org.jivesoftware.smackx.xmlelement.provider.DataFormsXmlElementProvider; + +public class DataFormsXmlElementManager { + + static { + FormFieldChildElementProviderManager.addFormFieldChildElementProvider(new DataFormsXmlElementProvider()); + } + +} diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/element/DataFormsXmlElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/element/DataFormsXmlElement.java new file mode 100644 index 000000000..a23296e9c --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/element/DataFormsXmlElement.java @@ -0,0 +1,74 @@ +/** + * + * 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.xmlelement.element; + +import javax.xml.namespace.QName; + +import org.jivesoftware.smack.packet.StandardExtensionElement; +import org.jivesoftware.smack.packet.XmlEnvironment; +import org.jivesoftware.smack.util.XmlStringBuilder; +import org.jivesoftware.smackx.xdata.FormField; +import org.jivesoftware.smackx.xdata.FormFieldChildElement; + +public class DataFormsXmlElement implements FormFieldChildElement { + + public static final String ELEMENT = "wrapper"; + + public static final String NAMESPACE = "urn:xmpp:xml-element"; + + public static final QName QNAME = new QName(NAMESPACE, ELEMENT); + + private final StandardExtensionElement payload; + + public DataFormsXmlElement(StandardExtensionElement payload) { + this.payload = payload; + } + + @Override + public QName getQName() { + return QNAME; + } + + @Override + public String getElementName() { + return ELEMENT; + } + + @Override + public String getNamespace() { + return NAMESPACE; + } + + @Override + public XmlStringBuilder toXML(XmlEnvironment xmlEnvironment) { + XmlStringBuilder xml = new XmlStringBuilder(this, xmlEnvironment); + if (payload == null) { + return xml.closeEmptyElement(); + } + + xml.rightAngleBracket(); + + xml.append(payload.toXML()); + + xml.closeElement(this); + return xml; + } + + public static DataFormsXmlElement from(FormField formField) { + return (DataFormsXmlElement) formField.getFormFieldChildElement(QNAME); + } +} diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/element/package-info.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/element/package-info.java new file mode 100644 index 000000000..f053e6f17 --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/element/package-info.java @@ -0,0 +1,21 @@ +/** + * + * Copyright 2019 Florian Schmaus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Element classes for XEP-0315: Data Forms XML Element. + */ +package org.jivesoftware.smackx.xmlelement.element; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/package-info.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/package-info.java new file mode 100644 index 000000000..0dcf542d5 --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/package-info.java @@ -0,0 +1,21 @@ +/** + * + * Copyright 2019 Florian Schmaus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Smacks implementation of XEP-0315: Data Forms XML Element. + */ +package org.jivesoftware.smackx.xmlelement; diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/provider/DataFormsXmlElementProvider.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/provider/DataFormsXmlElementProvider.java new file mode 100644 index 000000000..4de486db2 --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/provider/DataFormsXmlElementProvider.java @@ -0,0 +1,54 @@ +/** + * + * 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.xmlelement.provider; + +import java.io.IOException; + +import javax.xml.namespace.QName; + +import org.jivesoftware.smack.packet.StandardExtensionElement; +import org.jivesoftware.smack.packet.XmlEnvironment; +import org.jivesoftware.smack.parsing.SmackParsingException; +import org.jivesoftware.smack.parsing.StandardExtensionElementProvider; +import org.jivesoftware.smack.xml.XmlPullParser; +import org.jivesoftware.smack.xml.XmlPullParserException; +import org.jivesoftware.smackx.xdata.provider.FormFieldChildElementProvider; +import org.jivesoftware.smackx.xmlelement.element.DataFormsXmlElement; + +public class DataFormsXmlElementProvider extends FormFieldChildElementProvider { + + @Override + public QName getQName() { + return DataFormsXmlElement.QNAME; + } + + @Override + public DataFormsXmlElement parse(XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment) + throws IOException, XmlPullParserException, SmackParsingException { + XmlPullParser.TagEvent tagEvent = parser.nextTag(); + + final StandardExtensionElement standardExtensionElement; + if (tagEvent == XmlPullParser.TagEvent.START_ELEMENT) { + standardExtensionElement = StandardExtensionElementProvider.INSTANCE.parse(parser); + } else { + standardExtensionElement = null; + } + + return new DataFormsXmlElement(standardExtensionElement); + } + +} diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/provider/package-info.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/provider/package-info.java new file mode 100644 index 000000000..a41a0ae11 --- /dev/null +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/xmlelement/provider/package-info.java @@ -0,0 +1,21 @@ +/** + * + * Copyright 2019 Florian Schmaus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Provider classes for XEP-0315: Data Forms XML Element. + */ +package org.jivesoftware.smackx.xmlelement.provider; diff --git a/smack-experimental/src/main/resources/org.jivesoftware.smack.experimental/experimental.xml b/smack-experimental/src/main/resources/org.jivesoftware.smack.experimental/experimental.xml index 8a73c804f..347a698f3 100644 --- a/smack-experimental/src/main/resources/org.jivesoftware.smack.experimental/experimental.xml +++ b/smack-experimental/src/main/resources/org.jivesoftware.smack.experimental/experimental.xml @@ -7,5 +7,6 @@ org.jivesoftware.smackx.httpfileupload.HttpFileUploadManager org.jivesoftware.smackx.eme.ExplicitMessageEncryptionManager org.jivesoftware.smackx.sid.StableUniqueStanzaIdManager + org.jivesoftware.smackx.xmlelement.DataFormsXmlElementManager