package hu.sch.web.kp.svie;
import hu.sch.domain.enums.SvieStatus;
import hu.sch.domain.user.User;
import hu.sch.services.SvieManagerLocal;
import hu.sch.web.kp.KorokPage;
import hu.sch.web.wicket.components.choosers.MembershipTypeChooser;
import hu.sch.web.wicket.components.choosers.SvieStatusChooser;
import hu.sch.web.wicket.components.customlinks.LinkPanel;
import hu.sch.web.wicket.components.customlinks.SvieRegPdfLink;
import hu.sch.web.wicket.components.customlinks.UserLink;
import hu.sch.web.wicket.components.tables.LinkColumn;
import hu.sch.web.wicket.components.tables.PanelColumn;
import hu.sch.web.wicket.util.SortableUserDataProvider;
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 SvieUserMgmt extends KorokPage {
@Inject
SvieManagerLocal svieManager;
private static Logger log = LoggerFactory.getLogger(SvieUserMgmt.class);
private List<User> users;
private List<User> filteredUsers;
private SortableUserDataProvider userProvider;
private SvieStatus currentFilter;
public SvieUserMgmt() {
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("Felhasználók adminisztrálása");
users = svieManager.getSvieMembers();
filteredUsers = new ArrayList<User>(users);
List<IColumn<User, String>> columns = new ArrayList<IColumn<User, String>>();
columns.add(new PanelColumn<User>("Név", "name") {
@Override
protected Panel getPanel(String componentId, User u) {
return new UserLink(componentId, u);
}
});
columns.add(new PanelColumn<User>("Tagság típusa", "svieMembershipType") {
@Override
protected Panel getPanel(String componentId, User u) {
return new MembershipTypeChooser(componentId, u);
}
});
columns.add(new PanelColumn<User>("Tagság állapota") {
@Override
protected Panel getPanel(String componentId, User u) {
return new SvieStatusChooser(componentId, u);
}
});
columns.add(new PropertyColumn<User, String>(new Model<String>("Elsődleges kör"), "sviePrimaryMembershipText"));
columns.add(new LinkColumn<User>("Felvételi kérvény") {
@Override
protected boolean isVisible(User user) {
return !user.getSvieStatus().equals(SvieStatus.ELFOGADVA);
}
@Override
protected LinkPanel getLinkPanel(String componentId, User user) {
return new SvieRegPdfLink(componentId, user);
}
});
Form form = new Form("svieForm") {
@Override
protected void onSubmit() {
svieManager.updateSvieInfos(filteredUsers);
getSession().info("A beállítások sikeresen mentésre kerültek");
setResponsePage(SvieUserMgmt.class);
}
};
userProvider = new SortableUserDataProvider(filteredUsers);
//azért van változóban, hogy később ha szeretnénk játszadozni a rowperpage-dzsel
//egyszerűbb legyen.
final AjaxFallbackDefaultDataTable<User, String> table =
new AjaxFallbackDefaultDataTable<User, String>("table", columns, userProvider, 100);
table.setOutputMarkupId(true);
DropDownChoice<SvieStatus> filter =
new DropDownChoice<SvieStatus>("status",
new PropertyModel<SvieStatus>(this, "currentFilter"),
Arrays.asList(SvieStatus.values()));
filter.add(new AjaxFormComponentUpdatingBehavior("onchange") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
filteredUsers.clear();
if (currentFilter == null) {
filteredUsers.addAll(users);
} else {
Iterator<User> it = users.iterator();
while (it.hasNext()) {
User temp = it.next();
if (temp.getSvieStatus().equals(currentFilter)) {
filteredUsers.add(temp);
}
}
}
userProvider.setUsers(filteredUsers);
if (target != null) {
target.add(table);
}
}
});
form.add(filter);
form.add(table);
add(form);
}
}