aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/mammoth/html/HtmlElement.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-14 11:42:44 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-14 11:42:44 +0000
commit622c04d788615dc79665203ea9a61e57e1935c49 (patch)
tree4d580dd958e6dd67814158bba5b4c558e05ff77a /src/main/java/org/zwobble/mammoth/html/HtmlElement.java
parent8bdef5495085e7258ca884bdcc0159c264181895 (diff)
Rename HtmlElementNode to HtmlElement
Diffstat (limited to 'src/main/java/org/zwobble/mammoth/html/HtmlElement.java')
-rw-r--r--src/main/java/org/zwobble/mammoth/html/HtmlElement.java49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/mammoth/html/HtmlElement.java b/src/main/java/org/zwobble/mammoth/html/HtmlElement.java
new file mode 100644
index 0000000..312cebe
--- /dev/null
+++ b/src/main/java/org/zwobble/mammoth/html/HtmlElement.java
@@ -0,0 +1,49 @@
+package org.zwobble.mammoth.html;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Ordering;
+
+import java.util.List;
+import java.util.Map;
+
+public class HtmlElement implements HtmlNode {
+ private final String tagName;
+ private final Map<String, String> attributes;
+ private final List<HtmlNode> children;
+
+ public HtmlElement(String tagName, Map<String, String> attributes, List<HtmlNode> children) {
+ this.tagName = tagName;
+ this.attributes = attributes;
+ this.children = children;
+ }
+
+ @Override
+ public void write(StringBuilder builder) {
+ builder.append("<").append(tagName);
+
+ List<Map.Entry<String, String>> sortedAttributes = orderBy(Map.Entry<String, String>::getKey)
+ .sortedCopy(attributes.entrySet());
+
+ for (Map.Entry<String, String> attribute : sortedAttributes) {
+ builder
+ .append(" ")
+ .append(attribute.getKey())
+ .append("=\"")
+ .append(attribute.getValue())
+ .append("\"");
+ }
+
+ builder.append(">");
+
+ children.forEach(node -> node.write(builder));
+
+ builder
+ .append("</")
+ .append(tagName)
+ .append(">");
+ }
+
+ private static <T, R extends Comparable<R>> Ordering<T> orderBy(Function<T, R> getKey) {
+ return Ordering.from((first, second) -> getKey.apply(first).compareTo(getKey.apply(second)));
+ }
+}