diff options
author | Kevin Smith <git@kismith.co.uk> | 2011-07-01 09:19:49 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2011-07-01 09:19:49 (GMT) |
commit | 2da71a8a85486a494343f1662d64fb5ae5a2a44e (patch) | |
tree | 23992f9f2a00bac23b345e5c2cc9c1194efc25be /src/com/isode/stroke/serializer/StanzaSerializer.java | |
download | stroke-2da71a8a85486a494343f1662d64fb5ae5a2a44e.zip stroke-2da71a8a85486a494343f1662d64fb5ae5a2a44e.tar.bz2 |
Initial import
Diffstat (limited to 'src/com/isode/stroke/serializer/StanzaSerializer.java')
-rw-r--r-- | src/com/isode/stroke/serializer/StanzaSerializer.java | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/com/isode/stroke/serializer/StanzaSerializer.java b/src/com/isode/stroke/serializer/StanzaSerializer.java new file mode 100644 index 0000000..950ccf7 --- /dev/null +++ b/src/com/isode/stroke/serializer/StanzaSerializer.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2010, Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2010, Remko Tron¨on. + * All rights reserved. + */ +package com.isode.stroke.serializer; + +import com.isode.stroke.elements.Element; +import com.isode.stroke.elements.Payload; +import com.isode.stroke.elements.Stanza; +import com.isode.stroke.serializer.xml.XMLElement; +import com.isode.stroke.serializer.xml.XMLRawTextNode; +import java.util.logging.Logger; + +public abstract class StanzaSerializer implements ElementSerializer { + + private final String tag_; + private final PayloadSerializerCollection payloadSerializers_; + private final Logger logger_ = Logger.getLogger(this.getClass().getName()); + + public StanzaSerializer(String tag, PayloadSerializerCollection payloadSerializers) { + payloadSerializers_ = payloadSerializers; + tag_ = tag; + } + + public String serialize(Element element) { + assert element != null; + assert payloadSerializers_ != null; + Stanza stanza = (Stanza) element; + XMLElement stanzaElement = new XMLElement(tag_); + if (stanza.getFrom() != null && stanza.getFrom().isValid()) { + stanzaElement.setAttribute("from", stanza.getFrom().toString()); + } + if (stanza.getTo() != null && stanza.getTo().isValid()) { + stanzaElement.setAttribute("to", stanza.getTo().toString()); + } + if (stanza.getID() != null && (stanza.getID().length()!=0)) { + stanzaElement.setAttribute("id", stanza.getID()); + } + setStanzaSpecificAttributes(stanza, stanzaElement); + + StringBuilder serializedPayloads = new StringBuilder(); + for (Payload payload : stanza.getPayloads()) { + PayloadSerializer serializer = payloadSerializers_.getPayloadSerializer(payload); + if (serializer != null) { + serializedPayloads.append(serializer.serialize(payload)); + } else { + /*TODO: port*/ + assert false; + //std::cerr << "Could not find serializer for " << typeid(*(payload.get())).name() << std::endl; + } + } + if (serializedPayloads.toString().length()!=0) { + stanzaElement.addNode(new XMLRawTextNode(serializedPayloads.toString())); + } + return stanzaElement.serialize(); + } + + public abstract void setStanzaSpecificAttributes(Element element, XMLElement xmlElement); +} |