package net.techreadiness.customer.action.task.user.update;
import static net.techreadiness.security.CorePermissionCodes.CORE_CUSTOMER_USER_RESET_PASSWORD;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import net.techreadiness.annotation.CoreSecured;
import net.techreadiness.service.common.ValidationError;
import net.techreadiness.service.exception.ServiceException;
import net.techreadiness.service.exception.ValidationServiceException;
import net.techreadiness.service.object.User;
import net.techreadiness.ui.action.task.user.UserTaskFlowAction;
import net.techreadiness.ui.tags.datagrid.DataGridState;
import net.techreadiness.ui.util.ConversationScoped;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.Preparable;
import com.opensymphony.xwork2.util.Element;
import com.opensymphony.xwork2.util.Key;
@Results({ @Result(name = "success", type = "redirectAction", params = { "actionName", "reset-password" }),
@Result(name = "invalid", type = "lastAction", params = { "actionName", "reset-password" }) })
public class SaveResetPasswordAction extends UserTaskFlowAction implements Preparable {
private static final long serialVersionUID = 1L;
@Key(Long.class)
@Element(Boolean.class)
private Map<Long, Boolean> users;
@ConversationScoped
private DataGridState<User> resetUsersDataGrid;
@Override
@CoreSecured({ CORE_CUSTOMER_USER_RESET_PASSWORD })
public String execute() {
for (Entry<Long, Boolean> user : users.entrySet()) {
if (user.getValue().booleanValue()) {
Long userId = user.getKey();
try {
userService.resetPassword(getServiceContext(), userId);
} catch (ValidationServiceException vse) {
List<ValidationError> errors = vse.getFaultInfo().getAttributeErrors();
for (ValidationError validationError : errors) {
addActionError(validationError.getOnlineMessage());
}
} catch (ServiceException se) {
addActionError(se.getMessage());
}
}
}
if (hasErrors()) {
return "invalid";
}
return SUCCESS;
}
public Map<Long, Boolean> getUsers() {
return users;
}
public DataGridState<User> getResetUsersDataGrid() {
return resetUsersDataGrid;
}
public void setResetUsersDataGrid(DataGridState<User> resetUsersDataGrid) {
this.resetUsersDataGrid = resetUsersDataGrid;
}
@Override
public void prepare() throws Exception {
users = new HashMap<>();
}
}