package org.nocket.page;
import org.apache.wicket.markup.html.WebPage;
/**
* This class allows two create generic Page classes at runtime using the
* in-memory runtime compiler from package org.nocket.rtcompile. The structure of a
* fully generic page class is absolutely canonic and therefore can completely
* be derived from the domain class to display.
*
* @author less02
*/
public class InMemoryPageClassBuilder extends InMemoryClassBuilder {
protected final Class<? extends WebPage> pageBaseClass;
protected final String pageClassName;
public InMemoryPageClassBuilder(Class<?> domainClass, Class<? extends WebPage> pageBaseClass) {
super(domainClass);
this.pageBaseClass = pageBaseClass;
this.pageClassName = domainClass.getSimpleName() + "Page";
}
@Override
protected String constructSourceCode() {
return String.format(
"package %1$s;" +
"public class %2$s extends %3$s {" +
" public %2$s() {" +
" this(org.apache.wicket.model.Model.of(new %4$s()));" +
" }" +
" public %2$s(org.apache.wicket.model.IModel model) {" +
" super(model);" +
" new org.nocket.gen.page.GeneratedBinding(this).bind();" +
" }" +
"}",
packageName, pageClassName, pageBaseClass.getName(), domainClass.getName());
}
@Override
protected String fullyQualifiedClassName() {
return packageName + "." + pageClassName;
}
}