package org.nocket.gen.page.element; import java.lang.reflect.Method; import java.util.List; import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.jsoup.nodes.Element; import org.nocket.gen.page.DMDWebGenPageContext; import org.nocket.gen.page.element.synchronizer.BooleanChoiceRenderer; import org.nocket.gen.page.element.synchronizer.BooleanRadioChoicesModel; import org.nocket.gen.page.element.synchronizer.EnumChoicesRenderer; import org.nocket.gen.page.element.synchronizer.GeneratedChoicesModel; import org.nocket.gen.page.element.synchronizer.PrimitiveBooleanPropertyModel; import org.nocket.gen.page.element.synchronizer.SynchronizerHelper; import org.nocket.gen.page.visitor.PageElementVisitorI; public class RadioInputElement extends AbstractDomainPageElement<Object> { public RadioInputElement(DMDWebGenPageContext context, Element element) { super(context, element); } @Override public IModel<Object> innerGetModel() { Class<?> returnType = getDomainElement().getMethod().getReturnType(); if (returnType == boolean.class) { return new PrimitiveBooleanPropertyModel(getPropertyModelObject(), getPropertyExpression()); } else { return new PropertyModel<Object>(getPropertyModelObject(), getPropertyExpression()); } } public IModel<List<Object>> getChoicesModel() { Method method = getDomainElement().getMethod(); Class<?> returnType = method.getReturnType(); if (SynchronizerHelper.isBooleanType(method)) { return new BooleanRadioChoicesModel(); } else { return new GeneratedChoicesModel(this); } } @Override public void accept(PageElementVisitorI visitor) { visitor.visitRadioInput(this); } public IChoiceRenderer getChoicesRenderer() { Method method = getDomainElement().getMethod(); Class<?> returnType = method.getReturnType(); if (returnType.isEnum()) { return new EnumChoicesRenderer(getContext()); } else if (SynchronizerHelper.isBooleanType(method)) { return new BooleanChoiceRenderer(this); } else { return new ChoiceRenderer(); } } }