--- /dev/null
+/**\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