]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Message.js
Last XML updates
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / argeo-ria-lib / slc / class / org / argeo / slc / ria / execution / Message.js
diff --git a/org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Message.js b/org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Message.js
new file mode 100644 (file)
index 0000000..e7e4ca5
--- /dev/null
@@ -0,0 +1,148 @@
+/**\r
+ * A generic JMS slcExecution message encapsulator.\r
+ */\r
+qx.Class.define("org.argeo.slc.ria.execution.Message", {\r
+       extend : qx.core.Object,\r
+       /**\r
+        * New instance\r
+        * @param uuid {String} The Uuid of the message. If none is passed, one is generated.\r
+        */\r
+       construct : function(uuid){\r
+               this.base(arguments);\r
+               if(uuid){\r
+                       this.setUuid(uuid);\r
+               }else{\r
+                       var s = [];\r
+                       var itoh = '0123456789ABCDEF';\r
+                       for (var i = 0; i <36; i++) s[i] = Math.floor(Math.random()*0x10);\r
+                       s[14] = 4;  // Set 4 high bits of time_high field to version\r
+                       s[19] = (s[19] & 0x3) | 0x8;  // Specify 2 high bits of clock sequence\r
+                       for (var i = 0; i <36; i++) s[i] = itoh[s[i]];\r
+                       s[8] = s[13] = s[18] = s[23] = '-';\r
+                       this.setUuid(s.join('').toLowerCase());                 \r
+               }\r
+               this.setAttributes({});\r
+       },\r
+       properties : {\r
+               /**\r
+                * The unique id identifying the message\r
+                */\r
+               uuid : {\r
+                       check : "String"\r
+               },\r
+               /**\r
+                * Execution status\r
+                */\r
+               status : {\r
+                       check : "String",\r
+                       init : "STARTED"\r
+               },\r
+               /**\r
+                * Execution type\r
+                */\r
+               type : {\r
+                       check : "String",\r
+                       init : "slcAnt"\r
+               },\r
+               /**\r
+                * Execution Host\r
+                */\r
+               host : {\r
+                       check : "String",\r
+                       init : "localhost"\r
+               },\r
+               /**\r
+                * Execution User\r
+                */\r
+               user : {\r
+                       check : "String",\r
+                       init : "user"\r
+               },\r
+               /**\r
+                * Date of the message. now() by default.\r
+                */\r
+               date : {\r
+                       check : "String", \r
+                       init : new Date().toString()\r
+               },\r
+               /**\r
+                * Additionnal attributes as map of key/values\r
+                */\r
+               attributes : {\r
+                       check : "Map"\r
+               },\r
+               batchEntrySpecs : {\r
+                       check : "Array",\r
+                       init : []\r
+               }\r
+       },\r
+       members : {\r
+               \r
+               /**\r
+                * Add a free attribute to the message\r
+                * @param attName {String} Name\r
+                * @param attValue {String} Value\r
+                */\r
+               addAttribute: function(attName, attValue){\r
+                       var attr = this.getAttributes();\r
+                       attr[attName] = attValue;\r
+                       this.setAttributes(attr);\r
+               },\r
+               \r
+               addBatchEntrySpec : function(entrySpec){\r
+                       this.getBatchEntrySpecs().push(entrySpec);\r
+               },\r
+               \r
+               /**\r
+                * Build the xml formatted message body to send\r
+                * \r
+                * @return {String} The message content as Xml\r
+                */\r
+               toXml : function (){\r
+                       var builder = new qx.util.StringBuilder();\r
+                       builder.add('<slc:slc-execution  xmlns:slc="http://argeo.org/projects/slc/schemas" uuid="'+this.getUuid()+'">');\r
+                       builder.add('<slc:status>'+this.getStatus()+'</slc:status>');\r
+                       builder.add('<slc:type>'+this.getType()+'</slc:type>');\r
+                       builder.add('<slc:host>'+this.getHost()+'</slc:host>');\r
+                       builder.add('<slc:user>'+this.getUser()+'</slc:user>');\r
+                       var flows = this.getBatchEntrySpecs();\r
+                       if(flows.length){\r
+                               builder.add('<realized-flows>');\r
+                               for(var i=0;i<flows.length;i++){\r
+                                       builder.add(flows[i].toXml());  \r
+                               }\r
+                               builder.add('</realized-flows>');\r
+                       }                       \r
+                       var attr = this.getAttributes();\r
+                       if(qx.lang.Object.getLength(attr)){\r
+                               builder.add('<slc:attributes>');\r
+                               for(var key in attr){\r
+                                       builder.add('<slc:attribute name="'+key+'">'+attr[key]+'</slc:attribute>');\r
+                               }\r
+                               builder.add('</slc:attributes>');\r
+                       }\r
+                       builder.add('</slc:slc-execution>');\r
+                       return builder.get();\r
+               },\r
+               \r
+               /**\r
+                * Parse an XML answer and fill the object with it.\r
+                * @param slcExecXml {String} An slcExecMessage mapped in XML.\r
+                */\r
+               fromXml : function(slcExecXml){\r
+                       var NSMap = {slc:"http://argeo.org/projects/slc/schemas"};                      \r
+                       this.setStatus(org.argeo.ria.util.Element.getSingleNodeText(slcExecXml, "slc:status", NSMap));\r
+                       this.setType(org.argeo.ria.util.Element.getSingleNodeText(slcExecXml, "slc:type", NSMap));\r
+                       this.setHost(org.argeo.ria.util.Element.getSingleNodeText(slcExecXml, "slc:host", NSMap));\r
+                       this.setUser(org.argeo.ria.util.Element.getSingleNodeText(slcExecXml, "slc:user", NSMap));\r
+                       var attributes = org.argeo.ria.util.Element.selectNodes(slcExecXml, "slc:attribute", NSMap);\r
+                       for(var i=0;i<attributes.length;i++){\r
+                               this.addAttribute(attribute.getAttribute("name"), attribute.firstChild);\r
+                       }\r
+                       var stepsDates = org.argeo.ria.util.Element.selectNodes(slcExecXml, "slc:steps/slc:slc-execution-step/slc:begin", NSMap);\r
+                       if(stepsDates.length){\r
+                               this.setDate(org.argeo.ria.util.Element.getSingleNodeText(stepsDates[stepsDates.length-1], ".", NSMap));\r
+                       }\r
+               }\r
+       }       \r
+});
\ No newline at end of file