package knorxx.framework.generator.web.server.rtti;
import java.util.List;
import knorxx.framework.generator.single.JavaScriptResult;
import knorxx.framework.generator.web.client.webpage.annotation.WebPageUrl;
import knorxx.framework.generator.web.generator.JavaScriptBuilder;
import org.joda.time.DateTime;
/**
*
* @author sj
*/
public class RttiGenerator {
public RttiGenerationResult getJavaScriptSource(String name, List<Class<?>> javaClasses, UrlResolver urlResolver, DateTime generationDateTime) {
JavaScriptBuilder builder = new JavaScriptBuilder()
.namespace(WebPageUrl.class)
.constructor(WebPageUrl.class)
._constructor();
for(Class<?> javaClass : javaClasses) {
builder
.namespace(javaClass)
.code(javaClass.getName()).code(" = ").code(javaClass.getName()).code(" || {}").semicolon().newLine()
.staticFunction(javaClass, "getName")
.code("return ").literal(javaClass.getName()).semicolon().newLine()
._function()
.staticFunction(javaClass, "getSimpleName")
.code("return ").literal(javaClass.getSimpleName()).semicolon().newLine()
._function()
.staticFunction(javaClass, "getAnnotation")
.code("return { ").newLine()
.property("value").anonymousFunction()
.code("return ").literal(urlResolver.resolveWebPage(javaClass.getName())).semicolon().newLine()
._function()
.code("};").newLine()
._function();
}
return new RttiGenerationResult(name, generationDateTime, new JavaScriptResult(builder.create()));
}
}