summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2011-07-01 09:19:49 (GMT)
committerKevin Smith <git@kismith.co.uk>2011-07-01 09:19:49 (GMT)
commit2da71a8a85486a494343f1662d64fb5ae5a2a44e (patch)
tree23992f9f2a00bac23b345e5c2cc9c1194efc25be /src/com/isode/stroke/serializer/StanzaSerializer.java
downloadstroke-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.java63
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);
+}