package net.ftlines.blog.cdidemo.web.app; import javax.inject.Inject; import net.ftlines.blog.cdidemo.model.Member; import net.ftlines.blog.cdidemo.model.PositionsRepository; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.datetime.markup.html.form.DateTextField; import org.apache.wicket.extensions.yui.calendar.DatePicker; import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.markup.html.panel.GenericPanel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.PropertyModel; public abstract class MemberEditPanel extends GenericPanel<Member> { @Inject PositionsRepository positions; public MemberEditPanel(String id, IModel<Member> member) { super(id, member); final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); add(feedback); Form form = new Form("form"); add(form); form.add(new EmployeePicker("employee", new PropertyModel(member, "employee"))); form.add(DateTextField.forDatePattern("effectiveDate", new PropertyModel(member, "effectiveDate"), "MM/dd/yyyy") .add(new DatePicker())); form.add(new DropDownChoice("position", new PropertyModel(member, "position"), new LoadableDetachableModel() { @Override protected Object load() { return positions.list(); } }, new ChoiceRenderer("name", "id"))); form.add(new AjaxButton("apply") { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { MemberEditPanel.this.onApply(target); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.add(feedback); } }); form.add(new AjaxLink("cancel") { @Override public void onClick(AjaxRequestTarget target) { MemberEditPanel.this.onCancel(target); } }); } protected abstract void onApply(AjaxRequestTarget target); protected abstract void onCancel(AjaxRequestTarget target); }