1 package sharin.doc.builder; 2 3 import java.util.List; 4 5 import sharin.util.StringUtils; 6 7 public class GenericXmlElem<E extends Elem> extends Elem { 8 9 public GenericXmlElem(String name, Object... nodes) { 10 super(name, nodes); 11 } 12 13 @SuppressWarnings("unchecked") 14 @Override 15 public E attr(String name, Object value) { 16 return (E) super.attr(name, value); 17 } 18 19 @SuppressWarnings("unchecked") 20 @Override 21 public E _(Object... nodes) { 22 return (E) super._(nodes); 23 } 24 25 @Override 26 public String toString() { 27 StringBuilder builder = new StringBuilder(); 28 builder.append("<"); 29 builder.append(StringUtils.escapeXml(getName())); 30 31 for (Attr attr : getAttrList()) { 32 builder.append(" "); 33 builder.append(StringUtils.escapeXml(attr.getName())); 34 builder.append("=\""); 35 builder.append(StringUtils.escapeXml(String 36 .valueOf(attr.getValue()))); 37 builder.append('"'); 38 } 39 40 List<Object> nodeList = getNodeList(); 41 42 if (nodeList.size() > 0) { 43 builder.append(">"); 44 45 for (Object node : nodeList) { 46 String s = node.toString(); 47 48 if (!(node instanceof Elem)) { 49 s = StringUtils.escapeXml(s); 50 } 51 52 builder.append(s); 53 } 54 55 builder.append("</"); 56 builder.append(StringUtils.escapeXml(getName())); 57 builder.append(">"); 58 59 } else { 60 builder.append(" />"); 61 } 62 63 return builder.toString(); 64 } 65 }