package net.techreadiness.customer.action.user;
import java.util.List;
import javax.inject.Inject;
import net.techreadiness.navigation.taskflow.youraccount.YourAccountTaskFlowData;
import net.techreadiness.navigation.taskflow.youraccount.YourAccountTaskFlowDefinition;
import net.techreadiness.persistence.datagrid.OrgByUserItemProvider;
import net.techreadiness.persistence.datagrid.RoleByUserItemProvider;
import net.techreadiness.service.ConfigService;
import net.techreadiness.service.common.ViewDef;
import net.techreadiness.service.common.ViewDef.ViewDefTypeCode;
import net.techreadiness.service.exception.ServiceException;
import net.techreadiness.service.object.Org;
import net.techreadiness.service.object.Role;
import net.techreadiness.service.object.User;
import net.techreadiness.ui.BaseAction;
import net.techreadiness.ui.tags.datagrid.DataGridState;
import net.techreadiness.ui.task.Task;
import net.techreadiness.ui.task.TaskFlowState;
import net.techreadiness.ui.util.ConversationScoped;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.security.core.context.SecurityContextHolder;
import com.google.common.collect.Lists;
import com.opensymphony.xwork2.Preparable;
@Results({ @Result(name = "success", location = "/user/your-account.jsp") })
public class AccountDetailsAction extends BaseAction implements Preparable {
private static final long serialVersionUID = 1L;
private User user;
private ViewDef viewDef;
@Inject
private ConfigService configService;
@Inject
private RoleByUserItemProvider roleByUserItemProvider;
@Inject
private OrgByUserItemProvider orgByUserItemProvider;
@Inject
private YourAccountTaskFlowDefinition yourAccountTaskFlow;
@Inject
private YourAccountTaskFlowData yourAccountTaskFlowData;
@ConversationScoped
private DataGridState<Role> roleDataGridState;
@ConversationScoped
private DataGridState<Org> orgDataGridState;
@Override
public String execute() throws Exception {
user = userService.getByUsername(getServiceContext(), SecurityContextHolder.getContext().getAuthentication()
.getName());
roleByUserItemProvider.setScopeId(getServiceContext().getScopeId());
roleByUserItemProvider.setUserId(user.getUserId());
orgByUserItemProvider.setScopeId(getServiceContext().getScopeId());
orgByUserItemProvider.setUserId(user.getUserId());
viewDef = configService.getViewDefinition(getServiceContext(), ViewDefTypeCode.USER);
return SUCCESS;
}
@Action(value = "edit-account", results = { @Result(name = "success", type = "redirectAction", params = { "namespace",
"/task/youraccount/update", "actionName", "edit" }) })
public String youraccountEditAccount() throws ServiceException {
return routeToTask(YourAccountTaskFlowDefinition.TASK_EDIT_USERS);
}
@Action(value = "change-password", results = { @Result(name = "success", type = "redirectAction", params = {
"namespace", "/task/youraccount/update", "actionName", "password" }) })
public String youraccountChangePassword() throws ServiceException {
return routeToTask(YourAccountTaskFlowDefinition.TASK_CHANGE_PASSWORD);
}
private String routeToTask(String taskName) {
List<User> userList = Lists.newArrayList();
userList.add(user);
Task task = yourAccountTaskFlow.getTask(taskName);
TaskFlowState state = new TaskFlowState();
state.setTasks(Lists.newArrayList(task));
yourAccountTaskFlowData.setTaskFlowState(state);
yourAccountTaskFlowData.setStandardInvocation(false);
yourAccountTaskFlowData.setUsers(userList);
return SUCCESS;
}
public User getUser() {
return user;
}
public ViewDef getViewDef() {
return viewDef;
}
public RoleByUserItemProvider getRoleByUserItemProvider() {
return roleByUserItemProvider;
}
public OrgByUserItemProvider getOrgByUserItemProvider() {
return orgByUserItemProvider;
}
public DataGridState<Role> getRoleDataGridState() {
return roleDataGridState;
}
public DataGridState<Org> getOrgDataGridState() {
return orgDataGridState;
}
@Override
public void prepare() throws Exception {
user = userService.getByUsername(getServiceContext(), SecurityContextHolder.getContext().getAuthentication()
.getName());
}
}