package hu.sch.web.kp.admin;
import hu.sch.domain.user.StudentStatus;
import hu.sch.domain.user.User;
import hu.sch.domain.user.UserStatus;
import hu.sch.services.AccountManager;
import hu.sch.services.exceptions.PekEJBException;
import hu.sch.web.error.NotFound;
import hu.sch.web.kp.KorokPage;
import hu.sch.web.profile.admin.AdminPage;
import javax.inject.Inject;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RequiredTextField;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Admin page to create new users.
*
* TODO: rename class to follow XXXPage naming convention.
*
* @author aldaris
*/
public class CreateNewPerson extends KorokPage {
private static Logger logger = LoggerFactory.getLogger(CreateNewPerson.class);
//
@Inject
protected AccountManager accountManager;
private User user = new User();
public CreateNewPerson() {
if (!isCurrentUserAdmin()) {
throw new RestartResponseException(NotFound.class);
}
Form<User> form = new Form<User>("form", new CompoundPropertyModel<>(user)) {
@Override
protected void onSubmit() {
user.setStudentStatus(StudentStatus.UNKNOWN);
user.setUserStatus(UserStatus.ACTIVE);
try {
accountManager.createUser(user, RandomStringUtils.randomAlphanumeric(10));
} catch (PekEJBException ex) {
logger.error("Could not save user", ex);
throw new RestartResponseException(CreateNewPerson.class);
}
setResponsePage(AdminPage.class, new PageParameters().set("uid", user.getScreenName()));
}
};
final WebMarkupContainer wmc = new WebMarkupContainer("wmc");
RequiredTextField<String> uidTF = new RequiredTextField<String>("screenName");
final Label notifier = new Label("notifier", "");
AjaxFormComponentUpdatingBehavior afcup = new AjaxFormComponentUpdatingBehavior("onblur") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
if (user.getScreenName() != null) {
if (userManager.findUserByScreenName(user.getScreenName()) != null) {
notifier.setDefaultModelObject("Foglalt uid!");
}
notifier.setDefaultModelObject("Szabad uid");
}
if (target != null) {
target.add(wmc);
}
}
};
uidTF.add(afcup);
wmc.add(uidTF);
wmc.add(notifier);
wmc.setOutputMarkupId(true);
form.add(wmc);
form.add(new RequiredTextField<String>("lastName"));
form.add(new RequiredTextField<String>("firstName"));
form.add(new RequiredTextField<String>("emailAddress"));
add(form);
}
}