blob: 589d2e8c1dc34f376a1829f964214fedd3d8bfa4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
/*
* Copyright (c) 2010-2015, Isode Limited, London, England.
* 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;
throw new UnsupportedOperationException("No serializer for payload: " + payload.getClass().getSimpleName());
//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);
}
|