package net.rrm.ehour.ui.manage.department; import net.rrm.ehour.exception.ObjectNotUniqueException; import net.rrm.ehour.ui.common.border.GreySquaredRoundedBorder; import net.rrm.ehour.ui.common.component.AjaxFormComponentFeedbackIndicator; import net.rrm.ehour.ui.common.component.ServerMessageLabel; import net.rrm.ehour.ui.common.component.ValidatingFormComponentAjaxBehavior; import net.rrm.ehour.ui.common.event.AjaxEventType; import net.rrm.ehour.ui.common.form.FormConfig; import net.rrm.ehour.ui.common.form.FormUtil; import net.rrm.ehour.ui.common.model.AdminBackingBean; import net.rrm.ehour.ui.common.panel.AbstractFormSubmittingPanel; import net.rrm.ehour.ui.common.util.WebGeo; import net.rrm.ehour.user.service.UserService; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.RequiredTextField; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.apache.wicket.validation.validator.StringValidator; public class DepartmentFormPanel<T extends AdminBackingBean> extends AbstractFormSubmittingPanel<T> { private static final long serialVersionUID = -6469066920645156569L; @SpringBean private UserService userService; public DepartmentFormPanel(String id, CompoundPropertyModel<T> model) { super(id, model); } @Override protected void onInitialize() { super.onInitialize(); GreySquaredRoundedBorder greyBorder = new GreySquaredRoundedBorder("border", WebGeo.AUTO); add(greyBorder); setOutputMarkupId(true); IModel<T> model = getPanelModel(); final Form<T> form = new Form<>("deptForm", model); // name RequiredTextField<String> nameField = new RequiredTextField<>("department.name"); form.add(nameField); nameField.add(StringValidator.maximumLength(64)); nameField.setLabel(new ResourceModel("admin.dept.name")); nameField.add(new ValidatingFormComponentAjaxBehavior()); form.add(new AjaxFormComponentFeedbackIndicator("nameValidationError", nameField)); // code RequiredTextField<String> codeField = new RequiredTextField<>("department.code"); form.add(codeField); codeField.add(StringValidator.maximumLength(16)); codeField.setLabel(new ResourceModel("admin.dept.code")); codeField.add(new ValidatingFormComponentAjaxBehavior()); form.add(new AjaxFormComponentFeedbackIndicator("codeValidationError", codeField)); // data save label form.add(new ServerMessageLabel("serverMessage", "formValidationError")); boolean deletable = model.getObject().isDeletable(); FormConfig formConfig = FormConfig.forForm(form).withDelete(deletable).withSubmitTarget(this) .withDeleteEventType(DepartmentAjaxEventType.DEPARTMENT_DELETED) .withSubmitEventType(DepartmentAjaxEventType.DEPARTMENT_UPDATED); FormUtil.setSubmitActions(formConfig); greyBorder.add(form); onFormCreated(form); } protected void onFormCreated(Form<T> form) { } @Override protected boolean processFormSubmit(AjaxRequestTarget target, AdminBackingBean backingBean, AjaxEventType type) throws Exception { DepartmentAdminBackingBean departmentBackingBean = (DepartmentAdminBackingBean) backingBean; if (type == DepartmentAjaxEventType.DEPARTMENT_UPDATED) { persistDepartment(departmentBackingBean); } else if (type == DepartmentAjaxEventType.DEPARTMENT_DELETED) { deleteDepartment(departmentBackingBean); } return true; } private void persistDepartment(DepartmentAdminBackingBean backingBean) throws ObjectNotUniqueException { userService.persistUserDepartment(backingBean.getDepartment()); } private void deleteDepartment(DepartmentAdminBackingBean backingBean) { userService.deleteDepartment(backingBean.getDepartment().getDepartmentId()); } }