package org.nocket.page; import org.apache.wicket.markup.html.panel.Panel; /** * 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 InMemoryPanelClassBuilder extends InMemoryClassBuilder { protected final Class<? extends Panel> panelBaseClass; protected final String panelClassName; public InMemoryPanelClassBuilder(Class<?> domainClass, Class<? extends Panel> panelBaseClass) { super(domainClass); this.panelBaseClass = panelBaseClass; this.panelClassName = domainClass.getSimpleName() + "Panel"; } @Override protected String constructSourceCode() { return String.format( "package %1$s;" + "public class %2$s extends %3$s {" + " public %2$s(String id, org.apache.wicket.model.IModel model) {" + " super(id, model);" + " new org.nocket.gen.page.GeneratedBinding(this).bind();" + " }" + "}", packageName, panelClassName, panelBaseClass.getName()); } @Override protected String fullyQualifiedClassName() { return packageName + "." + panelClassName; } }