Cleaning, ref management, label/tooltips in tree, etc.
authorCharles du Jeu <charles.dujeu@gmail.com>
Fri, 3 Jul 2009 10:18:45 +0000 (10:18 +0000)
committerCharles du Jeu <charles.dujeu@gmail.com>
Fri, 3 Jul 2009 10:18:45 +0000 (10:18 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2678 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/BatchView.js
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/FlowsSelectorView.js
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/SpecsEditorView.js
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/BatchEntrySpec.js
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/CellEditorFactory.js
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Flow.js
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Module.js
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Spec.js
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Value.js

index 03f27df4399aa9aa81f40f6eb696b1782fb8ab17..0574296710dd1943a28b6835353d59ea005593ae 100644 (file)
@@ -405,17 +405,22 @@ qx.Class.define("org.argeo.slc.ria.BatchView",
                                var batchEntrySpec = selection[i].getUserData("batchEntrySpec");\r
                                slcExecMessage.addBatchEntrySpec(batchEntrySpec);\r
                        }\r
-                       var req = org.argeo.slc.ria.SlcApi.getNewSlcExecutionService(\r
-                                       agentUuid, slcExecMessage.toXml());\r
-                       req.send();\r
-                       // Force logs refresh right now!\r
-                       qx.event.Timer.once(function() {\r
-                                               var command = org.argeo.ria.event.CommandsManager\r
-                                                               .getInstance().getCommandById("reloadlogs");\r
-                                               if (command) {\r
-                                                       command.execute();\r
-                                               }\r
-                                       }, this, 2000);\r
+                       try{\r
+                               var xmlMessage = slcExecMessage.toXml();\r
+                               var req = org.argeo.slc.ria.SlcApi.getNewSlcExecutionService(\r
+                                               agentUuid, xmlMessage);\r
+                               req.send();\r
+                               // Force logs refresh right now!\r
+                               qx.event.Timer.once(function() {\r
+                                                       var command = org.argeo.ria.event.CommandsManager\r
+                                                                       .getInstance().getCommandById("reloadlogs");\r
+                                                       if (command) {\r
+                                                               command.execute();\r
+                                                       }\r
+                                               }, this, 2000);\r
+                       }catch(e){\r
+                               this.error(e);                          \r
+                       }\r
                },\r
                \r
                clearBatchForAgentId : function(agentId){\r
index e06a819310548bfa4bdea206bf0f30705d43abb6..d7d6eafeca323a8aa9d4d13e0429d23d8429a4c3 100644 (file)
@@ -77,12 +77,12 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                                                this.setEnabled(true);\r
                                                                break;\r
                                                        case "org.argeo.ria.components.PersistentTreeFolder" :\r
-                                                               if (item.getTree().getRoot() == item)\r
+                                                               if (item.getTree() && item.getTree().getRoot() == item)\r
                                                                        break;\r
                                                                this.setEnabled(true);\r
                                                                break;\r
                                                        case "org.argeo.ria.components.DynamicTreeFolder" :\r
-                                                               if (item.getTree().getRoot() == item)\r
+                                                               if (item.getTree() && item.getTree().getRoot() == item)\r
                                                                        break;  \r
                                                                if (item.getState() == "loaded")\r
                                                                        this.setEnabled(true);\r
@@ -91,13 +91,25 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                        },\r
                                        command : null\r
                                },\r
+                               "reloadfull" : {\r
+                                       label : "Reload Agents",\r
+                                       icon : "org.argeo.slc.ria/view-refresh.png",\r
+                                       shortcut : "control+h",\r
+                                       enabled : true,\r
+                                       menu : "Launcher",\r
+                                       toolbar : "list",\r
+                                       callback : function(e) {\r
+                                               this.rootNode.reload();\r
+                                       },\r
+                                       command : null\r
+                               },                              \r
                                "reloadtree" : {\r
-                                       label : "Reload",\r
+                                       label : "Reload Node",\r
                                        icon : "org.argeo.slc.ria/view-refresh.png",\r
-                                       shortcut : "Control+m",\r
+                                       shortcut : null,\r
                                        enabled : false,\r
-                                       menu : "Launcher",\r
-                                       toolbar : "launcher",\r
+                                       menu : null,\r
+                                       toolbar : null,\r
                                        callback : function(e) {\r
                                                if (this.tree.isSelectionEmpty()) {     return; }                                               \r
                                                var selected = this.tree.getSelection()[0];\r
@@ -160,7 +172,7 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                }\r
        },\r
 \r
-       statics : {\r
+       statics : {             \r
                /**\r
                 * Static loader for the "agent" level (first level)\r
                 * \r
@@ -179,7 +191,7 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                        req.addListener("completed", function(response) {\r
                                var xmlDoc = response.getContent();\r
                                var nodes = org.argeo.ria.util.Element.selectNodes(xmlDoc,\r
-                                               "//slc:slc-agent-descriptor");\r
+                                               "/slc:object-list/slc:slc-agent-descriptor");\r
                                var modulesLoader = org.argeo.slc.ria.FlowsSelectorView.modulesLoader;\r
                                \r
                                for (var i = 0; i < nodes.length; i++) {\r
@@ -192,8 +204,9 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                        agents[uuid] = host;\r
                                        if(newAgents) newAgents[uuid] = host;\r
                                        var agentFolder = new org.argeo.ria.components.DynamicTreeFolder(\r
-                                                       host + ' (' + uuid + ')', modulesLoader,\r
-                                                       "Loading Modules...", folder.getDragData());\r
+                                                       host, modulesLoader, "Loading Modules...", folder.getDragData());\r
+                                       org.argeo.slc.ria.FlowsSelectorView.attachToolTip(agentFolder, uuid);\r
+                                       agentFolder.setPersistentTreeID(folder.getPersistentTreeID()+"_"+uuid);\r
                                        agentFolder.setUserData("agentUuid", uuid);\r
                                        agentFolder.setIcon("org.argeo.slc.ria/computer.png");\r
                                        folder.add(agentFolder);\r
@@ -234,29 +247,35 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                        req.addListener("completed", function(response) {\r
                                var descriptors = org.argeo.ria.util.Element.selectNodes(\r
                                                response.getContent(),\r
-                                               "slc:object-list/slc:execution-module-descriptor");\r
+                                               "slc:object-list/" + org.argeo.slc.ria.execution.Module.XPATH_ROOT);\r
                                var mods = {};\r
                                for (var i = 0; i < descriptors.length; i++) {\r
-                                       var name = org.argeo.ria.util.Element.getSingleNodeText(\r
-                                                       descriptors[i], "slc:name");\r
-                                       var version = org.argeo.ria.util.Element.getSingleNodeText(\r
-                                                       descriptors[i], "slc:version");\r
+                                       var tmpModule = new org.argeo.slc.ria.execution.Module();\r
+                                       try{                                            \r
+                                               tmpModule.setXmlNode(descriptors[i]);\r
+                                       }catch(e){\r
+                                               qx.log.Logger.error(e);\r
+                                       }\r
+                                       var name = tmpModule.getName();\r
+                                       var version = tmpModule.getVersion();\r
                                        if (!mods[name])\r
                                                mods[name] = [];\r
-                                       mods[name].push(version);\r
+                                       mods[name].push(tmpModule);\r
                                }\r
                                var flowLoader = org.argeo.slc.ria.FlowsSelectorView.flowLoader;\r
                                for (var key in mods) {\r
                                        for (var i = 0; i < mods[key].length; i++) {\r
+                                               var module = mods[key][i];\r
                                                var versionFolder = new org.argeo.ria.components.DynamicTreeFolder(\r
-                                                               key + ' (' + mods[key][i] + ')', flowLoader,\r
+                                                               module.getDescription(), flowLoader,\r
                                                                "Loading Flows", folder.getDragData());\r
                                                versionFolder.setUserData("moduleData", {\r
                                                                        name : key,\r
-                                                                       version : mods[key][i]\r
+                                                                       version : module.getVersion()\r
                                                                });\r
                                                versionFolder.setIcon("org.argeo.slc.ria/archive.png");\r
                                                versionFolder.setUserData("agentUuid", agentId);\r
+                                               org.argeo.slc.ria.FlowsSelectorView.attachToolTip(versionFolder, key + ' (' + module.getVersion() + ')');\r
                                                // Warning, we must add it AFTER setting the user data, \r
                                                // because of the persistent loading mechanism.\r
                                                folder.add(versionFolder);\r
@@ -297,6 +316,9 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                                var execFlows = executionModule.getExecutionFlows();\r
                                for (var key in execFlows) {\r
                                        var file = new qx.ui.tree.TreeFile(key);\r
+                                       if(execFlows[key].getDescription() != ""){\r
+                                               org.argeo.slc.ria.FlowsSelectorView.attachToolTip(file, execFlows[key].getDescription());\r
+                                       }\r
                                        file.setIcon("org.argeo.slc.ria/system.png");\r
                                        var path = execFlows[key].getPath();\r
                                        file.setUserData("executionModule",     executionModule);\r
@@ -316,6 +338,12 @@ qx.Class.define("org.argeo.slc.ria.FlowsSelectorView", {
                        req.send();\r
                },\r
 \r
+               attachToolTip : function(nodeItem, description){\r
+                       var tt = new qx.ui.tooltip.ToolTip(description);\r
+                       tt.setShowTimeout(0);\r
+                       nodeItem.setToolTip(tt);                        \r
+               },\r
+               \r
                /**\r
                 * Parse a string path and search if there is a root node.\r
                 * \r
index e1009bcf73206d72c91d0d3870fce7b85c6a7f54..dcc9a2660767a9a3b0d2fb201ef78d0ab576c9a3 100644 (file)
@@ -102,12 +102,13 @@ qx.Class.define("org.argeo.slc.ria.SpecsEditorView",
                                var valueObj = values[key];\r
                                var hidden = valueObj.getHidden();\r
                                var type = valueObj.getSpecType();\r
-                               if(type == "primitive" && !hidden){\r
+                               if((type == "primitive" || type== "ref")&& !hidden){\r
                                        metadata = {\r
                                                key : key,\r
                                                disabled : valueObj.getFrozen(),\r
                                                type : type,\r
-                                               subType : valueObj.getSpecSubType() \r
+                                               subType : valueObj.getSpecSubType(),\r
+                                               refList : (type=="ref"?valueObj.getRefList():[])\r
                                        }\r
                                        data.push([key, valueObj.getValue(), metadata]);\r
                                }\r
index 6269b49c064d5ac1411ec8071e8b7ef9dd79288d..91231a8b89e558d7ed5e749a9da01d8369a2d551 100644 (file)
@@ -49,13 +49,20 @@ qx.Class.define("org.argeo.slc.ria.execution.BatchEntrySpec", {
                        var valuesXml = '';\r
                        var values = this.getValues();\r
                        for(var key in values){\r
+                               if(values[key].getValue() == null){\r
+                                       throw new Error("Cannot send empty values! (Parameter "+key+")");\r
+                               }\r
                                valuesXml += values[key].toValueXml();\r
                        }\r
-                       var execFlowDescXML = '<slc:execution-flow-descriptor name="'+this.getFlow().getName()+'" executionSpec="'+this.getName()+'"><slc:values>'+valuesXml+'</slc:values></slc:execution-flow-descriptor>';\r
+                       var execFlowDescXML = '<slc:execution-flow-descriptor name="'+this.getFlow().getName()+'" executionSpec="'+this.getName()+'">';\r
+                       if(this.getFlow().getDescription()!=""){\r
+                               execFlowDescXML += '<slc:description>'+this.getFlow().getDescription()+'</slc:description>';\r
+                       }\r
+                       execFlowDescXML += '<slc:values>'+valuesXml+'</slc:values></slc:execution-flow-descriptor>';\r
                        \r
                        var execSpecDescXML = this.getOriginalSpec().toXml();\r
                        \r
-                       var moduleData = '<slc:module-name>'+this.getModule().getName()+'</slc:module-name><slc:module-version>'+this.getModule().getVersion()+'</slc:module-version>';\r
+                       var moduleData = this.getModule().moduleDataToXml();\r
                        \r
                        return '<slc:realized-flow>'+moduleData + execFlowDescXML + execSpecDescXML +'</slc:realized-flow>';\r
                        \r
@@ -81,7 +88,7 @@ qx.Class.define("org.argeo.slc.ria.execution.BatchEntrySpec", {
                                instanceValues[key] = instValue;\r
                        }\r
                        this.setValues(instanceValues);\r
-                       //this.debug(instanceValues);\r
+                       this.debug(instanceValues);\r
                }\r
        }\r
 });
\ No newline at end of file
index 1be48083699f5b34fef07475ade92057e5ae4597..d9fba15c9d7f9ad5c5c597a37530228c52f5c21a 100644 (file)
@@ -73,34 +73,83 @@ qx.Class.define("org.argeo.slc.ria.execution.CellEditorFactory",
                        var metaData = rowData[2];
                        if (metaData.disabled) {
                                return null; // var cellEditor = new
-                                                               // qx.ui.table.celleditor.TextField();
-                       }
-
-                       var cellEditor = new qx.ui.form.TextField;
-                       cellEditor.setAppearance("table-editor-textfield");
-                       cellEditor.originalValue = cellInfo.value;                      
-                       if (cellInfo.value === null) {
-                               cellInfo.value = "";
-                       }
-                       cellEditor.setValue("" + cellInfo.value);
-
-                       cellEditor.addListener("appear", function() {
-                               cellEditor.selectAll();
-                       });
-
-                       var validationFunc;
-                       if (metaData.subType == "integer") {
-                               validationFunc = function(newValue, oldValue){
-                                       var isNum = !isNaN(newValue * 1);
-                                       if (!isNum) {
-                                               alert("Warning, this field only accepts Integers!");
-                                               return oldValue;
-                                       }
-                                       return newValue;
-                               };
+                                                        // qx.ui.table.celleditor.TextField();
                        }
+                       if(metaData.type == "primitive"){
+                               var cellEditor = new qx.ui.form.TextField;
+                               cellEditor.setAppearance("table-editor-textfield");
+                               cellEditor.originalValue = cellInfo.value;                      
+                               if (cellInfo.value === null) {
+                                       cellInfo.value = "";
+                               }
+                               cellEditor.setValue("" + cellInfo.value);
+       
+                               cellEditor.addListener("appear", function() {
+                                       cellEditor.selectAll();
+                               });
+       
+                               var validationFunc;
+                               if (metaData.subType == "integer") {
+                                       validationFunc = function(newValue, oldValue){
+                                               var isNum = !isNaN(newValue * 1);
+                                               if (!isNum) {
+                                                       alert("Warning, this field only accepts Integers!");
+                                                       return oldValue;
+                                               }
+                                               return newValue;
+                                       };
+                               }
+                               cellEditor.setUserData("validationFunc", validationFunc);
+                       }else if(metaData.type == "ref"){
+                             var cellEditor = new qx.ui.form.SelectBox().set({
+                               appearance: "table-editor-selectbox"
+                             });
+                             cellEditor.setUserData("validationFunc", function(value, oldValue){
+                                       if(value == "__empty__"){
+                                               alert("Warning, value cannot be empty! You must select at least one option below.");
+                                               return oldValue;
+                                       }
+                                       return value;
+                             });
+                       
+                             var value = cellInfo.value;
+                             cellEditor.originalValue = value;
+                             // replace null values
+                             if ( value === null ) {
+                               value = "";
+                             }
+                                 if(value == ""){
+                                       cellEditor.add(new qx.ui.form.ListItem("", null, "__empty__"));
+                                 }
+                             var list = metaData.refList;
+                             if (list)
+                             {
+                               var item;
                        
-                       cellEditor.setUserData("validationFunc", validationFunc);
+                               for (var i=0,l=list.length; i<l; i++)
+                               {
+                                 var row = list[i];
+                                 if ( row instanceof Array ) {
+                                       // Array [key, description] where description can be null
+                                   item = new qx.ui.form.ListItem(row[0], null, row[0]);
+                                   if(row[1]){
+                                       item.setToolTip(new qx.ui.tooltip.ToolTip(row[1]));
+                                   }
+                                 } else {
+                                   item = new qx.ui.form.ListItem(row, null, row)
+                                 }
+                                 if(value == item.getValue()){
+                                       cellEditor.setSelected(item);
+                                 }
+                                 cellEditor.add(item);
+                               };
+                             }
+                       
+                             cellEditor.setValue("" + value);
+                             cellEditor.addListener("appear", function() {
+                               cellEditor.open();
+                             });
+                       }
                        
                        return cellEditor;
                },
index 449b1220fda460d109e6f3b4235a2b98471854a1..0167d9b4eed8fee6db31d56d476f5c2067605619 100644 (file)
@@ -13,6 +13,10 @@ qx.Class.define("org.argeo.slc.ria.execution.Flow", {
                        check : "String",\r
                        init : ""\r
                },\r
+               description : {\r
+                       check : "String",\r
+                       init : ""\r
+               },\r
                /**\r
                 * An optional path describing this flow\r
                 */\r
@@ -52,6 +56,10 @@ qx.Class.define("org.argeo.slc.ria.execution.Flow", {
                 * Xpath to the name \r
                 */\r
                XPATH_NAME : "@name",\r
+               /**\r
+                * Path to the description\r
+                */\r
+               XPATH_DESCRIPTION : "slc:description",\r
                /**\r
                 * XPath to the ExecutionSpec name\r
                 */\r
@@ -79,6 +87,7 @@ qx.Class.define("org.argeo.slc.ria.execution.Flow", {
                        this.set({\r
                                name : org.argeo.ria.util.Element.getSingleNodeText(xmlNode, this.self(arguments).XPATH_NAME),\r
                                path : org.argeo.ria.util.Element.getSingleNodeText(xmlNode, this.self(arguments).XPATH_PATH),\r
+                               description : org.argeo.ria.util.Element.getSingleNodeText(xmlNode, this.self(arguments).XPATH_DESCRIPTION) || "",\r
                                executionSpecName : org.argeo.ria.util.Element.getSingleNodeText(xmlNode, this.self(arguments).XPATH_EXEC_SPEC_NAME)\r
                        });\r
                        var values = org.argeo.ria.util.Element.selectNodes(xmlNode, this.self(arguments).XPATH_VALUES);\r
@@ -98,7 +107,7 @@ qx.Class.define("org.argeo.slc.ria.execution.Flow", {
                        if(specType == "primitive"){\r
                                xpath = 'slc:value[@key="'+key+'"]/slc:primitive-value[@type="'+specSubType+'"]';\r
                        }else if(specType == "ref"){\r
-                               xpath = 'slc:value[@key="'+key+'"]/slc:ref-value/slc:label';\r
+                               xpath = 'slc:value[@key="'+key+'"]/slc:ref-value/@ref';\r
                        }\r
                        return org.argeo.ria.util.Element.getSingleNodeText(this.getValues(), xpath);\r
                }\r
index 3337b3ca9799432cb50c49bf449e92f3e9beb961..5ce6579b427fe0a54a824245fe2247f77190e2a4 100644 (file)
@@ -13,6 +13,14 @@ qx.Class.define("org.argeo.slc.ria.execution.Module", {
                        check : "String",\r
                        init : ""\r
                },\r
+               label : {\r
+                       check : "String",\r
+                       init : ""                       \r
+               },\r
+               description : {\r
+                       check : "String",\r
+                       init : ""                       \r
+               },\r
                /**\r
                 * The version of the module\r
                 */\r
@@ -41,10 +49,13 @@ qx.Class.define("org.argeo.slc.ria.execution.Module", {
        },\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
+               XPATH_ROOT : "slc:execution-module-descriptor",         \r
+               XPATH_NAME : "slc:name",\r
+               XPATH_LABEL : "slc:label",\r
+               XPATH_DESCRIPTION : "slc:description",\r
+               XPATH_VERSION : "slc:version",\r
+               XPATH_EXECUTION_FLOWS : "slc:execution-flows/slc:execution-flow-descriptor",\r
+               XPATH_EXECUTION_SPECS : "slc:execution-specs/slc:default-execution-spec"\r
        },\r
        \r
        construct : function(){\r
@@ -93,27 +104,44 @@ qx.Class.define("org.argeo.slc.ria.execution.Module", {
                        return this.getExecutionFlows()[name];\r
                },\r
                \r
+               moduleDataToXml : function(){\r
+                       var xmlData = '<slc:module-name>'+this.getName()+'</slc:module-name>';\r
+                       xmlData += '<slc:module-version>'+this.getVersion()+'</slc:module-version>';\r
+                       return xmlData;\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) || "Not Found");\r
-                       this.setVersion(org.argeo.ria.util.Element.getSingleNodeText(xmlNode, this.self(arguments).XPATH_VERSION));\r
+                       var appendRoot = "";\r
+                       if(xmlNode.nodeName != this.self(arguments).XPATH_ROOT){\r
+                               appendRoot = this.self(arguments).XPATH_ROOT+"/";\r
+                       }\r
+                       // Parse now                    \r
+                       this.setName(org.argeo.ria.util.Element.getSingleNodeText(xmlNode, appendRoot + this.self(arguments).XPATH_NAME) || "Not Found");\r
+                       this.setVersion(org.argeo.ria.util.Element.getSingleNodeText(xmlNode, appendRoot + this.self(arguments).XPATH_VERSION));\r
+                       this.setLabel(org.argeo.ria.util.Element.getSingleNodeText(xmlNode, appendRoot + this.self(arguments).XPATH_LABEL) || this.getName());\r
+                       this.setDescription(org.argeo.ria.util.Element.getSingleNodeText(xmlNode, appendRoot + this.self(arguments).XPATH_DESCRIPTION) || "");\r
+                       \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
+                       var specs = org.argeo.ria.util.Element.selectNodes(xmlNode, appendRoot + this.self(arguments).XPATH_EXECUTION_SPECS);\r
+                       if(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
                        }\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
+                               // Now parse Flows : to do AFTER specs\r
+                       var flows = org.argeo.ria.util.Element.selectNodes(xmlNode, appendRoot + this.self(arguments).XPATH_EXECUTION_FLOWS);\r
+                       if(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
index a1fd08a3f94f2c0dc0c2cfe0ac0f642919f58407..8cd45832ad45ea5cb75663596c18086ca4d5880a 100644 (file)
@@ -56,7 +56,7 @@ qx.Class.define("org.argeo.slc.ria.execution.Spec", {
                 * @param xmlNode {Node} Castor representation of this object\r
                 */             \r
                _applyXmlNode : function(xmlNode){\r
-                       // Parse now\r
+                       // Parse now                    \r
                        this.setName(org.argeo.ria.util.Element.getSingleNodeText(xmlNode, this.self(arguments).XPATH_NAME));\r
                        var values = org.argeo.ria.util.Element.selectNodes(xmlNode, this.self(arguments).XPATH_VALUES);\r
                        var parsedValues = {};\r
@@ -73,12 +73,7 @@ qx.Class.define("org.argeo.slc.ria.execution.Spec", {
                 * @return {String} An XML String\r
                 */\r
                toXml : function(){\r
-                       var valuesXml = '';\r
-                       var values = this.getValues();\r
-                       for(var key in values){\r
-                               valuesXml += values[key].toAttributeXml();\r
-                       }\r
-                       return '<slc:default-execution-spec name="'+this.getName()+'"><slc:values>'+valuesXml+'</slc:values></slc:default-execution-spec>';\r
+                       return org.argeo.ria.util.Element.getXMLString(this.getXmlNode());\r
                }\r
        }       \r
        \r
index eb56580b6bac5e54d28cb7f3157d86fa64e19c01..d8cbc9be984e98bc4ba4d8cb3bd30c22be67e780 100644 (file)
@@ -55,6 +55,9 @@ qx.Class.define("org.argeo.slc.ria.execution.Value", {
                 */\r
                xmlSpecNode : {\r
                        apply : "_applyXmlSpecNode"\r
+               },\r
+               refList : {\r
+                       check : "Array"\r
                }\r
        },\r
        \r
@@ -63,7 +66,7 @@ qx.Class.define("org.argeo.slc.ria.execution.Value", {
        },\r
        \r
        construct : function(){\r
-               this.base(arguments);\r
+               this.base(arguments);           \r
        },\r
        \r
        members : {             \r
@@ -86,6 +89,15 @@ qx.Class.define("org.argeo.slc.ria.execution.Value", {
                                }else if(child.nodeName == "slc:ref-spec-attribute"){\r
                                        this.setSpecType("ref");\r
                                        this.setSpecSubType(org.argeo.ria.util.Element.getSingleNodeText(child, "@targetClassName")||"");\r
+                                       var choices = org.argeo.ria.util.Element.selectNodes(child, "slc:choices/slc:ref-value-choice");\r
+                                       var refList = []; \r
+                                       for(var k=0;k<choices.length;k++){\r
+                                               var choice = choices[k];\r
+                                               var name = org.argeo.ria.util.Element.getSingleNodeText(choice, "@name");\r
+                                               var description = org.argeo.ria.util.Element.getSingleNodeText(choice, "slc:description");\r
+                                               refList.push([name, (description||"")]);\r
+                                       }\r
+                                       this.setRefList(refList);\r
                                }\r
                                this.set({\r
                                        parameter : (org.argeo.ria.util.Element.getSingleNodeText(child, "@isParameter")=="true"?true:false),\r
@@ -94,24 +106,7 @@ qx.Class.define("org.argeo.slc.ria.execution.Value", {
                                });                             \r
                        }\r
                },\r
-                               \r
-               /**\r
-                * Create an XML Representation of this value\r
-                * @return {String} The XML String\r
-                */\r
-               toAttributeXml : function(){\r
-                       var valueTag = '';\r
-                       var specAttribute = '';\r
-                       if(this.getSpecType() == "primitive"){\r
-                               valueTag =  (this.getValue()?this.getValue():'');\r
-                               specAttribute = '<slc:primitive-spec-attribute isParameter="'+(this.getParameter()?"true":"false")+'" isFrozen="'+(this.getFrozen()?"true":"false")+'" isHidden="'+(this.getHidden()?"true":"false")+'" type="'+this.getSpecSubType()+'">'+valueTag+'</slc:primitive-spec-attribute>';\r
-                       }else if(this.getSpecType() == "ref"){\r
-                               valueTag = (this.getValue()?'<slc:label>'+this.getValue()+'</slc:label>':'');\r
-                               specAttribute = '<slc:ref-spec-attribute isParameter="'+(this.getParameter()?"true":"false")+'" isFrozen="'+(this.getFrozen()?"true":"false")+'" isHidden="'+(this.getHidden()?"true":"false")+'" targetClassName="'+this.getSpecSubType()+'">'+valueTag+'</slc:ref-spec-attribute>';\r
-                       }\r
-                       return '<slc:value key="'+this.getKey()+'">'+specAttribute+'</slc:value>';\r
-               },\r
-               \r
+                                               \r
                toValueXml : function(){\r
                        var valueTag = '';\r
                        var specAttribute = '';\r
@@ -119,8 +114,7 @@ qx.Class.define("org.argeo.slc.ria.execution.Value", {
                                valueTag =  this.getValue();\r
                                specAttribute = '<slc:primitive-value type="'+this.getSpecSubType()+'">'+valueTag+'</slc:primitive-value>';\r
                        }else if(this.getSpecType() == "ref"){\r
-                               valueTag = '<slc:label>'+this.getValue()+'</slc:label>';\r
-                               specAttribute = '<slc:ref-value >'+valueTag+'</slc:ref-value>';\r
+                               specAttribute = '<slc:ref-value ref="'+this.getValue()+'" />';\r
                        }\r
                        return '<slc:value key="'+this.getKey()+'">'+specAttribute+'</slc:value>';                      \r
                }\r