package net.techreadiness.customer.action.user;
import java.util.HashSet;
import java.util.Set;
import javax.inject.Inject;
import net.techreadiness.navigation.taskflow.user.UserTaskFlowData;
import net.techreadiness.navigation.taskflow.user.UserTaskFlowDefinition;
import net.techreadiness.persistence.datagrid.OrgByUserItemProvider;
import net.techreadiness.persistence.datagrid.RoleByUserItemProvider;
import net.techreadiness.service.ConfigService;
import net.techreadiness.service.OrganizationService;
import net.techreadiness.service.RoleService;
import net.techreadiness.service.ScopeService;
import net.techreadiness.service.common.DataGridItemProvider;
import net.techreadiness.service.common.ViewDef;
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 com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.opensymphony.xwork2.Preparable;
public class AbstractUserAction extends BaseAction implements Preparable {
private static final long serialVersionUID = 1L;
protected Long userId;
protected Long orgId;
protected Long roleId;
protected User user;
protected Org org;
protected Role role;
protected boolean showTaskLinks;
protected ViewDef viewDef;
protected ViewDef roleViewDef;
protected ViewDef orgViewDef;
@Inject
protected ConfigService configService;
@Inject
protected ScopeService scopeService;
@Inject
protected OrganizationService orgService;
@Inject
protected RoleService roleService;
@ConversationScoped
protected DataGridState<User> userGrid;
@ConversationScoped
protected DataGridState<Role> roleDataGridState;
@ConversationScoped
protected DataGridState<Org> orgDataGridState;
@Inject
protected UserTaskFlowDefinition userTaskFlow;
@Inject
protected UserTaskFlowData userTaskFlowData;
@Inject
protected RoleByUserItemProvider roleByUserItemProvider;
@Inject
protected OrgByUserItemProvider orgByUserItemProvider;
@Override
public void prepare() throws Exception {
if (user == null) {
user = userService.getNew(getServiceContext());
userId = user.getUserId();
}
roleByUserItemProvider.setScopeId(getServiceContext().getScopeId());
roleByUserItemProvider.setUserId(user.getUserId());
orgByUserItemProvider.setScopeId(getServiceContext().getScopeId());
orgByUserItemProvider.setUserId(user.getUserId());
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getUserId() {
return userId;
}
public Long getOrgId() {
return orgId;
}
public void setOrgId(Long orgId) {
this.orgId = orgId;
}
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
public void setShowTaskLinks(boolean showTaskLinks) {
this.showTaskLinks = showTaskLinks;
}
public boolean isShowTaskLinks() {
return showTaskLinks;
}
public void setViewDef(ViewDef viewDef) {
this.viewDef = viewDef;
}
public ViewDef getViewDef() {
return viewDef;
}
public void setUser(User user) {
this.user = user;
roleByUserItemProvider.setUserId(user.getUserId());
orgByUserItemProvider.setUserId(user.getUserId());
}
public User getUser() {
return user;
}
public Org getOrg() {
return org;
}
public void setOrg(Org org) {
this.org = org;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
public void setUserGrid(DataGridState<User> userGrid) {
this.userGrid = userGrid;
}
public DataGridState<User> getUserGrid() {
return userGrid;
}
public DataGridItemProvider<Role> getRoleGridItemProvider() {
return roleByUserItemProvider;
}
public DataGridItemProvider<Org> getOrgGridItemProvider() {
return orgByUserItemProvider;
}
public void setRoleViewDef(ViewDef roleViewDef) {
this.roleViewDef = roleViewDef;
}
public ViewDef getRoleViewDef() {
return roleViewDef;
}
public void setRoleDataGridState(DataGridState<Role> roleDataGridState) {
this.roleDataGridState = roleDataGridState;
}
public DataGridState<Role> getRoleDataGridState() {
return roleDataGridState;
}
public void setOrgViewDef(ViewDef orgViewDef) {
this.orgViewDef = orgViewDef;
}
public ViewDef getOrgViewDef() {
return orgViewDef;
}
public void setOrgDataGridState(DataGridState<Org> orgDataGridState) {
this.orgDataGridState = orgDataGridState;
}
public DataGridState<Org> getOrgDataGridState() {
return orgDataGridState;
}
protected String routeToTask(String taskName) {
Set<User> userList = new HashSet<>();
userList.add(userService.getById(getServiceContext(), getUserId()));
Task task = userTaskFlow.getTask(taskName);
TaskFlowState state = new TaskFlowState();
state.setTasks(Lists.newArrayList(task));
userTaskFlowData.setTaskFlowState(state);
userTaskFlowData.setUsers(userList);
if (org != null) {
userTaskFlowData.setOrgs(Sets.newHashSet(org));
}
if (role != null) {
userTaskFlowData.setRoles(Sets.newHashSet(role));
}
return SUCCESS;
}
}