package jcrRailroads;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.h2.bnf.Bnf;
import org.h2.server.web.PageParser;
import org.h2.tools.Csv;
import org.h2.util.IOUtils;
import org.h2.util.StringUtils;
public class Create {
Bnf bnf;
HashMap session = new HashMap();
public static void main(String... args) throws Exception {
new Create().process();
}
void process() throws Exception {
bnf = Bnf.getInstance(getReader());
ResultSet rs = Csv.getInstance().read(getReader(), null);
map("grammar", rs, true);
processHtml("grammar.html");
}
private void processHtml(String fileName) throws Exception {
String inFile = "src/jcrRailroads/" + fileName;
String outFile = "target/html/" + fileName;
new File(outFile).getParentFile().mkdirs();
FileOutputStream out = new FileOutputStream(outFile);
FileInputStream in = new FileInputStream(inFile);
byte[] bytes = IOUtils.readBytesAndClose(in, 0);
if (fileName.endsWith(".html")) {
String page = new String(bytes);
page = PageParser.parse(page, session);
bytes = page.getBytes();
}
out.write(bytes);
out.close();
}
static Reader getReader() {
return new InputStreamReader(Create.class.getResourceAsStream("help.csv"));
}
private void map(String key, ResultSet rs, boolean railroads) throws Exception {
ArrayList> list = new ArrayList>();
while (rs.next()) {
HashMap map = new HashMap();
ResultSetMetaData meta = rs.getMetaData();
for (int i = 0; i < meta.getColumnCount(); i++) {
String k = StringUtils.toLowerEnglish(meta.getColumnLabel(i + 1));
String value = rs.getString(i + 1);
value = value.trim();
map.put(k, PageParser.escapeHtml(value));
}
String topic = rs.getString("TOPIC");
String syntax = rs.getString("SYNTAX").trim();
if (railroads) {
String railroad = bnf.getRailroadHtml(syntax);
map.put("railroad", railroad);
}
syntax = bnf.getSyntaxHtml(syntax);
map.put("syntax", syntax);
// remove newlines in the regular text
String text = map.get("text");
if (text != null) {
// text is enclosed in ..
so this works.
text = StringUtils.replaceAll(text, "
", "
");
text = StringUtils.replaceAll(text, "
", " ");
map.put("text", text);
}
String link = topic.toLowerCase();
link = StringUtils.replaceAll(link, " ", "_");
// link = StringUtils.replaceAll(link, "_", "");
link = StringUtils.replaceAll(link, "@", "_");
map.put("link", StringUtils.urlEncode(link));
list.add(map);
}
session.put(key, list);
int div = 3;
int part = (list.size() + div - 1) / div;
for (int i = 0, start = 0; i < div; i++, start += part) {
List> listThird = list.subList(start, Math.min(start + part, list.size()));
session.put(key + "-" + i, listThird);
}
rs.close();
}
}