]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.server/src/main/java/org/argeo/slc/web/mvc/process/NewSlcExecutionController.java
Fix issue with RealizedFlow XML too big
[gpl/argeo-slc.git] / runtime / org.argeo.slc.server / src / main / java / org / argeo / slc / web / mvc / process / NewSlcExecutionController.java
index d4a67b19d91ed51f1cdcb061b8bf692b73a3dd22..5f225bff54ba0f09066d8ebb7ebffad8480f8a81 100644 (file)
@@ -1,13 +1,19 @@
 package org.argeo.slc.web.mvc.process;\r
 \r
 import java.io.BufferedReader;\r
+import java.io.ByteArrayInputStream;\r
+import java.io.InputStream;\r
 import java.util.UUID;\r
 \r
 import javax.servlet.http.HttpServletRequest;\r
 import javax.servlet.http.HttpServletResponse;\r
 \r
+import org.apache.commons.io.IOUtils;\r
 import org.apache.commons.logging.Log;\r
 import org.apache.commons.logging.LogFactory;\r
+import org.argeo.slc.core.attachment.Attachment;\r
+import org.argeo.slc.core.attachment.AttachmentsStorage;\r
+import org.argeo.slc.core.attachment.SimpleAttachment;\r
 import org.argeo.slc.msg.MsgConstants;\r
 import org.argeo.slc.msg.ObjectList;\r
 import org.argeo.slc.process.SlcExecution;\r
@@ -33,6 +39,8 @@ public class NewSlcExecutionController extends AbstractServiceController {
        private Marshaller marshaller;\r
        private SlcExecutionService slcExecutionService;\r
 \r
+       private AttachmentsStorage attachmentsStorage;\r
+\r
        @Override\r
        protected void handleServiceRequest(HttpServletRequest request,\r
                        HttpServletResponse response, ModelAndView modelAndView)\r
@@ -76,10 +84,11 @@ public class NewSlcExecutionController extends AbstractServiceController {
                                new SlcExecutionStep(SlcExecutionStep.TYPE_START,\r
                                                "Process started from the Web UI"));\r
 \r
-               ObjectList ol = new ObjectList(slcExecution.getRealizedFlows());\r
-               StringResult result = new StringResult();\r
-               marshaller.marshal(ol, result);\r
-               slcExecution.setRealizedFlowsXml(result.toString());\r
+               // ObjectList ol = new ObjectList(slcExecution.getRealizedFlows());\r
+               // StringResult result = new StringResult();\r
+               // marshaller.marshal(ol, result);\r
+               // slcExecution.setRealizedFlowsXml(result.toString());\r
+               storeRealizedFlows(slcExecution);\r
 \r
                slcExecutionService.newExecution(slcExecution);\r
 \r
@@ -87,6 +96,29 @@ public class NewSlcExecutionController extends AbstractServiceController {
                agent.runSlcExecution(slcExecution);\r
        }\r
 \r
+       protected void storeRealizedFlows(SlcExecution slcExecution) {\r
+               Attachment attachment = realizedFlowsAttachment(UUID.randomUUID()\r
+                               .toString(), slcExecution);\r
+               InputStream in = null;\r
+               try {\r
+\r
+                       ObjectList ol = new ObjectList(slcExecution.getRealizedFlows());\r
+                       StringResult result = new StringResult();\r
+                       marshaller.marshal(ol, result);\r
+\r
+                       in = new ByteArrayInputStream(result.toString().getBytes());\r
+                       attachmentsStorage.storeAttachment(attachment, in);\r
+\r
+                       slcExecution.setRealizedFlowsXml(attachment.getUuid());\r
+\r
+               } catch (Exception e) {\r
+                       log.error("Could not store realized flows as attachment #"\r
+                                       + attachment.getUuid(), e);\r
+               } finally {\r
+                       IOUtils.closeQuietly(in);\r
+               }\r
+       }\r
+\r
        public void setUnmarshaller(Unmarshaller unmarshaller) {\r
                this.unmarshaller = unmarshaller;\r
        }\r
@@ -103,4 +135,15 @@ public class NewSlcExecutionController extends AbstractServiceController {
                this.marshaller = marshaller;\r
        }\r
 \r
+       public void setAttachmentsStorage(AttachmentsStorage attachmentsStorage) {\r
+               this.attachmentsStorage = attachmentsStorage;\r
+       }\r
+\r
+       /** Unify labelling in the package */\r
+       static Attachment realizedFlowsAttachment(String attachmentUuid,\r
+                       SlcExecution slcExecution) {\r
+               return new SimpleAttachment(attachmentUuid,\r
+                               "RealizedFlows of SlcExecution #" + slcExecution.getUuid(),\r
+                               "text/xml");\r
+       }\r
 }\r