package com.limegroup.gnutella.xml; import java.io.Serializable; import java.util.Map; import com.limegroup.gnutella.xml.LimeXMLDocumentHelper; import com.limegroup.gnutella.xml.LimeXMLSchema; import com.limegroup.gnutella.xml.LimeXMLUtils; import com.limegroup.gnutella.xml.XMLStringUtils; public class SerialXml implements Serializable { private static final long serialVersionUID = 7396170507085078485L; private Map<String, String> fieldToValue; private String schemaUri; private int version; public String getXml(boolean includeVersion) { if(fieldToValue != null && schemaUri != null && !fieldToValue.isEmpty()) { StringBuilder tag = new StringBuilder(100); tag.append(LimeXMLDocumentHelper.XML_HEADER) .append("<"); String type = LimeXMLSchema.getDisplayString(schemaUri); String root = type + "s"; tag.append(root) .append(" ") .append(LimeXMLDocumentHelper.XML_NAMESPACE) .append(schemaUri) .append("\">"); String canonicalKey = root + "__" + type + "__"; tag.append("<") .append(type); for(Map.Entry<String, String> entry : fieldToValue.entrySet()) { String name = XMLStringUtils.getLastField(canonicalKey, entry.getKey()); if(name == null) continue; // Construct: ' attribute="value"' tag.append(" ") .append(name) .append("=\"") .append(LimeXMLUtils.encodeXML(entry.getValue())) .append("\""); } if(includeVersion) { tag.append(" internal_version=\"") .append(version) .append("\""); } tag.append("/></") .append(root) .append(">"); return tag.toString(); } else { return null; } } }