package net.techreadiness.customer.action.filebatch;
import java.io.FileInputStream;
import java.util.List;
import javax.inject.Inject;
import net.techreadiness.navigation.taskflow.filebatch.FileBatchTaskFlowData;
import net.techreadiness.navigation.taskflow.filebatch.FileBatchTaskFlowDefinition;
import net.techreadiness.service.FileService;
import net.techreadiness.service.exception.ServiceException;
import net.techreadiness.service.object.File;
import net.techreadiness.ui.tags.datagrid.DataGridState;
import net.techreadiness.ui.task.BaseTaskControlAction;
import net.techreadiness.ui.task.Task;
import net.techreadiness.ui.task.TaskFlowState;
import net.techreadiness.ui.util.ConversationScoped;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import com.google.common.collect.Lists;
public class ListAction extends BaseTaskControlAction<FileBatchTaskFlowDefinition> {
private static final long serialVersionUID = 1L;
@ConversationScoped(value = "fileDataGrid")
private DataGridState<File> fileDataGrid;
private String fileId;
private FileInputStream fileInputStream;
private String fileType;
private Long Id;
private String fileName;
@Inject
private FileItemProvider itemProvider;
@Inject
private FileService fileService;
@Inject
private FileBatchTaskFlowDefinition fileBatchTaskFlow;
@Inject
private FileBatchTaskFlowData fileBatchTaskFlowData;
@Action(value = "list", results = { @Result(name = "success", location = "/filebatch/list.jsp") })
@Override
public String execute() throws Exception {
getItemProvider().setServiceContext(getServiceContext());
return SUCCESS;
}
@Action(value = "download", results = { @Result(name = "success", type = "stream", params = { "contentType",
"application/octet-stream", "inputName", "fileInputStream", "contentDisposition",
"attachment;filename=\"%{fileName}\"", "bufferSize", "1024" }) })
public String download() throws Exception {
File file = fileService.getById(getServiceContext(), Long.valueOf(fileId));
// determine which file requested based on fileType:
// f = filename
// m = error messages
// d = error data
if ("m".equals(fileType)) {
fileName = file.getErrorMessageFilename();
} else if ("d".equals(fileType)) {
fileName = file.getErrorDataFilename();
} else {
fileName = file.getFilename();
}
fileInputStream = FileUtils
.openInputStream(new java.io.File(fileService.getUploadDir(getServiceContext()), fileName));
return SUCCESS;
}
@Action(value = "viewFileDetails", results = { @Result(name = "success", type = "redirectAction", params = {
"namespace", "/task/batch/details", "actionName", "details" }) })
public String detailsEditParticipations() throws ServiceException {
return routeToTask(FileBatchTaskFlowDefinition.TASK_FILEBATCH_DETAILS);
}
private String routeToTask(String taskName) {
List<File> files = Lists.newArrayList();
files.add(fileService.getById(getServiceContext(), getId()));
Task task = fileBatchTaskFlow.getTask(taskName);
TaskFlowState state = new TaskFlowState();
state.setTasks(Lists.newArrayList(task));
fileBatchTaskFlowData.setTaskFlowState(state);
fileBatchTaskFlowData.setFiles(files);
return SUCCESS;
}
public String getFileName() {
return fileName;
}
public DataGridState<File> getFileDataGrid() {
return fileDataGrid;
}
public FileItemProvider getItemProvider() {
return itemProvider;
}
public FileInputStream getFileInputStream() {
return fileInputStream;
}
public void setFileInputStream(FileInputStream fileInputStream) {
this.fileInputStream = fileInputStream;
}
public String getFileId() {
return fileId;
}
public void setFileId(String fileId) {
this.fileId = fileId;
}
public void setFileDataGrid(DataGridState<File> dataGrid) {
fileDataGrid = dataGrid;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public Long getId() {
return Id;
}
public void setId(Long id) {
Id = id;
}
}