package de.flower.rmt.ui.page.event.player;
import de.flower.common.ui.markup.html.form.TextAreaMaxLengthBehavior;
import de.flower.common.ui.panel.BasePanel;
import de.flower.rmt.model.db.entity.Comment;
import de.flower.rmt.model.db.entity.Invitation;
import de.flower.rmt.model.db.entity.User;
import de.flower.rmt.model.db.type.RSVPStatus;
import de.flower.rmt.ui.markup.html.form.EntityForm;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
import org.apache.wicket.markup.html.basic.Label;
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.form.TextArea;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.StringResourceModel;
/**
* @author flowerrrr
*/
public abstract class InvitationFormPanel extends BasePanel {
public InvitationFormPanel(String id, final IModel<Invitation> model, final IModel<Boolean> eventClosedModel) {
super(id, model);
EntityForm<Invitation> form = new EntityForm<Invitation>("form", model) {
@Override
protected void onSubmit(final AjaxRequestTarget target, final Form<Invitation> form) {
InvitationFormPanel.this.onSubmit(form.getModelObject(), target);
onClose(target);
}
@Override
protected boolean isShowSuccessFeedbackPanel() {
// don't have to display success message. not necessary on this form.
return false;
}
@Override
public boolean isVisible() {
return !eventClosedModel.getObject();
}
};
add(form);
final RadioGroup group = new RadioGroup("status") {
@Override
public boolean isVisible() {
return !eventClosedModel.getObject();
}
};
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 TextArea("comment") {
{
add(new TextAreaMaxLengthBehavior(Comment.MAXLENGTH));
}
});
add(new Label("invitationClosedMessage", new StringResourceModel("player.event.closed.message", new PropertyModel<User>(model, "event.createdBy"))) {
@Override
public boolean isVisible() {
return eventClosedModel.getObject();
}
}.setEscapeModelStrings(false));
}
protected abstract void onSubmit(Invitation invitation, AjaxRequestTarget target);
}