package hu.sch.web.kp.admin; import hu.sch.domain.Group; import hu.sch.domain.enums.GroupStatus; import hu.sch.domain.user.User; import hu.sch.web.error.NotFound; import hu.sch.web.kp.KorokPage; import hu.sch.web.wicket.behaviors.ValidationStyleBehavior; import hu.sch.web.wicket.components.ValidationSimpleFormComponentLabel; import java.util.ArrayList; import java.util.List; import org.apache.wicket.RestartResponseException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.OnChangeAjaxBehavior; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.form.*; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; /** * * @author aldaris */ public class CreateGroup extends KorokPage { private Group group = new Group(); private User user; private String leaderName = "Körvezető neve"; public CreateGroup() { if (!isCurrentUserAdmin()) { throw new RestartResponseException(NotFound.class); } setHeaderLabelText("Új kör létrehozása"); Form<Group> createGroupForm = new Form<Group>("createGroupForm", new CompoundPropertyModel<Group>(group)) { @Override protected void onSubmit() { try { group.setStatus(GroupStatus.akt); group.setIsSvie(Boolean.FALSE); groupManager.createGroup(group, user); } catch (Exception ex) { getSession().error("Hiba a kör létrehozásakor: " + ex.getMessage()); setResponsePage(CreateGroup.class); return; } getSession().info("A kör sikeresen létrehozva."); setResponsePage(CreateGroup.class); } }; RequiredTextField<String> groupNameTF = new RequiredTextField<String>("name"); groupNameTF.setLabel(new Model<String>("Név")); groupNameTF.add(new ValidationStyleBehavior()); createGroupForm.add(groupNameTF); createGroupForm.add(new ValidationSimpleFormComponentLabel("groupNameLabel", groupNameTF)); RequiredTextField<String> groupTypeTF = new RequiredTextField<String>("type"); groupTypeTF.setLabel(new Model<String>("Típus")); groupTypeTF.add(new ValidationStyleBehavior()); createGroupForm.add(groupTypeTF); createGroupForm.add(new ValidationSimpleFormComponentLabel("groupTypeLabel", groupTypeTF)); List<Group> groups = groupManager.getAllGroups(); ListChoice listChoice = new ListChoice("parent", groups); listChoice.setChoiceRenderer(new GroupNameChoices()); listChoice.setNullValid(true); createGroupForm.add(listChoice); final WebMarkupContainer wmc = new WebMarkupContainer("wmc"); final ListChoice leaderChoice = new ListChoice("leader", new PropertyModel<User>(this, "user"), new ArrayList<User>()); leaderChoice.setChoiceRenderer(new LeaderChoices()); leaderChoice.setNullValid(false); leaderChoice.setRequired(true); wmc.add(leaderChoice); wmc.setOutputMarkupId(true); createGroupForm.add(wmc); final TextField<String> groupLeaderNameTF = new TextField<String>("leaderTF", new PropertyModel<String>(this, "leaderName")); OnChangeAjaxBehavior onChangeBehavior = new OnChangeAjaxBehavior() { @Override protected void onUpdate(AjaxRequestTarget target) { if (leaderName != null && leaderName.length() > 4) { List<User> users = userManager.findUsersByName(leaderName); leaderChoice.setChoices(users); } if (target != null) { target.add(wmc); } } }; groupLeaderNameTF.add(onChangeBehavior); createGroupForm.add(groupLeaderNameTF); add(createGroupForm); } private static class GroupNameChoices implements IChoiceRenderer<Group> { @Override public Object getDisplayValue(Group group) { return group.getName(); } @Override public String getIdValue(Group group, int index) { return group.getId().toString(); } } private static class LeaderChoices implements IChoiceRenderer<User> { @Override public Object getDisplayValue(User user) { return user.getFullName() + " [" + user.getEmailAddress() + ", " + user.getNeptunCode() + "]"; } @Override public String getIdValue(User user, int index) { return user.getId().toString(); } } }