package com.github.mustachejava.inverter; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.MappingJsonFactory; import com.github.mustachejava.DefaultMustacheFactory; import com.github.mustachejava.Mustache; import com.github.mustachejava.util.Node; import com.github.mustachejava.util.NodeValue; import org.junit.Test; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import java.util.Map; public class InvertToJsonTest extends InvertUtils { @Test public void testToJson() throws IOException { DefaultMustacheFactory dmf = new DefaultMustacheFactory(); Mustache compile = dmf.compile("fdbcli.mustache"); Path file = getPath("src/test/resources/fdbcli.txt"); String txt = new String(Files.readAllBytes(file), "UTF-8"); Node invert = compile.invert(txt); output(invert); } @Test public void testToJson2() throws IOException { DefaultMustacheFactory dmf = new DefaultMustacheFactory(); Mustache compile = dmf.compile("fdbcli2.mustache"); Path file = getPath("src/test/resources/fdbcli2.txt"); String txt = new String(Files.readAllBytes(file), "UTF-8"); Node invert = compile.invert(txt); output(invert); } @Test public void testToJson3() throws IOException { DefaultMustacheFactory dmf = new DefaultMustacheFactory(); Mustache compile = dmf.compile("psauxwww.mustache"); Path file = getPath("src/test/resources/psauxwww.txt"); String txt = new String(Files.readAllBytes(file), "UTF-8"); Node invert = compile.invert(txt); output(invert); } @Test public void testToJson4() throws IOException { DefaultMustacheFactory dmf = new DefaultMustacheFactory(); Mustache compile = dmf.compile("fdbcli2.mustache"); Path file = getPath("src/test/resources/fdbcli3.txt"); String txt = new String(Files.readAllBytes(file), "UTF-8"); System.out.println("Input text:["); System.out.print(txt); System.out.println("]"); Node invert = compile.invert(txt); output(invert); } @Test public void testToJson5() throws IOException { DefaultMustacheFactory dmf = new DefaultMustacheFactory(); Mustache compile = dmf.compile("fdbcli3.mustache"); Path file = getPath("src/test/resources/fdbcli.txt"); String txt = new String(Files.readAllBytes(file), "UTF-8"); Node invert = compile.invert(txt); output(invert); } private void output(Node invert) throws IOException { MappingJsonFactory jf = new MappingJsonFactory(); StringWriter out = new StringWriter(); JsonGenerator jg = jf.createJsonGenerator(out); writeNode(jg, invert); jg.flush(); System.out.println(out.toString()); } @Test public void testDiskstats() throws IOException { DefaultMustacheFactory dmf = new DefaultMustacheFactory(); Mustache m = dmf.compile(new StringReader("{{#disk}}\n" + "\\s+[0-9]+\\s+[0-9]+\\s+{{tag_device}} {{reads}} {{reads_merged}} {{sectors_read}} {{read_time}} {{writes}} {{writes_merged}} {{sectors_written}} {{write_time}} {{ios}} {{io_time}} {{weighted_io_time}}\n" + "{{/disk}}"), "diskstats"); String txt = " 220 100 xvdb 3140 43 23896 216 57698654 45893891 1261011016 12232816 0 10994276 12222124\n" + " 220 100 xvdk 2417241 93 19338786 1287328 284969078 116717514 10144866416 1520589288 0 329180460 1521686240\n"; Node invert = m.invert(txt); output(invert); } private void writeNode(final JsonGenerator jg, Node invert) throws IOException { jg.writeStartObject(); for (final Map.Entry<String, NodeValue> entry : invert.entrySet()) { NodeValue nodeValue = entry.getValue(); if (nodeValue.isList() && nodeValue.list().size() > 0) { jg.writeFieldName(entry.getKey()); List<Node> list = nodeValue.list(); boolean array = list.size() > 1; if (array) jg.writeStartArray(); for (Node node : list) { writeNode(jg, node); } if (array) jg.writeEndArray(); } else { String value = nodeValue.value(); if (value != null) { jg.writeFieldName(entry.getKey()); try { double v = Double.parseDouble(value); jg.writeNumber(v); } catch (NumberFormatException e) { jg.writeString(value); } } } } jg.writeEndObject(); } }