package fr.openwide.core.basicapp.web.application.referencedata.form; import org.apache.wicket.Component; import org.apache.wicket.RestartResponseException; import org.apache.wicket.Session; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import fr.openwide.core.jpa.more.business.generic.model.GenericListItem; import fr.openwide.core.jpa.more.business.generic.service.IGenericListItemService; import fr.openwide.core.wicket.more.markup.html.feedback.FeedbackUtils; import fr.openwide.core.wicket.more.markup.html.form.FormPanelMode; import fr.openwide.core.wicket.more.markup.html.link.BlankLink; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.component.AbstractAjaxModalPopupPanel; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.bootstrap.modal.component.DelegatedMarkupPanel; import fr.openwide.core.wicket.more.model.GenericEntityModel; public abstract class AbstractGenericListItemPopup<T extends GenericListItem<? super T>> extends AbstractAjaxModalPopupPanel<T> { private static final long serialVersionUID = 8594171911880178857L; private static final Logger LOGGER = LoggerFactory.getLogger(AbstractGenericListItemPopup.class); @SpringBean private IGenericListItemService genericListItemService; protected Form<T> form; protected final IModel<FormPanelMode> modeModel = new Model<>(FormPanelMode.ADD); public AbstractGenericListItemPopup(String id) { super(id, new GenericEntityModel<Long, T>()); } @Override protected Component createHeader(String wicketId) { return new Label(wicketId, new StringResourceModel("listItem.${}.title", modeModel)); } @Override abstract protected Component createBody(String wicketId); @Override protected Component createFooter(String wicketId) { DelegatedMarkupPanel footer = new DelegatedMarkupPanel(wicketId, AbstractGenericListItemPopup.class); // Validate button footer.add(new AjaxButton("save", form) { private static final long serialVersionUID = 1L; @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { T genericListItem = AbstractGenericListItemPopup.this.getModelObject(); try { if (isAddMode()) { onSubmitAddMode(genericListItem); Session.get().success(getString("listItem.ADD.success")); } else { onSubmitEditMode(genericListItem); Session.get().success(getString("listItem.EDIT.success")); } closePopup(target); refresh(target); } catch (RestartResponseException e) { // NOSONAR throw e; } catch (Exception e) { if (isAddMode()) { LOGGER.error("Error adding a GenericListItem.", e); } else { LOGGER.error("Error updating a GenericListItem.", e); } Session.get().error(getString("common.error.unexpected")); } FeedbackUtils.refreshFeedback(target, getPage()); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { FeedbackUtils.refreshFeedback(target, getPage()); } }); // Cancel button BlankLink cancel = new BlankLink("cancel"); addCancelBehavior(cancel); footer.add(cancel); return footer; } public void setUpAdd(T genericListItem) { getModel().setObject(genericListItem); modeModel.setObject(FormPanelMode.ADD); } public void setUpEdit(T genericListItem) { getModel().setObject(genericListItem); modeModel.setObject(FormPanelMode.EDIT); } protected void onSubmitAddMode(T genericListItem) { genericListItemService.create(genericListItem); } protected void onSubmitEditMode(T genericListItem) { genericListItemService.update(genericListItem); } protected boolean isAddMode() { return FormPanelMode.ADD.equals(modeModel.getObject()); } protected abstract void refresh(AjaxRequestTarget target); }