]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Module.js
Move to src
[gpl/argeo-slc.git] / server / org.argeo.slc.ria / src / argeo-ria-lib / slc / class / org / argeo / slc / ria / execution / Module.js
diff --git a/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Module.js b/server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Module.js
new file mode 100644 (file)
index 0000000..5a3dd2d
--- /dev/null
@@ -0,0 +1,122 @@
+/**\r
+ * Wrapper for ExecutionModule server object\r
+ */\r
+qx.Class.define("org.argeo.slc.ria.execution.Module", {\r
+       \r
+       extend : qx.core.Object,\r
+       \r
+       properties : {\r
+               /**\r
+                * The name of the module\r
+                */\r
+               name : {\r
+                       check : "String",\r
+                       init : ""\r
+               },\r
+               /**\r
+                * The version of the module\r
+                */\r
+               version : {\r
+                       check : "String",\r
+                       init : ""\r
+               },\r
+               /**\r
+                * All execution flows registered by their name\r
+                */\r
+               executionFlows : {\r
+                       check : "Map"\r
+               },\r
+               /**\r
+                * All execution specs registered by their name\r
+                */\r
+               executionSpecs : {\r
+                       check : "Map"\r
+               },\r
+               /**\r
+                * XML description (castor)\r
+                */\r
+               xmlNode : {\r
+                       apply : "_applyXmlNode"\r
+               }\r
+       },\r
+       \r
+       statics : {\r
+               XPATH_NAME : "slc:execution-module-descriptor/slc:name",\r
+               XPATH_VERSION : "slc:execution-module-descriptor/slc:version",\r
+               XPATH_EXECUTION_FLOWS : "slc:execution-module-descriptor/slc:execution-flows/slc:execution-flow-descriptor",\r
+               XPATH_EXECUTION_SPECS : "slc:execution-module-descriptor/slc:execution-specs/slc:default-execution-spec"\r
+       },\r
+       \r
+       construct : function(){\r
+               this.base(arguments);\r
+               this.setExecutionFlows({});\r
+               this.setExecutionSpecs({});\r
+       },\r
+       \r
+       members : {\r
+               /**\r
+                * Add an execution flow to this module\r
+                * @param executionFlow {org.argeo.slc.ria.execution.Flow} An instance of execution.Flow\r
+                */\r
+               addExecutionFlow : function(executionFlow){\r
+                       var spec = this.getExecutionSpecByName(executionFlow.getExecutionSpecName());\r
+                       if(spec){\r
+                               executionFlow.setExecutionSpec(spec);\r
+                       }else{\r
+                               this.error("Warning, reference to an unknown ExecutionSpec : "+executionFlow.getExecutionSpecName());\r
+                       }\r
+                       this.getExecutionFlows()[executionFlow.getName()] = executionFlow;\r
+               },\r
+               \r
+               /**\r
+                * Add an execution Spec to this module\r
+                * @param executionSpec {org.argeo.slc.ria.execution.Spec} An instance of ExecutionSpec\r
+                */\r
+               addExecutionSpec : function(executionSpec){\r
+                       this.getExecutionSpecs()[executionSpec.getName()] = executionSpec;\r
+               },\r
+               /**\r
+                * Find an execution spec by its name\r
+                * @param name {String} Name of the spec\r
+                * @return {org.argeo.slc.ria.execution.Spec} The spec\r
+                */\r
+               getExecutionSpecByName : function(name){\r
+                       return this.getExecutionSpecs()[name];\r
+               },\r
+               \r
+               /**\r
+                * Find an execution flow by its name\r
+                * @param name {String} name of the flow\r
+                * @return {org.argeo.slc.ria.execution.Flow} The flow\r
+                */\r
+               getExecutionFlowByName : function(name){\r
+                       return this.getExecutionFlows()[name];\r
+               },\r
+               \r
+               /**\r
+                * An xml node containing the castor mapped description of this object\r
+                * @param xmlNode {Node}\r
+                */\r
+               _applyXmlNode : function(xmlNode){\r
+                       // Parse now\r
+                       this.setName(org.argeo.ria.util.Element.getSingleNodeText(xmlNode, this.self(arguments).XPATH_NAME));\r
+                       this.setVersion(org.argeo.ria.util.Element.getSingleNodeText(xmlNode, this.self(arguments).XPATH_VERSION));\r
+                       // Parse Specs first\r
+                       var specs = org.argeo.ria.util.Element.selectNodes(xmlNode, this.self(arguments).XPATH_EXECUTION_SPECS);\r
+                       for(i=0; i< specs.length;i++){\r
+                               var execSpec = new org.argeo.slc.ria.execution.Spec();\r
+                               execSpec.setXmlNode(specs[i]);\r
+                               this.addExecutionSpec(execSpec);\r
+                       }\r
+                       // Now parse Flows : to do AFTER specs\r
+                       var flows = org.argeo.ria.util.Element.selectNodes(xmlNode, this.self(arguments).XPATH_EXECUTION_FLOWS);\r
+                       for(var i=0;i<flows.length;i++){\r
+                               var execFlow = new org.argeo.slc.ria.execution.Flow();\r
+                               execFlow.setXmlNode(flows[i]);\r
+                               this.addExecutionFlow(execFlow);\r
+                       }\r
+               }\r
+               \r
+       }       \r
+       \r
+});
\ No newline at end of file