117 lines
3.8 KiB
Java
117 lines
3.8 KiB
Java
package org.atriasoft.exml.serializer;
|
|
|
|
import java.util.List;
|
|
|
|
import org.atriasoft.exml.internal.Log;
|
|
import org.atriasoft.exml.model.XmlAttribute;
|
|
import org.atriasoft.exml.model.XmlAttributeList;
|
|
import org.atriasoft.exml.model.XmlComment;
|
|
import org.atriasoft.exml.model.XmlDeclaration;
|
|
import org.atriasoft.exml.model.XmlElement;
|
|
import org.atriasoft.exml.model.XmlNode;
|
|
import org.atriasoft.exml.model.XmlNodeType;
|
|
import org.atriasoft.exml.model.XmlText;
|
|
import org.atriasoft.exml.parser.Tools;
|
|
|
|
public class SerializerXml {
|
|
public static void serialize(final XmlNode node, final StringBuilder data, final int indent) {
|
|
if (node instanceof XmlElement) {
|
|
SerializerXml.serializeElement((XmlElement) node, data, indent);
|
|
} else if (node instanceof XmlText) {
|
|
SerializerXml.serializeText((XmlText) node, data, indent);
|
|
} else if (node instanceof XmlDeclaration) {
|
|
SerializerXml.serializeDeclaration((XmlDeclaration) node, data, indent);
|
|
} else if (node instanceof XmlComment) {
|
|
SerializerXml.serializeComment((XmlComment) node, data, indent);
|
|
} else {
|
|
// TODO throw an error ...
|
|
}
|
|
}
|
|
|
|
private static void serializeAttribute(final XmlAttribute attribute, final StringBuilder data, final int indent) {
|
|
data.append(" ");
|
|
data.append(attribute.getName());
|
|
data.append("=\"");
|
|
data.append(attribute.getValue());
|
|
data.append("\"");
|
|
}
|
|
|
|
private static void serializeAttributeList(final XmlAttributeList list, final StringBuilder data, final int indent) {
|
|
for (int iii = 0; iii < list.getAttributes().size(); iii++) {
|
|
SerializerXml.serializeAttribute(list.getAttributes().get(iii), data, indent);
|
|
}
|
|
}
|
|
|
|
private static void serializeComment(final XmlComment comment, final StringBuilder data, final int indent) {
|
|
Tools.addIndent(data, indent);
|
|
data.append("<!--");
|
|
String commentData = comment.getValue();
|
|
if (commentData != null) {
|
|
data.append(comment.getValue());
|
|
}
|
|
data.append("-->");
|
|
}
|
|
|
|
private static void serializeDeclaration(final XmlDeclaration declaration, final StringBuilder data, final int indent) {
|
|
Tools.addIndent(data, indent);
|
|
data.append("<?");
|
|
data.append(declaration.getValue());
|
|
SerializerXml.serializeAttributeList(declaration, data, indent);
|
|
data.append("?>");
|
|
|
|
}
|
|
|
|
private static void serializeElement(final XmlElement element, final StringBuilder data, final int indent) {
|
|
|
|
Tools.addIndent(data, indent);
|
|
data.append("<");
|
|
data.append(element.getValue());
|
|
SerializerXml.serializeAttributeList(element, data, indent);
|
|
|
|
final List<XmlNode> nodes = element.getNodes();
|
|
if (nodes.size() > 0) {
|
|
if (nodes.size() == 1 && nodes.get(0) != null && nodes.get(0).getType() == XmlNodeType.TEXT && ((XmlText) nodes.get(0)).countLines() == 1) {
|
|
data.append(">");
|
|
SerializerXml.serialize(nodes.get(0), data, 0);
|
|
Log.verbose(" generate : '" + data + "'");
|
|
} else {
|
|
data.append(">");
|
|
for (XmlNode node : nodes) {
|
|
if (node != null) {
|
|
SerializerXml.serialize(node, data, indent + 1);
|
|
}
|
|
}
|
|
Tools.addIndent(data, indent);
|
|
}
|
|
data.append("</");
|
|
data.append(element.getValue());
|
|
data.append(">");
|
|
} else {
|
|
data.append("/>");
|
|
}
|
|
}
|
|
|
|
public static void serializeRoot(final XmlElement root, final StringBuilder data) {
|
|
for (int iii = 0; iii < root.getNodes().size(); iii++) {
|
|
final XmlNode node = root.getNodes().get(iii);
|
|
SerializerXml.serialize(node, data, 0);
|
|
}
|
|
|
|
}
|
|
|
|
private static void serializeText(final XmlText text, final StringBuilder data, final int indent) {
|
|
data.append(Tools.replaceSpecialCharOut(text.getValue()));
|
|
}
|
|
/* CDATA generation ... maybe to add later ...
|
|
@Override
|
|
protected boolean iGenerate(final StringBuilder _data, final int _indent) {
|
|
_data.append("<![CDATA[");
|
|
_data.append(this.value);
|
|
_data.append("]]>");
|
|
return true;
|
|
}
|
|
*/
|
|
|
|
private SerializerXml() {}
|
|
}
|