package im.actor.generator.generators.doc;
import im.actor.generator.scheme.*;
import java.io.IOException;
import java.util.List;
import static im.actor.generator.generators.doc.HtmlConfig.*;
import static im.actor.generator.generators.doc.HtmlConfig.HEADER;
import static im.actor.generator.generators.doc.HtmlConfig.generateAttributes;
/**
* Created by ex3ndr on 18.11.14.
*/
public class ReferenceGenerator {
public static String generateUpdateDefinition(SchemeUpdate u, String pathToReference, boolean useNoBreak) throws IOException {
return color("update", KEYWORD) + " " + link(u.getName(), pathToReference + "Update" + u.getName() + ".html") + color("@" + hex(u.getHeader()), HEADER) + " " +
generateAttributes(u.getAttributes(), pathToReference, useNoBreak);
}
public static String generateStructDefinition(SchemeStruct u, String pathToReference, boolean useNoBreak) throws IOException {
return color("struct", KEYWORD) + " " + link(u.getName(), pathToReference + "Struct" + u.getName() + ".html") + " " +
generateAttributes(u.getAttributes(), pathToReference, useNoBreak);
}
public static String generateResponseDefinition(SchemeResponse u, String pathToReference, boolean useNoBreak) throws IOException {
return color("response", KEYWORD) + " " + link(u.getName(), pathToReference + "Response" + u.getName() + ".html") + " " +
generateAttributes(u.getAttributes(), pathToReference, useNoBreak);
}
public static String generateUpdateBoxDefinition(SchemeUpdateBox u, String pathToReference, boolean useNoBreak) throws IOException {
return color("update box", KEYWORD) + " " + link(u.getName(), pathToReference + "UpdateBox" + u.getName() + ".html") + " " +
generateAttributes(u.getAttributes(), pathToReference, useNoBreak);
}
public static String generateEnumDefinition(SchemeEnum e, String pathToReference) throws IOException {
String res = color("enum", KEYWORD) + " " + link(e.getName(), pathToReference + "Enum" + e.getName() + ".html") + " (";
boolean isFirst = true;
for (SchemeEnum.Record r : e.getRecord()) {
if (isFirst) {
isFirst = false;
} else {
res += ", ";
}
res += r.getName() + color("@" + r.getId(), HEADER);
}
res += ")";
return res;
}
public static String generateRequestDefinition(SchemeRpc u, String pathToReference, boolean useNoBreak) throws IOException {
String res = color("rpc", KEYWORD) + " " + link(u.getName(), pathToReference + "Rpc" + u.getName() + ".html") + " " +
generateAttributes(u.getAttributes(), pathToReference, useNoBreak);
res += " -> ";
if (u.getResponse() instanceof SchemeRpc.AnonymousResponse) {
SchemeRpc.AnonymousResponse resp = (SchemeRpc.AnonymousResponse) u.getResponse();
res += color("tuple", KEYWORD) + color("@" + hex(u.getHeader()), HEADER);
res += generateAttributes(resp.getResponse().getAttributes(), pathToReference, false);
} else {
SchemeRpc.RefResponse refResponse = (SchemeRpc.RefResponse) u.getResponse();
res += link(refResponse.getName(), "Response" + refResponse.getName() + ".html");
}
return res;
}
public static String generateParameters(SchemeContainer u, List<SchemeDoc> docs, String pathToReference) throws IOException {
String body = "";
body += "<h3>Parameters</h3>";
if (u.getAttributes().size() > 0) {
body += "<table class=\"table table-hover\">";
body += "<tr><th style=\"width:100px;\">Argument</th><th style=\"width:100px;\">Type</th><th>Description</th></tr>";
for (SchemeDoc doc : docs) {
if (doc instanceof SchemeDocParameter) {
String name = ((SchemeDocParameter) doc).getArgument();
String descr = ((SchemeDocParameter) doc).getDescription();
body += "<tr>";
body += "<td>" + HtmlConfig.bold(name) + "</td>";
body += "<td>" + HtmlConfig.typeText(u.getAttribute(name).getType(), pathToReference) + "</td>";
body += "<td>" + descr + "</td>";
}
}
body += "</table>";
} else {
body += "<h5>No parameters</h5>";
}
return body;
}
public static String buildDescription(List<SchemeDoc> docs) {
String res = "";
for (SchemeDoc doc : docs) {
if (doc instanceof SchemeDocComment) {
if (res.length() == 0) {
res += " ";
}
res += ((SchemeDocComment) doc).getText();
}
}
return res;
}
public static String generateShortRecordDefinition(SchemeRecord record, String path) throws IOException {
if (record instanceof SchemeUpdate) {
SchemeUpdate u = (SchemeUpdate) record;
return color("update", KEYWORD) + " " + link(u.getName(), path + "Update" + u.getName() + ".html");
} else if (record instanceof SchemeStruct) {
SchemeStruct s = (SchemeStruct) record;
return color("struct", KEYWORD) + " " + link(s.getName(), path + "Struct" + s.getName() + ".html");
} else if (record instanceof SchemeEnum) {
SchemeEnum e = (SchemeEnum) record;
return color("enum", KEYWORD) + " " + link(e.getName(), path + "Enum" + e.getName() + ".html");
} else if (record instanceof SchemeRpc) {
SchemeRpc rpc = (SchemeRpc) record;
return color("rpc", KEYWORD) + " " + link(rpc.getName(), path + "Rpc" + rpc.getName() + ".html");
} else if (record instanceof SchemeResponse) {
SchemeResponse r = (SchemeResponse) record;
return color("response", KEYWORD) + " " + link(r.getName(), path + "Response" + r.getName() + ".html");
} else if (record instanceof SchemeUpdateBox) {
SchemeUpdateBox r = (SchemeUpdateBox) record;
return color("update box", KEYWORD) + " " + link(r.getName(), path + "UpdateBox" + r.getName() + ".html");
}
return "";
}
public static String generateRecordDefinition(SchemeRecord record, String path) throws IOException {
if (record instanceof SchemeUpdate) {
SchemeUpdate u = (SchemeUpdate) record;
return ReferenceGenerator.generateUpdateDefinition(u, path, false);
} else if (record instanceof SchemeStruct) {
SchemeStruct s = (SchemeStruct) record;
return ReferenceGenerator.generateStructDefinition(s, path, false);
} else if (record instanceof SchemeEnum) {
SchemeEnum e = (SchemeEnum) record;
return ReferenceGenerator.generateEnumDefinition(e, path);
} else if (record instanceof SchemeRpc) {
SchemeRpc rpc = (SchemeRpc) record;
return ReferenceGenerator.generateRequestDefinition(rpc, path, false);
} else if (record instanceof SchemeResponse) {
SchemeResponse r = (SchemeResponse) record;
return ReferenceGenerator.generateResponseDefinition(r, path, false);
} else if (record instanceof SchemeUpdateBox) {
SchemeUpdateBox r = (SchemeUpdateBox) record;
return ReferenceGenerator.generateUpdateBoxDefinition(r, path, false);
} else if (record instanceof SchemeWhitespace) {
return "<br/>";
} else if (record instanceof SchemeComment) {
return color("// " + ((SchemeComment) record).getText(), COMMENT);
}
return "";
}
public static String generateSectionScheme(String path, SchemeSection section) throws IOException {
String body = "<pre style=\"border:0px; white-space: nowrap;\">\n";
for (SchemeRecord record : section.getRecords()) {
body += generateRecordDefinition(record, path) + "<br/>";
}
return body + "</pre>";
}
}