package hu.sch.web.kp.svie; import hu.sch.domain.Group; import hu.sch.domain.user.User; import hu.sch.services.SvieManagerLocal; import hu.sch.web.kp.KorokPage; import hu.sch.web.wicket.components.CheckBoxHolder; import hu.sch.web.wicket.components.SvieDelegateNumberField; import hu.sch.web.wicket.components.customlinks.GroupLink; import hu.sch.web.wicket.components.customlinks.UserLink; import hu.sch.web.wicket.components.tables.PanelColumn; import hu.sch.web.wicket.util.SortableGroupDataProvider; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import javax.inject.Inject; import org.apache.wicket.RestartResponseException; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author aldaris */ public final class SvieGroupMgmt extends KorokPage { @Inject private SvieManagerLocal svieManager; private static Logger log = LoggerFactory.getLogger(SvieUserMgmt.class); private List<Group> groups; private List<Group> filteredGroups; private String currentFilter; private SortableGroupDataProvider groupProvider; public SvieGroupMgmt() { createNavbarWithSupportId(34); if (!isCurrentUserSVIE()) { log.warn("Illetéktelen hozzáférési próbálkozás a SVIE beállításokhoz! Felhasználó: " + getSession().getUserId()); getSession().error("Nem rendelkezel a megfelelő jogosultságokkal!"); throw new RestartResponseException(getApplication().getHomePage()); } setHeaderLabelText("Csoportok adminisztrálása"); groups = groupManager.getAllGroups(true); filteredGroups = new ArrayList<Group>(groups); List<IColumn<Group, String>> columns = new ArrayList<IColumn<Group, String>>(); columns.add(new PanelColumn<Group>("Név", "name") { @Override protected Panel getPanel(String componentId, Group g) { return new GroupLink(componentId, g); } }); columns.add(new PanelColumn<Group>("Körvezető neve") { @Override protected Panel getPanel(String componentId, Group g) { // FIXME: nagyon gány, soronként 1 lekérdezés!!! User korvezeto = groupManager.findLeaderForGroup(g.getId()); return new UserLink(componentId, korvezeto); } }); columns.add(new PropertyColumn<Group, String>(new Model<String>("Elsődleges tagok száma"), "numberOfPrimaryMembers")); columns.add(new PanelColumn<Group>("SVIE tag?") { @Override protected Panel getPanel(String componentId, Group g) { return new CheckBoxHolder<Group>(componentId, g, "isSvie"); } }); columns.add(new PanelColumn<Group>("Küldöttek száma") { @Override protected Panel getPanel(String componentId, Group g) { return new SvieDelegateNumberField(componentId, g); } }); Form form = new Form("svieForm") { @Override protected void onSubmit() { svieManager.updateSvieGroupInfos(groups); getSession().info("A beállítások sikeresen mentésre kerültek"); setResponsePage(SvieGroupMgmt.class); } }; groupProvider = new SortableGroupDataProvider(filteredGroups); //azért van változóban, hogy később ha szeretnénk játszadozni a rowperpage-dzsel //egyszerűbb legyen. final AjaxFallbackDefaultDataTable table = new AjaxFallbackDefaultDataTable("table", columns, groupProvider, 100); table.setOutputMarkupId(true); DropDownChoice<String> filter = new DropDownChoice<String>("status", new PropertyModel<String>(this, "currentFilter"), Arrays.asList(new String[]{"svie tag", "nem svie tag"})); filter.add(new AjaxFormComponentUpdatingBehavior("onchange") { @Override protected void onUpdate(AjaxRequestTarget target) { filteredGroups.clear(); if (currentFilter == null) { filteredGroups.addAll(groups); } else { Iterator<Group> it = groups.iterator(); while (it.hasNext()) { Group temp = it.next(); if (currentFilter.equals("svie tag")) { if (temp.getIsSvie()) { filteredGroups.add(temp); } } else if (!temp.getIsSvie()) { filteredGroups.add(temp); } } } groupProvider.setGroups(filteredGroups); if (target != null) { target.add(table); } } }); form.add(filter); form.add(table); add(form); } }