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