package de.flower.rmt.ui.page.event.manager.invitations; import de.flower.common.ui.ajax.event.AjaxEventSender; import de.flower.common.ui.modal.ModalPanel; import de.flower.rmt.model.db.entity.Comment; import de.flower.rmt.model.db.entity.Invitation; import de.flower.rmt.model.db.type.RSVPStatus; import de.flower.rmt.security.ISecurityService; import de.flower.rmt.service.ICommentManager; import de.flower.rmt.service.IInvitationManager; import de.flower.rmt.ui.markup.html.form.field.TextAreaPanel; import de.flower.rmt.ui.markup.html.panel.FormFeedbackPanel; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.feedback.ComponentFeedbackMessageFilter; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.Radio; import org.apache.wicket.markup.html.form.RadioGroup; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; import org.wicketstuff.jsr303.validator.BeanValidator; /** * Panel for manager to edit players invitation status and give his own comments. * * @author flowerrrr */ public class InvitationEditPanel extends ModalPanel<Invitation> { @SpringBean private IInvitationManager invitationManager; @SpringBean private ICommentManager commentManager; @SpringBean private ISecurityService securityService; public InvitationEditPanel(final IModel<Invitation> model) { super(model); setHeading("manager.invitations.editpanel.heading"); IModel<Invitation> formModel = new LoadableDetachableModel<Invitation>() { @Override protected Invitation load() { Invitation invitation = model.getObject(); // init comment Comment comment = commentManager.findByInvitationAndAuthor(invitation, securityService.getUser(), 0); if (comment != null) { invitation.setComment(comment.getText()); } return invitation; } }; Form<Invitation> form = new Form<Invitation>("form", new CompoundPropertyModel<Invitation>(formModel)); addForm(form); form.add(new FormFeedbackPanel(form)); final RadioGroup group = new RadioGroup("status"); form.add(group); group.add(new Radio<RSVPStatus>("accepted", Model.of(RSVPStatus.ACCEPTED))); group.add(new Radio<RSVPStatus>("unsure", Model.of(RSVPStatus.UNSURE))); group.add(new Radio<RSVPStatus>("declined", Model.of(RSVPStatus.DECLINED))); group.add(new FeedbackPanel("feedback", new ComponentFeedbackMessageFilter(group)) { @Override public boolean isVisible() { return anyMessage(); } }); form.add(new TextAreaPanel("comment")); } @Override protected boolean onSubmit(final AjaxRequestTarget target, final Form<Invitation> form) { if (!new BeanValidator(form).isValid(form.getModelObject())) { target.add(form); return false; } else { // save invitation and update invitationlistpanel Invitation invitation = form.getModelObject(); invitationManager.save(invitation, invitation.getComment()); AjaxEventSender.entityEvent(this, Invitation.class); return true; } } }