package im.actor.generator.generators.doc;
import im.actor.generator.scheme.*;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import static im.actor.generator.generators.doc.HtmlConfig.*;
/**
* Created by ex3ndr on 18.11.14.
*/
public class DocUpdatesGenerator {
public static void generate(SchemeDefinition definition, String path) throws IOException {
String template = FileUtils.readFileToString(new File(path + "/entity_template.html"));
new File(path + "/reference/").mkdirs();
for (SchemeSection section : definition.getSections()) {
String index = "";
for (SchemeSection section2 : definition.getSections()) {
String value = "";
value += (section2 == section) ? "<h3>" + section2.getName() + "</h3>" :
"<h5>" + section2.getName() + "</h5>";
for (SchemeRecord record : section2.getRecords()) {
String recVal = ReferenceGenerator.generateShortRecordDefinition(record, "");
if (recVal.length() > 0) {
value += recVal + "<br/>";
}
}
value += "<hr>";
if (section2 == section) {
index = value + index;
} else {
index += value;
}
}
for (SchemeUpdate u : section.getAllUpdates()) {
String fileName = path + "/reference/Update" + u.getName() + ".html";
String body = "";
body += createBreadCrumb(section, u.getName());
body += "<h1>" + u.getName() + " <small>update</small></h1>";
String description = ReferenceGenerator.buildDescription(u.getDocs());
body += "<p class=\"lead\">" + description + "</p>";
body += schemeWrap(ReferenceGenerator.generateUpdateDefinition(u, "", false));
body += ReferenceGenerator.generateParameters(u, u.getDocs(), "");
body += "<h3>See also</h3>";
body += "<a href=\"" + section.getPkg() + ".html\">" + section.getName() + "</a>";
String content = template
.replace("{body_placeholder}", body)
.replace("{menu_placeholder}", index);
FileUtils.writeStringToFile(new File(fileName), content);
}
for (SchemeStruct u : section.getAllStructs()) {
String fileName = path + "/reference/Struct" + u.getName() + ".html";
String body = "";
body += createBreadCrumb(section, u.getName());
body += "<h1>" + u.getName() + " <small>struct</small></h1>";
String description = ReferenceGenerator.buildDescription(u.getDocs());
body += "<p class=\"lead\">" + description + "</p>";
body += schemeWrap(ReferenceGenerator.generateStructDefinition(u, "", false));
body += ReferenceGenerator.generateParameters(u, u.getDocs(), "");
body += "<h3>See also</h3>";
body += "<a href=\"" + section.getPkg() + ".html\">" + section.getName() + "</a>";
String content = template
.replace("{body_placeholder}", body)
.replace("{menu_placeholder}", index);
FileUtils.writeStringToFile(new File(fileName), content);
}
for (SchemeBaseResponse u2 : section.getAllResponses()) {
if (u2 instanceof SchemeResponse) {
SchemeResponse u = (SchemeResponse) u2;
String fileName = path + "/reference/Response" + u.getName() + ".html";
String body = "";
body += createBreadCrumb(section, u.getName());
body += "<h1>" + u.getName() + " <small>response</small></h1>";
String description = ReferenceGenerator.buildDescription(u.getDocs());
body += "<p class=\"lead\">" + description + "</p>";
body += schemeWrap(ReferenceGenerator.generateResponseDefinition(u, "", false));
body += ReferenceGenerator.generateParameters(u, u.getDocs(), "");
body += "<h3>See also</h3>";
body += "<a href=\"" + section.getPkg() + ".html\">" + section.getName() + "</a>";
String content = template
.replace("{body_placeholder}", body)
.replace("{menu_placeholder}", index);
FileUtils.writeStringToFile(new File(fileName), content);
}
}
for (SchemeRpc u : section.getAllRpc()) {
String fileName = path + "/reference/Rpc" + u.getName() + ".html";
String body = "";
body += createBreadCrumb(section, u.getName());
body += "<h1>" + u.getName() + " <small>rpc</small></h1>";
String description = ReferenceGenerator.buildDescription(u.getDocs());
body += "<p class=\"lead\">" + description + "</p>";
body += schemeWrap(ReferenceGenerator.generateRequestDefinition(u, "", false));
body += ReferenceGenerator.generateParameters(u, u.getDocs(), "");
body += "<h3>See also</h3>";
body += "<a href=\"" + section.getPkg() + ".html\">" + section.getName() + "</a>";
String content = template
.replace("{body_placeholder}", body)
.replace("{menu_placeholder}", index);
FileUtils.writeStringToFile(new File(fileName), content);
}
for (SchemeUpdateBox u : section.getAllUpdateBoxes()) {
String fileName = path + "/reference/UpdateBox" + u.getName() + ".html";
String body = "";
body += createBreadCrumb(section, u.getName());
body += "<h1>" + u.getName() + " <small>update box</small></h1>";
String description = ReferenceGenerator.buildDescription(u.getDocs());
body += "<p class=\"lead\">" + description + "</p>";
body += schemeWrap(ReferenceGenerator.generateUpdateBoxDefinition(u, "", false));
body += ReferenceGenerator.generateParameters(u, u.getDocs(), "");
body += "<h3>See also</h3>";
body += "<a href=\"" + section.getPkg() + ".html\">" + section.getName() + "</a>";
String content = template
.replace("{body_placeholder}", body)
.replace("{menu_placeholder}", index);
FileUtils.writeStringToFile(new File(fileName), content);
}
for (SchemeEnum u : section.getAllEnums()) {
String fileName = path + "/reference/Enum" + u.getName() + ".html";
String body = "";
body += createBreadCrumb(section, u.getName());
body += "<h1>" + u.getName() + " <small>enum</small></h1>";
body += schemeWrap(ReferenceGenerator.generateEnumDefinition(u, ""));
body += "<h3>See also</h3>";
body += "<a href=\"" + section.getPkg() + ".html\">" + section.getName() + "</a>";
String content = template
.replace("{body_placeholder}", body)
.replace("{menu_placeholder}", index);
FileUtils.writeStringToFile(new File(fileName), content);
}
String fileName = path + "/reference/" + section.getPkg() + ".html";
String body = "";
body += createBreadCrumb(section);
body += "<h1>" + section.getName() + " <small>" + section.getPkg() + "</small></h1>";
body += "<h3>Reference</h3>";
body += ReferenceGenerator.generateSectionScheme("", section);
String content = template
.replace("{body_placeholder}", body)
.replace("{menu_placeholder}", index);
FileUtils.writeStringToFile(new File(fileName), content);
}
String index = "";
for (SchemeSection section2 : definition.getSections()) {
index += "<h5>" + section2.getName() + "</h5>";
for (SchemeRecord record : section2.getRecords()) {
String recVal = ReferenceGenerator.generateShortRecordDefinition(record, "");
if (recVal.length() > 0) {
index += recVal + "<br/>";
}
}
index += "<hr>";
}
String fileName = path + "/reference/index.html";
String body = "";
body += "<h1>Actor API</h1>";
body += "<h3>Reference</h3>";
for (SchemeSection section : definition.getSections()) {
body += "<h4>" + section.getName() + "</h4>";
body += ReferenceGenerator.generateSectionScheme("", section);
}
String content = template
.replace("{body_placeholder}", body)
.replace("{menu_placeholder}", index);
FileUtils.writeStringToFile(new File(fileName), content);
}
private static String createBreadCrumb(SchemeSection section, String entityName) {
return "<ol class=\"breadcrumb\" style=\"margin-top:14px\">\n" +
" <li><a href=\"../index.html\">Actor API</a></li>\n" +
" <li><a href=\"" + section.getPkg() + ".html\">" + section.getName() + "</a></li>\n" +
" <li class=\"active\">" + entityName + "</li>\n" +
"</ol>";
}
private static String createBreadCrumb(SchemeSection section) {
return "<ol class=\"breadcrumb\" style=\"margin-top:14px\">\n" +
" <li><a href=\"../index.html\">Actor API</a></li>\n" +
" <li class=\"active\">" + section.getName() + "</li>\n" +
"</ol>";
}
}