package net.techreadiness.ui.task;
import java.util.List;
import javax.inject.Inject;
import net.techreadiness.ui.BaseAction;
import net.techreadiness.util.GenericTypeUtils;
import org.springframework.context.ApplicationContext;
import com.google.common.collect.Lists;
import com.opensymphony.xwork2.Preparable;
public abstract class BaseTaskControlAction<T extends TaskFlowDefinition> extends BaseAction implements Preparable {
private static final long serialVersionUID = 1L;
private List<Task> availableTasks;
private List<Task> availableExternalTasks;
@Inject
private ApplicationContext applicationContext;
public T getTaskFlow() {
return (T) applicationContext.getBean(GenericTypeUtils.getTypeArguments(BaseTaskControlAction.class, getClass())
.get(0));
}
@Override
public void prepare() throws Exception {
availableTasks = Lists.newArrayList();
availableExternalTasks = Lists.newArrayList();
for (Task task : getTaskFlow().getTasks()) {
if (task.getPermissionCodes() == null
|| userService.hasPermission(getServiceContext(), task.getPermissionCodes())) {
availableTasks.add(task);
}
}
if (null != getTaskFlow().getExternalTasks()) {
for (Task task : getTaskFlow().getExternalTasks()) {
if (task.getPermissionCodes() == null
|| userService.hasPermission(getServiceContext(), task.getPermissionCodes())) {
availableExternalTasks.add(task);
}
}
}
}
public List<Task> getAvailableTasks() {
return availableTasks;
}
public List<Task> getAvailableExternalTasks() {
return availableExternalTasks;
}
}