package org.appfuse.webapp.pages;
import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationMessage;
import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.appfuse.model.User;
import org.appfuse.service.UserExistsException;
import org.wicketstuff.annotation.mount.MountPath;
import javax.servlet.http.HttpServletRequest;
/**
* Page for editing current user.
*
* @author Marcin ZajÄ…czkowski, 2011-03-13
*/
@MountPath("userEdit")
@AuthorizeInstantiation({"ROLE_ADMIN", "ROLE_USER"})
public class CurrentUserEdit extends AbstractUserEdit {
private static final String USER_PROFILE_PROPERTY_PREFIX = "userProfile";
public CurrentUserEdit() {
super(NO_RESPONSE_PAGE, USER_PROFILE_PROPERTY_PREFIX, new Model<User>());
}
@Override
protected void onInitialize() {
//TODO: MZA: Here or in constructor?
//TODO: Quite odd - before super
User user = getUserManager().getUserByUsername(getCurrentUserUsername());
//TODO: An ugly hack required to not force user to enter his password on each edition. Will be fixed in APF-1370
user.setConfirmPassword(user.getPassword());
setUser(user);
super.onInitialize();
}
private String getCurrentUserUsername() {
String username = ((HttpServletRequest)getRequest().getContainerRequest()).getRemoteUser();
if (username == null) {
throw new IllegalStateException("Unable to get login of current user");
}
return username;
}
//TODO: MZA: Duplication with FromListUserEdit
@Override
protected void onSaveButtonSubmit() {
User user = getUser();
log.info("(current) onSubmit: {}", user);
log.info("(current) onSubmit (address): {}", user.getAddress());
try {
getUserManager().saveUser(user);
getSession().info(createDefaultInfoNotificationMessage(
new StringResourceModel("user.added", this, null, new Object[]{user.getFullName()})));
resolveAndSetResponsePage();
} catch (UserExistsException e) {
log.warn("User already exists", e);
error(new NotificationMessage(new StringResourceModel("errors.existing.user", this, null, new Object[] {
user.getUsername(), user.getEmail()})
));
}
}
@Override
protected void onDeleteButtonSubmit() {
throw new IllegalStateException("Delete button should not be able to use on edit current user page");
}
@Override
protected boolean getDisplayRolesGroupVisibility() {
return true;
}
@Override
protected boolean getAccountSettingsGroupVisibility() {
return false;
}
@Override
protected boolean getDeleteButtonVisibility() {
return false;
}
}