mirror of
https://github.com/vanitasvitae/Smack.git
synced 2025-09-09 17:19:39 +02:00
Rework XML Element hierarchy and XmlStringBuilder
- Reduce the amount of types that are subtypes of NamedElement. See javadoc of NamedElement for rationale. - Work more with XmlEnvironment in XmlStringBuilder. - Some minor changes to XmlStringBuilder API.
This commit is contained in:
parent
e9bcdf3e6d
commit
65576cf3c2
74 changed files with 653 additions and 523 deletions
|
@ -16,6 +16,7 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.hoxt.packet;
|
||||
|
||||
import org.jivesoftware.smack.packet.ExtensionElement;
|
||||
import org.jivesoftware.smack.packet.IQ;
|
||||
import org.jivesoftware.smack.packet.NamedElement;
|
||||
import org.jivesoftware.smack.util.Objects;
|
||||
|
@ -145,12 +146,19 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
protected abstract B getThis();
|
||||
}
|
||||
|
||||
private abstract static class HoxExtensionElement implements ExtensionElement {
|
||||
@Override
|
||||
public final String getNamespace() {
|
||||
return NAMESPACE;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Representation of Data element.
|
||||
* <p>
|
||||
* This class is immutable.
|
||||
*/
|
||||
public static class Data implements NamedElement {
|
||||
public static class Data extends HoxExtensionElement {
|
||||
|
||||
public static final String ELEMENT = "data";
|
||||
|
||||
|
@ -172,9 +180,9 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
*/
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
xml.rightAngleBracket();
|
||||
xml.element(child);
|
||||
xml.append(child);
|
||||
xml.closeElement(this);
|
||||
return xml;
|
||||
}
|
||||
|
@ -199,7 +207,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
* <p>
|
||||
* This class is immutable.
|
||||
*/
|
||||
public static class Text implements NamedElement {
|
||||
public static class Text extends HoxExtensionElement {
|
||||
|
||||
public static final String ELEMENT = "text";
|
||||
|
||||
|
@ -216,7 +224,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
xml.rightAngleBracket();
|
||||
xml.optAppend(text);
|
||||
xml.closeElement(this);
|
||||
|
@ -243,7 +251,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
* <p>
|
||||
* This class is immutable.
|
||||
*/
|
||||
public static class Base64 implements NamedElement {
|
||||
public static class Base64 extends HoxExtensionElement {
|
||||
|
||||
public static final String ELEMENT = "base64";
|
||||
|
||||
|
@ -260,7 +268,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
xml.rightAngleBracket();
|
||||
xml.optAppend(text);
|
||||
xml.closeElement(this);
|
||||
|
@ -287,7 +295,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
* <p>
|
||||
* This class is immutable.
|
||||
*/
|
||||
public static class Xml implements NamedElement {
|
||||
public static class Xml extends HoxExtensionElement {
|
||||
|
||||
public static final String ELEMENT = "xml";
|
||||
|
||||
|
@ -304,7 +312,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
xml.rightAngleBracket();
|
||||
xml.optAppend(text);
|
||||
xml.closeElement(this);
|
||||
|
@ -331,7 +339,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
* <p>
|
||||
* This class is immutable.
|
||||
*/
|
||||
public static class ChunkedBase64 implements NamedElement {
|
||||
public static class ChunkedBase64 extends HoxExtensionElement {
|
||||
|
||||
public static final String ELEMENT = "chunkedBase64";
|
||||
|
||||
|
@ -348,7 +356,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
xml.attribute("streamId", streamId);
|
||||
xml.closeEmptyElement();
|
||||
return xml;
|
||||
|
@ -374,7 +382,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
* <p>
|
||||
* This class is immutable.
|
||||
*/
|
||||
public static class Ibb implements NamedElement {
|
||||
public static class Ibb extends HoxExtensionElement {
|
||||
|
||||
public static final String ELEMENT = "ibb";
|
||||
|
||||
|
@ -391,7 +399,7 @@ public abstract class AbstractHttpOverXmpp extends IQ {
|
|||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
xml.attribute("sid", sid);
|
||||
xml.closeEmptyElement();
|
||||
return xml;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright © 2016 Florian Schmaus
|
||||
* Copyright © 2016-2019 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -18,10 +18,10 @@ package org.jivesoftware.smackx.iot.control.element;
|
|||
|
||||
import java.util.Locale;
|
||||
|
||||
import org.jivesoftware.smack.packet.NamedElement;
|
||||
import org.jivesoftware.smack.packet.ExtensionElement;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
public abstract class SetData implements NamedElement {
|
||||
public abstract class SetData implements ExtensionElement {
|
||||
|
||||
public enum Type {
|
||||
BOOL,
|
||||
|
@ -76,6 +76,11 @@ public abstract class SetData implements NamedElement {
|
|||
return getType().toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String getNamespace() {
|
||||
return IoTSetRequest.NAMESPACE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the XML representation of this Element.
|
||||
*
|
||||
|
@ -83,7 +88,7 @@ public abstract class SetData implements NamedElement {
|
|||
*/
|
||||
@Override
|
||||
public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
xml.attribute("name", name);
|
||||
xml.attribute("value", value);
|
||||
xml.closeEmptyElement();
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2019 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jivesoftware.smackx.iot.data.element;
|
||||
|
||||
import org.jivesoftware.smack.packet.ExtensionElement;
|
||||
|
||||
public abstract class IoTDataExtensionElement implements ExtensionElement {
|
||||
|
||||
@Override
|
||||
public final String getNamespace() {
|
||||
return IoTFieldsExtension.NAMESPACE;
|
||||
}
|
||||
|
||||
}
|
|
@ -16,10 +16,9 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.iot.data.element;
|
||||
|
||||
import org.jivesoftware.smack.packet.NamedElement;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
public abstract class IoTDataField implements NamedElement {
|
||||
public abstract class IoTDataField extends IoTDataExtensionElement {
|
||||
|
||||
enum Type {
|
||||
integer("int"),
|
||||
|
@ -53,7 +52,7 @@ public abstract class IoTDataField implements NamedElement {
|
|||
|
||||
@Override
|
||||
public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
xml.attribute("name", name).attribute("value", getValueString());
|
||||
// TODO handle 'unit' attribute as special case if <numeric/> is implemented.
|
||||
xml.closeEmptyElement();
|
||||
|
|
|
@ -19,12 +19,10 @@ package org.jivesoftware.smackx.iot.data.element;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.jivesoftware.smack.packet.NamedElement;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
import org.jivesoftware.smackx.iot.element.NodeInfo;
|
||||
|
||||
public class NodeElement implements NamedElement {
|
||||
public class NodeElement extends IoTDataExtensionElement {
|
||||
|
||||
public static final String ELEMENT = "node";
|
||||
|
||||
|
@ -51,7 +49,7 @@ public class NodeElement implements NamedElement {
|
|||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
nodeInfo.appendTo(xml);
|
||||
xml.rightAngleBracket();
|
||||
|
||||
|
|
|
@ -20,10 +20,9 @@ import java.util.Collections;
|
|||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.jivesoftware.smack.packet.NamedElement;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
public class TimestampElement implements NamedElement {
|
||||
public class TimestampElement extends IoTDataExtensionElement {
|
||||
|
||||
public static final String ELEMENT = "timestamp";
|
||||
|
||||
|
@ -46,7 +45,7 @@ public class TimestampElement implements NamedElement {
|
|||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
xml.attribute("value", date);
|
||||
xml.rightAngleBracket();
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ public class Checksum implements ExtensionElement {
|
|||
sb.optAttribute(ATTR_CREATOR, creator);
|
||||
sb.optAttribute(ATTR_NAME, name);
|
||||
sb.rightAngleBracket();
|
||||
sb.element(file);
|
||||
sb.append(file);
|
||||
sb.closeElement(this);
|
||||
return sb;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/**
|
||||
*
|
||||
* Copyright 2017 Paul Schaub
|
||||
* Copyright 2017 Paul Schaub, 2019 Florian Schmaus
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -19,6 +19,7 @@ package org.jivesoftware.smackx.jingle_filetransfer.element;
|
|||
import java.io.File;
|
||||
import java.util.Date;
|
||||
|
||||
import org.jivesoftware.smack.packet.XmlEnvironment;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
import org.jivesoftware.smackx.hashes.element.HashElement;
|
||||
|
@ -27,8 +28,10 @@ import org.jivesoftware.smackx.jingle.element.JingleContentDescriptionChildEleme
|
|||
/**
|
||||
* Content of type File.
|
||||
*/
|
||||
public class JingleFileTransferChild extends JingleContentDescriptionChildElement {
|
||||
public class JingleFileTransferChild implements JingleContentDescriptionChildElement {
|
||||
public static final String ELEMENT = "file";
|
||||
public static final String NAMESPACE = JingleFileTransfer.NAMESPACE_V5;
|
||||
|
||||
public static final String ELEM_DATE = "date";
|
||||
public static final String ELEM_DESC = "desc";
|
||||
public static final String ELEM_MEDIA_TYPE = "media-type";
|
||||
|
@ -87,8 +90,13 @@ public class JingleFileTransferChild extends JingleContentDescriptionChildElemen
|
|||
}
|
||||
|
||||
@Override
|
||||
public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder sb = new XmlStringBuilder(this);
|
||||
public String getNamespace() {
|
||||
return NAMESPACE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder sb = new XmlStringBuilder(this, enclosingNamespace);
|
||||
sb.rightAngleBracket();
|
||||
|
||||
sb.optElement(ELEM_DATE, date);
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.jingle_filetransfer.element;
|
||||
|
||||
import org.jivesoftware.smack.packet.NamedElement;
|
||||
import org.jivesoftware.smack.packet.FullyQualifiedElement;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
import org.jivesoftware.smackx.hashes.element.HashElement;
|
||||
|
@ -24,9 +24,11 @@ import org.jivesoftware.smackx.hashes.element.HashElement;
|
|||
/**
|
||||
* RangeElement which specifies, which range of a file shall be transferred.
|
||||
*/
|
||||
public class Range implements NamedElement {
|
||||
public class Range implements FullyQualifiedElement {
|
||||
|
||||
public static final String ELEMENT = "range";
|
||||
public static final String NAMESPACE = JingleFileTransferChild.NAMESPACE;
|
||||
|
||||
public static final String ATTR_OFFSET = "offset";
|
||||
public static final String ATTR_LENGTH = "length";
|
||||
|
||||
|
@ -99,6 +101,11 @@ public class Range implements NamedElement {
|
|||
return ELEMENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getNamespace() {
|
||||
return NAMESPACE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder sb = new XmlStringBuilder(this);
|
||||
|
@ -108,7 +115,7 @@ public class Range implements NamedElement {
|
|||
|
||||
if (hash != null) {
|
||||
sb.rightAngleBracket();
|
||||
sb.element(hash);
|
||||
sb.append(hash);
|
||||
sb.closeElement(this);
|
||||
} else {
|
||||
sb.closeEmptyElement();
|
||||
|
|
|
@ -126,15 +126,14 @@ public class MamElements {
|
|||
}
|
||||
|
||||
@Override
|
||||
public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(this);
|
||||
xml.xmlnsAttribute(NAMESPACE);
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
|
||||
xml.optAttribute("queryid", getQueryId());
|
||||
xml.optAttribute("id", getId());
|
||||
xml.rightAngleBracket();
|
||||
|
||||
xml.element(getForwarded());
|
||||
xml.append(getForwarded());
|
||||
|
||||
xml.closeElement(this);
|
||||
return xml;
|
||||
|
|
|
@ -124,7 +124,7 @@ public class MamFinIQ extends IQ {
|
|||
xml.setEmptyElement();
|
||||
} else {
|
||||
xml.rightAngleBracket();
|
||||
xml.element(rsmSet);
|
||||
xml.append(rsmSet);
|
||||
}
|
||||
return xml;
|
||||
}
|
||||
|
|
|
@ -134,12 +134,12 @@ public class MamPrefsIQ extends IQ {
|
|||
|
||||
if (alwaysJids != null) {
|
||||
MamElements.AlwaysJidListElement alwaysElement = new AlwaysJidListElement(alwaysJids);
|
||||
xml.element(alwaysElement);
|
||||
xml.append(alwaysElement);
|
||||
}
|
||||
|
||||
if (neverJids != null) {
|
||||
MamElements.NeverJidListElement neverElement = new NeverJidListElement(neverJids);
|
||||
xml.element(neverElement);
|
||||
xml.append(neverElement);
|
||||
}
|
||||
|
||||
return xml;
|
||||
|
|
|
@ -16,14 +16,10 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.message_markup.element;
|
||||
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
public class BlockQuoteElement implements MarkupElement.BlockLevelMarkupElement {
|
||||
public class BlockQuoteElement extends MarkupElement.BlockLevelMarkupElement {
|
||||
|
||||
public static final String ELEMENT = "bquote";
|
||||
|
||||
private final int start, end;
|
||||
|
||||
/**
|
||||
* Create a new Block Quote element.
|
||||
*
|
||||
|
@ -31,18 +27,7 @@ public class BlockQuoteElement implements MarkupElement.BlockLevelMarkupElement
|
|||
* @param end end index
|
||||
*/
|
||||
public BlockQuoteElement(int start, int end) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnd() {
|
||||
return end;
|
||||
super(start, end);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -50,13 +35,4 @@ public class BlockQuoteElement implements MarkupElement.BlockLevelMarkupElement
|
|||
return ELEMENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(this);
|
||||
xml.attribute(ATTR_START, getStart());
|
||||
xml.attribute(ATTR_END, getEnd());
|
||||
xml.closeEmptyElement();
|
||||
return xml;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,14 +16,10 @@
|
|||
*/
|
||||
package org.jivesoftware.smackx.message_markup.element;
|
||||
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
public class CodeBlockElement implements MarkupElement.BlockLevelMarkupElement {
|
||||
public class CodeBlockElement extends MarkupElement.BlockLevelMarkupElement {
|
||||
|
||||
public static final String ELEMENT = "bcode";
|
||||
|
||||
private final int start, end;
|
||||
|
||||
/**
|
||||
* Create a new Code Block element.
|
||||
*
|
||||
|
@ -31,18 +27,7 @@ public class CodeBlockElement implements MarkupElement.BlockLevelMarkupElement {
|
|||
* @param end end index
|
||||
*/
|
||||
public CodeBlockElement(int start, int end) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnd() {
|
||||
return end;
|
||||
super(start, end);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -50,13 +35,4 @@ public class CodeBlockElement implements MarkupElement.BlockLevelMarkupElement {
|
|||
return ELEMENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(this);
|
||||
xml.attribute(ATTR_START, getStart());
|
||||
xml.attribute(ATTR_END, getEnd());
|
||||
xml.closeEmptyElement();
|
||||
return xml;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,15 +19,14 @@ package org.jivesoftware.smackx.message_markup.element;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.jivesoftware.smack.packet.NamedElement;
|
||||
import org.jivesoftware.smack.packet.ExtensionElement;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
public class ListElement implements MarkupElement.MarkupChildElement {
|
||||
public class ListElement extends MarkupElement.NonEmptyChildElement {
|
||||
|
||||
public static final String ELEMENT = "list";
|
||||
public static final String ELEM_LI = "li";
|
||||
|
||||
private final int start, end;
|
||||
private final List<ListEntryElement> entries;
|
||||
|
||||
/**
|
||||
|
@ -38,21 +37,10 @@ public class ListElement implements MarkupElement.MarkupChildElement {
|
|||
* @param entries list entries
|
||||
*/
|
||||
public ListElement(int start, int end, List<ListEntryElement> entries) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
super(start, end);
|
||||
this.entries = Collections.unmodifiableList(entries);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnd() {
|
||||
return end;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of all list entries.
|
||||
*
|
||||
|
@ -68,22 +56,11 @@ public class ListElement implements MarkupElement.MarkupChildElement {
|
|||
}
|
||||
|
||||
@Override
|
||||
public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(this);
|
||||
xml.attribute(ATTR_START, getStart());
|
||||
xml.attribute(ATTR_END, getEnd());
|
||||
xml.rightAngleBracket();
|
||||
|
||||
for (ListEntryElement li : getEntries()) {
|
||||
xml.append(li.toXML());
|
||||
}
|
||||
|
||||
xml.closeElement(this);
|
||||
return xml;
|
||||
public void appendInnerXml(XmlStringBuilder xml) {
|
||||
xml.append(getEntries());
|
||||
}
|
||||
|
||||
public static class ListEntryElement implements NamedElement {
|
||||
public static class ListEntryElement implements ExtensionElement {
|
||||
|
||||
private final int start;
|
||||
|
||||
|
@ -109,11 +86,15 @@ public class ListElement implements MarkupElement.MarkupChildElement {
|
|||
return ELEM_LI;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getNamespace() {
|
||||
return MarkupElement.NAMESPACE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(this);
|
||||
xml.attribute(ATTR_START, getStart());
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
xml.attribute(MarkupElement.MarkupChildElement.ATTR_START, getStart());
|
||||
xml.closeEmptyElement();
|
||||
return xml;
|
||||
}
|
||||
|
|
|
@ -22,7 +22,6 @@ import java.util.List;
|
|||
import java.util.Set;
|
||||
|
||||
import org.jivesoftware.smack.packet.ExtensionElement;
|
||||
import org.jivesoftware.smack.packet.NamedElement;
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
public class MarkupElement implements ExtensionElement {
|
||||
|
@ -267,46 +266,89 @@ public class MarkupElement implements ExtensionElement {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Interface for child elements.
|
||||
*/
|
||||
public interface MarkupChildElement extends NamedElement {
|
||||
public abstract static class MarkupChildElement implements ExtensionElement {
|
||||
|
||||
String ATTR_START = "start";
|
||||
String ATTR_END = "end";
|
||||
public static final String ATTR_START = "start";
|
||||
public static final String ATTR_END = "end";
|
||||
|
||||
private final int start, end;
|
||||
|
||||
protected MarkupChildElement(int start, int end) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the start index of this element.
|
||||
*
|
||||
* @return start index
|
||||
*/
|
||||
int getStart();
|
||||
public final int getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the end index of this element.
|
||||
*
|
||||
* @return end index
|
||||
*/
|
||||
int getEnd();
|
||||
public final int getEnd() {
|
||||
return end;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String getNamespace() {
|
||||
return NAMESPACE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
xml.attribute(ATTR_START, getStart());
|
||||
xml.attribute(ATTR_END, getEnd());
|
||||
|
||||
afterXmlPrelude(xml);
|
||||
return xml;
|
||||
}
|
||||
|
||||
protected abstract void afterXmlPrelude(XmlStringBuilder xml);
|
||||
}
|
||||
|
||||
public abstract static class NonEmptyChildElement extends MarkupChildElement {
|
||||
|
||||
protected NonEmptyChildElement(int start, int end) {
|
||||
super(start, end);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void afterXmlPrelude(XmlStringBuilder xml) {
|
||||
xml.rightAngleBracket();
|
||||
|
||||
appendInnerXml(xml);
|
||||
|
||||
xml.closeElement(this);
|
||||
}
|
||||
|
||||
protected abstract void appendInnerXml(XmlStringBuilder xml);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface for block level child elements.
|
||||
*/
|
||||
public interface BlockLevelMarkupElement extends MarkupChildElement {
|
||||
public abstract static class BlockLevelMarkupElement extends MarkupChildElement {
|
||||
|
||||
protected BlockLevelMarkupElement(int start, int end) {
|
||||
super(start, end);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final void afterXmlPrelude(XmlStringBuilder xml) {
|
||||
xml.closeEmptyElement();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,11 +21,10 @@ import java.util.Set;
|
|||
|
||||
import org.jivesoftware.smack.util.XmlStringBuilder;
|
||||
|
||||
public class SpanElement implements MarkupElement.MarkupChildElement {
|
||||
public class SpanElement extends MarkupElement.NonEmptyChildElement {
|
||||
|
||||
public static final String ELEMENT = "span";
|
||||
|
||||
private final int start, end;
|
||||
private final Set<SpanStyle> styles;
|
||||
|
||||
/**
|
||||
|
@ -36,21 +35,10 @@ public class SpanElement implements MarkupElement.MarkupChildElement {
|
|||
* @param styles list of styles that apply to this span
|
||||
*/
|
||||
public SpanElement(int start, int end, Set<SpanStyle> styles) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
super(start, end);
|
||||
this.styles = Collections.unmodifiableSet(styles);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getStart() {
|
||||
return start;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnd() {
|
||||
return end;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return all styles of this span.
|
||||
*
|
||||
|
@ -76,18 +64,9 @@ public class SpanElement implements MarkupElement.MarkupChildElement {
|
|||
}
|
||||
|
||||
@Override
|
||||
public XmlStringBuilder toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder();
|
||||
xml.halfOpenElement(this);
|
||||
xml.attribute(ATTR_START, getStart());
|
||||
xml.attribute(ATTR_END, getEnd());
|
||||
xml.rightAngleBracket();
|
||||
|
||||
protected void appendInnerXml(XmlStringBuilder xml) {
|
||||
for (SpanStyle style : getStyles()) {
|
||||
xml.halfOpenElement(style.toString()).closeEmptyElement();
|
||||
xml.emptyElement(style);
|
||||
}
|
||||
|
||||
xml.closeElement(this);
|
||||
return xml;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -62,7 +62,7 @@ public class MUCLightAffiliationsIQ extends IQ {
|
|||
Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = affiliations.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<Jid, MUCLightAffiliation> pair = it.next();
|
||||
xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
|
||||
xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
|
||||
}
|
||||
|
||||
return xml;
|
||||
|
|
|
@ -90,7 +90,7 @@ public class MUCLightBlockingIQ extends IQ {
|
|||
Iterator<Map.Entry<Jid, Boolean>> it = map.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<Jid, Boolean> pair = it.next();
|
||||
xml.element(new BlockingElement(pair.getKey(), pair.getValue(), isRoom));
|
||||
xml.append(new BlockingElement(pair.getKey(), pair.getValue(), isRoom));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ public class MUCLightChangeAffiliationsIQ extends IQ {
|
|||
Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = affiliations.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<Jid, MUCLightAffiliation> pair = it.next();
|
||||
xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
|
||||
xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ public class MUCLightConfigurationIQ extends IQ {
|
|||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.rightAngleBracket();
|
||||
xml.optElement("version", version);
|
||||
xml.element(new ConfigurationElement(configuration));
|
||||
xml.append(new ConfigurationElement(configuration));
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -99,10 +99,10 @@ public class MUCLightCreateIQ extends IQ {
|
|||
@Override
|
||||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.rightAngleBracket();
|
||||
xml.element(new ConfigurationElement(configuration));
|
||||
xml.append(new ConfigurationElement(configuration));
|
||||
|
||||
if (!occupants.isEmpty()) {
|
||||
xml.element(new OccupantsElement(occupants));
|
||||
xml.append(new OccupantsElement(occupants));
|
||||
}
|
||||
|
||||
return xml;
|
||||
|
|
|
@ -104,7 +104,7 @@ public abstract class MUCLightElements {
|
|||
Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = affiliations.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<Jid, MUCLightAffiliation> pair = it.next();
|
||||
xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
|
||||
xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
|
||||
}
|
||||
|
||||
xml.closeElement(this);
|
||||
|
@ -303,7 +303,7 @@ public abstract class MUCLightElements {
|
|||
Iterator<Map.Entry<Jid, MUCLightAffiliation>> it = occupants.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<Jid, MUCLightAffiliation> pair = it.next();
|
||||
xml.element(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
|
||||
xml.append(new UserWithAffiliationElement(pair.getKey(), pair.getValue()));
|
||||
}
|
||||
|
||||
xml.closeElement("occupants");
|
||||
|
|
|
@ -62,8 +62,8 @@ public class MUCLightInfoIQ extends IQ {
|
|||
protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
|
||||
xml.rightAngleBracket();
|
||||
xml.optElement("version", version);
|
||||
xml.element(new ConfigurationElement(configuration));
|
||||
xml.element(new OccupantsElement(occupants));
|
||||
xml.append(new ConfigurationElement(configuration));
|
||||
xml.append(new OccupantsElement(occupants));
|
||||
return xml;
|
||||
}
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ public class EnablePushNotificationsIQ extends IQ {
|
|||
dataForm.addField(field.build());
|
||||
}
|
||||
|
||||
xml.element(dataForm);
|
||||
xml.append(dataForm);
|
||||
}
|
||||
|
||||
return xml;
|
||||
|
|
|
@ -131,12 +131,7 @@ public class SpoilerElement implements ExtensionElement {
|
|||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the language of the hint.
|
||||
* May be null.
|
||||
*
|
||||
* @return language of hint text
|
||||
*/
|
||||
@Override
|
||||
public String getLanguage() {
|
||||
return language;
|
||||
}
|
||||
|
@ -153,8 +148,7 @@ public class SpoilerElement implements ExtensionElement {
|
|||
|
||||
@Override
|
||||
public CharSequence toXML(org.jivesoftware.smack.packet.XmlEnvironment enclosingNamespace) {
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this);
|
||||
xml.optXmlLangAttribute(getLanguage());
|
||||
XmlStringBuilder xml = new XmlStringBuilder(this, enclosingNamespace);
|
||||
if (getHint() == null) {
|
||||
xml.closeEmptyElement();
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue