package net.techreadiness.ui.action.task.user; import java.util.HashSet; import java.util.List; import net.techreadiness.navigation.taskflow.user.UserTaskFlowData; import net.techreadiness.navigation.taskflow.user.UserTaskFlowDefinition; import net.techreadiness.service.exception.ServiceException; import net.techreadiness.service.object.User; import net.techreadiness.ui.tags.datagrid.DataGridState; import net.techreadiness.ui.task.BaseTaskFlowAction; import org.apache.commons.lang3.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Result; public class UserTaskFlowAction extends BaseTaskFlowAction<UserTaskFlowData, UserTaskFlowDefinition> { private static final long serialVersionUID = 1L; private String dataGridId; private static String USER_SEARCH_GRID = "userGrid"; @Action(value = "userTaskFlowBegin", results = { @Result(name = "success", type = "redirectAction", params = { "actionName", "${taskFlowData.taskFlowState.currentTask.action}", "namespace", "${taskFlowData.taskFlowState.currentTask.namespace}" }) }) public String beginTaskFlow() throws ServiceException { startNewTaskFlow(); DataGridState<User> userGrid = conversation.get(DataGridState.class, USER_SEARCH_GRID); List<User> list = userGrid.getSelectedItems(); getTaskFlowData().setUsers(new HashSet<>(list)); return SUCCESS; } @Action(value = "altUserTaskFlowBegin", results = { @Result(name = "success", type = "redirectAction", params = { "actionName", "${taskFlowData.taskFlowState.currentTask.action}", "namespace", "${taskFlowData.taskFlowState.currentTask.namespace}" }) }) public String altBeginTaskFlow() throws ServiceException { getTaskFlowData().setStandardInvocation(false); return SUCCESS; } @Override public String endTaskFlow() throws ServiceException { if (getTaskFlowData().isStandardInvocation()) { DataGridState<User> dataGridState = conversation.get(DataGridState.class, USER_SEARCH_GRID); List<User> selectedUsers = dataGridState.getSelectedItems(); for (User user : selectedUsers) { String userId = String.valueOf(user.getUserId()); boolean found = false; for (User userElement : getTaskFlowData().getUsers()) { String id = String.valueOf(userElement.getUserId()); if (id.equals(userId)) { found = true; break; } } if (!found) { dataGridState.deSelectItem(userId); } } for (User userElement : getTaskFlowData().getUsers()) { String userId = String.valueOf(userElement.getUserId()); if (StringUtils.isNotBlank(userId)) { dataGridState.selectItem(userId, userElement); } } } return SUCCESS; } public void setDataGridId(String dataGridId) { this.dataGridId = dataGridId; } public String getDataGridId() { return dataGridId; } }