package org.argeo.slc.web.mvc.controllers;\r
\r
import java.io.BufferedReader;\r
+import java.text.SimpleDateFormat;\r
import java.util.Comparator;\r
import java.util.List;\r
import java.util.SortedSet;\r
import java.util.UUID;\r
\r
import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
\r
import org.apache.commons.logging.Log;\r
import org.apache.commons.logging.LogFactory;\r
+import org.argeo.slc.SlcException;\r
import org.argeo.slc.core.attachment.AttachmentsStorage;\r
import org.argeo.slc.dao.process.SlcExecutionDao;\r
import org.argeo.slc.execution.ExecutionModuleDescriptor;\r
@Controller\r
public class ProcessController {\r
\r
- public final static String KEY_ANSWER = "__answer";\r
private final static Log log = LogFactory.getLog(ProcessController.class);\r
\r
private SlcExecutionDao slcExecutionDao;\r
return new ObjectList(list);\r
}\r
\r
+ @RequestMapping("/downloadSlcExecution.service")\r
+ protected void downloadSlcExecution(@RequestParam String uuid,\r
+ @RequestParam String ext, HttpServletResponse response)\r
+ throws Exception {\r
+ String contentType;\r
+ // cf. http://en.wikipedia.org/wikServicei/Internet_media_type\r
+ if ("csv".equals(ext))\r
+ contentType = "text/csv";\r
+ else if ("pdf".equals(ext))\r
+ contentType = "application/pdf";\r
+ else if ("zip".equals(ext))\r
+ contentType = "application/zip";\r
+ else if ("html".equals(ext))\r
+ contentType = "application/html";\r
+ else if ("txt".equals(ext) || "log".equals(ext))\r
+ contentType = "text/plain";\r
+ else if ("doc".equals(ext) || "docx".equals(ext))\r
+ contentType = "application/msword";\r
+ else if ("xls".equals(ext) || "xlsx".equals(ext))\r
+ contentType = "application/vnd.ms-excel";\r
+ else if ("xml".equals(ext))\r
+ contentType = "text/xml";\r
+ else\r
+ contentType = "Content-Type: application/force-download";\r
+\r
+ String name = "Process-" + uuid + "." + ext;\r
+\r
+ SlcExecution process = slcExecutionDao.getSlcExecution(uuid);\r
+\r
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");\r
+\r
+ // TODO: put it in a separate view\r
+ if ("log".equals(ext)) {\r
+ StringBuffer buf = new StringBuffer("");\r
+ buf.append("#\n# PROCESS " + process.getUuid() + "\n#\n\n");\r
+ buf\r
+ .append("Started at " + df.format(process.getStartDate())\r
+ + "\n");\r
+ buf.append("Ended at " + df.format(process.getEndDate()) + "\n");\r
+ buf.append("On host " + process.getHost() + "\n");\r
+ buf.append("\n# LOG\n\n");\r
+ for (SlcExecutionStep step : process.getSteps()) {\r
+ buf.append(df.format(step.getTimestamp()));\r
+ buf.append(" ");\r
+ for (int i = 0; i < step.getLogLines().size(); i++) {\r
+ if (i > 0)\r
+ buf.append('\n');\r
+ buf.append(step.getLogLines().get(i));\r
+ }\r
+ buf.append(" - ");\r
+ buf.append(step.getType());\r
+ buf.append(" - ");\r
+ buf.append('[').append(step.getThread()).append(']');\r
+ buf.append('\n');\r
+ }\r
+ prepareDownloadResponse(name, contentType, response);\r
+ response.getWriter().print(buf);\r
+ } else {\r
+ throw new SlcException("Unsupported content type " + contentType);\r
+ }\r
+ }\r
+\r
+ protected void prepareDownloadResponse(String name, String contentType,\r
+ HttpServletResponse response) {\r
+ response.setHeader("Content-Disposition", "attachment; filename=\""\r
+ + name + "\"");\r
+ response.setContentType(contentType + ";name=\"" + name + "\"");\r
+ response.setHeader("Expires", "0");\r
+ response.setHeader("Cache-Control", "no-cache, must-revalidate");\r
+ response.setHeader("Pragma", "no-cache");\r
+ }\r
+\r
private void initializeSEM() {\r
slcExecutionManager = new SlcExecutionManager(unmarshaller, marshaller,\r
attachmentsStorage);\r