package fr.openwide.core.showcase.web.application.widgets.component; import javax.persistence.PersistenceException; import org.apache.wicket.Component; 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.EmailTextField; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.RequiredTextField; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.link.AbstractLink; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; import fr.openwide.core.showcase.core.business.user.model.User; import fr.openwide.core.showcase.core.business.user.service.IUserService; import fr.openwide.core.showcase.core.util.binding.Bindings; import fr.openwide.core.wicket.more.markup.html.feedback.FeedbackUtils; 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.BindingModel; import fr.openwide.core.wicket.more.model.GenericEntityModel; public class AddUserPopupPanel extends AbstractAjaxModalPopupPanel<User> { private static final long serialVersionUID = 8434113733267773945L; @SpringBean private IUserService userService; private Form<User> addUserForm; public AddUserPopupPanel(String id) { super(id, new GenericEntityModel<Long, User>(new User())); } @Override protected Component createHeader(String wicketId) { return new Label(wicketId, new ResourceModel("widgets.modal.user.new")); } @Override protected Component createBody(String wicketId) { DelegatedMarkupPanel body = new DelegatedMarkupPanel(wicketId, AddUserPopupPanel.class); addUserForm = new Form<User>("addUserForm", getModel()); body.add(addUserForm); TextField<String> userName = new RequiredTextField<String>("userName", BindingModel.of(addUserForm.getModel(), Bindings.user().userName())); userName.setLabel(new ResourceModel("widgets.modal.user.userName")); addUserForm.add(userName); TextField<String> firstName = new RequiredTextField<String>("firstName", BindingModel.of(addUserForm.getModel(), Bindings.user().firstName())); firstName.setLabel(new ResourceModel("widgets.modal.user.firstName")); addUserForm.add(firstName); TextField<String> lastName = new RequiredTextField<String>("lastName", BindingModel.of(addUserForm.getModel(), Bindings.user().lastName())); lastName.setLabel(new ResourceModel("widgets.modal.user.lastName")); addUserForm.add(lastName); EmailTextField email = new EmailTextField("email", BindingModel.of(addUserForm.getModel(), Bindings.user().email())); email.setRequired(true); email.setLabel(new ResourceModel("widgets.modal.user.email")); addUserForm.add(email); return body; } @Override protected Component createFooter(String wicketId) { DelegatedMarkupPanel footer = new DelegatedMarkupPanel(wicketId, AddUserPopupPanel.class); // Bouton valider AjaxButton valider = new AjaxButton("save", addUserForm) { private static final long serialVersionUID = 1L; @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { try { userService.create(addUserForm.getModelObject()); Session.get().success(getString("widgets.modal.user.success")); closePopup(target); } catch (PersistenceException e) { Session.get().error(getString("widgets.modal.user.error.dataIntegrity")); } catch (Exception e) { Session.get().error(getString("widgets.modal.user.error.unexpected")); } FeedbackUtils.refreshFeedback(target, getPage()); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { FeedbackUtils.refreshFeedback(target, getPage()); } }; footer.add(valider); // Bouton annuler AbstractLink annuler = new AbstractLink("cancel"){ private static final long serialVersionUID = 1L; }; addCancelBehavior(annuler); footer.add(annuler); return footer; } @Override protected void onShow(AjaxRequestTarget target) { super.onShow(target); addUserForm.setModelObject(new User()); } @Override public IModel<String> getCssClassNamesModel() { return Model.of("modal-user"); } }