]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/controllers/ProcessController.java
Move NameVersion
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / controllers / ProcessController.java
index 8fedc47dad72c9a9a0f045878ef94d723c8479eb..bd5fd7b732ace9bc1c0a085d8ec1ac93616c70b9 100644 (file)
@@ -17,6 +17,7 @@
 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
@@ -24,9 +25,11 @@ import java.util.TreeSet;
 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
@@ -50,7 +53,6 @@ import org.springframework.xml.transform.StringSource;
 @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
@@ -145,7 +147,7 @@ public class ProcessController {
 \r
                slcExecution.setStatus(SlcExecution.STATUS_SCHEDULED);\r
                slcExecution.getSteps().add(\r
-                               new SlcExecutionStep(SlcExecutionStep.TYPE_START,\r
+                               new SlcExecutionStep(SlcExecutionStep.START,\r
                                                "Process started from the Web UI"));\r
 \r
                initializeSEM();\r
@@ -157,6 +159,94 @@ public class ProcessController {
                return ExecutionAnswer.ok("Execution completed properly");\r
        }\r
 \r
+       @RequestMapping("/tailSlcExecutionStepsCount.service")\r
+       protected ObjectList tailSlcExecutionSteps(@RequestParam String uuid,\r
+                       @RequestParam Integer stepCount) {\r
+               List<SlcExecutionStep> list = slcExecutionDao\r
+                               .tailSteps(uuid, stepCount);\r
+               return new ObjectList(list);\r
+       }\r
+\r
+       @RequestMapping("/tailSlcExecutionStepsOffset.service")\r
+       protected ObjectList tailSlcExecutionSteps(@RequestParam String uuid,\r
+                       @RequestParam String stepOffsetUuid) {\r
+               List<SlcExecutionStep> list = slcExecutionDao.tailSteps(uuid,\r
+                               stepOffsetUuid);\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