1 package pl.matsuo.core.web.view; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.Map; 6 import java.util.TreeMap; 7 8 import static java.util.Arrays.*; 9 10 11 public class HtmlElement extends HtmlPart { 12 13 14 private final String element; 15 private final HtmlPart[] innerElements; 16 private final List<String> classes = new ArrayList<>(); 17 private final Map<String, String> attributes = new TreeMap<>(); 18 19 20 public HtmlElement(String element, HtmlPart ... innerElements) { 21 this.element = element; 22 this.innerElements = innerElements; 23 } 24 25 26 public HtmlElement style(String ... classes) { 27 return style(asList(classes)); 28 } 29 30 31 public HtmlElement style(List<String> classes) { 32 this.classes.addAll(classes); 33 return this; 34 } 35 36 37 public HtmlElement attr(String name, String value) { 38 attributes.put(name, value); 39 return this; 40 } 41 42 43 public String getAttr(String name) { 44 return attributes.get(name); 45 } 46 47 48 @Override 49 public String toString() { 50 String rendering = "<" + element; 51 52 rendering += " class=\""; 53 for (String clazz : classes) { 54 rendering += " " + clazz; 55 } 56 rendering += "\""; 57 58 for (String attrName : attributes.keySet()) { 59 String value = attributes.get(attrName); 60 rendering += " " + attrName + (value == null ? "" : "=\"" + attributes.get(attrName) + "\""); 61 } 62 63 rendering += ">\n"; 64 65 for (HtmlPart htmlPart : innerElements) { 66 rendering += htmlPart.toString() + "\n"; 67 } 68 69 rendering += "</" + element + ">"; 70 71 return rendering; 72 } 73 } 74