package hu.sch.web.kp.group;
import hu.sch.domain.Group;
import hu.sch.domain.user.User;
import hu.sch.services.exceptions.NotImplementedException;
import hu.sch.services.exceptions.PekEJBException;
import hu.sch.web.kp.KorokPage;
import hu.sch.web.wicket.components.EditDelegatesForm;
import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValueConversionException;
/**
*
* @author aldaris
*/
public final class ChangeDelegates extends KorokPage {
public ChangeDelegates(final PageParameters params) {
Long groupId;
try {
groupId = params.get("id").toLong();
} catch (StringValueConversionException svce) {
error("Hibás paraméter!");
throw new RestartResponseException(getApplication().getHomePage());
}
final Group group = groupManager.findGroupById(groupId);
if (!isUserGroupLeader(group)) {
getSession().error("Nincsen jogosultságod a művelet végrehajtásához!");
throw new RestartResponseException(ShowGroup.class, new PageParameters().add("id", group.getId()));
}
setHeaderLabelText("Küldöttek beállítása");
add(new Label("numberOfDelegates",
(group.getDelegateNumber() == null ? "Nincs beállítva" : Integer.toString(group.getDelegateNumber()))));
add(new Label("groupName", group.getName()));
List<User> users = groupManager.findMembersWithPrimaryMembership(groupId);
add(new EditDelegatesForm("form", users) {
@Override
protected void onPopulateItem(ListItem<ExtendedUser> item, User user) {
//Nothing to do. :)
}
@Override
protected void onSubmit() {
List<ExtendedUser> eu = getLines();
int selected = 0; // a körvezető eleve küldött, a listától függetlenül.
List<ExtendedUser> modifications = new ArrayList<ExtendedUser>();
for (ExtendedUser extendedUser : eu) {
if (extendedUser.getSelected()) {
selected++;
}
if (extendedUser.getSelected() != extendedUser.getUser().getDelegated()) {
modifications.add(extendedUser);
}
}
if (group.getDelegateNumber() == null || selected > group.getDelegateNumber()) {
getSession().error("Ez a kör nem delegálhat ennyi tagot a küldöttgyűlésre!");
setResponsePage(new ChangeDelegates(params));
return;
}
for (ExtendedUser extendedUser : modifications) {
final User user = extendedUser.getUser();
user.setDelegated(extendedUser.getSelected());
try {
userManager.updateUser(user);
//userManager.setUserDelegateStatus(extendedUser.getUser(), extendedUser.getSelected());
} catch (PekEJBException ex) {
// TODO: deal with db and ds errors
throw new NotImplementedException("TODO: error handling for db and ds errors");
}
}
getSession().info("A változások sikeresen mentésre kerültek");
setResponsePage(ShowGroup.class, new PageParameters().add("id", group.getId()));
}
});
}
}