]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Data model for batch entry, spec editor basis.
authorCharles du Jeu <charles.dujeu@gmail.com>
Fri, 27 Feb 2009 15:21:36 +0000 (15:21 +0000)
committerCharles du Jeu <charles.dujeu@gmail.com>
Fri, 27 Feb 2009 15:21:36 +0000 (15:21 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2199 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/NewLauncherApplet.js
org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/BatchEntrySpec.js [new file with mode: 0644]
org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Flow.js
org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Module.js
org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/Spec.js
org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/SpecEditor.js [new file with mode: 0644]

index 929c2664debce396084191371fd38daac01cec4b..6004291975ee1bf064cfe62641b728c761e8cfe0 100644 (file)
@@ -59,10 +59,12 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
                                callback        : function(e){
                                        var sel = this.list.getSortedSelection();
                                        var item = sel[0];
-                                       alert('Edit Specs for : ' + item.getLabel());
+                                       var execFlow = item.getUserData("batchEntrySpec").getFlow();
+                                       var specEditor = new org.argeo.slc.ria.execution.SpecEditor(execFlow);
+                                       specEditor.attachAndShow();
                                },
                                selectionChange : function(viewId, selection){
-                                       if(viewId != "form") return;
+                                       if(viewId != "form:list") return;
                                        this.setEnabled(false);
                                        if((selection && selection.length == 1)) this.setEnabled(true);
                                },
@@ -77,10 +79,17 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
                                toolbar         : null,
                                callback        : function(e){
                                        var sel = this.list.getSortedSelection();
-                                       alert('Remove '+ sel.length+ ' elements from batch');
+                                       var modal = new org.argeo.ria.components.Modal("Confirm", null);
+                                       modal.addConfirm("Are you sure you want to remove<br> the selected test" + (sel.length>1?"s":"") + " from the Batch?");
+                                       modal.addListener("ok", function(){
+                                               for(var i=0;i<sel.length;i++){
+                                                       this.list.remove(sel[i]);
+                                               }
+                                       }, this);
+                                       modal.attachAndShow();                                          
                                },
                                selectionChange : function(viewId, selection){
-                                       if(viewId != "form") return;
+                                       if(viewId != "form:list") return;                                       
                                        this.setEnabled(false);
                                        if((selection && selection.length > 0)) this.setEnabled(true);
                                },                              
@@ -100,10 +109,10 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
                                command         : null
                        },
                        "reloadtree" : {
-                               label           : "Reload Node", 
+                               label           : "Reload", 
                                icon            : "resource/slc/view-refresh.png",
                                shortcut        : "Control+m",
-                               enabled         : true,
+                               enabled         : false,
                                menu            : "Launcher",
                                toolbar         : "launcher",
                                callback        : function(e){
@@ -111,7 +120,17 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
                                        if(selected.classname == "org.argeo.ria.components.DynamicTreeFolder"){
                                                selected.reload();
                                        }
-                               },                              
+                               },  
+                               selectionChange : function(viewId, selection){
+                                       if(viewId != "form:tree") return;
+                                       if(!selection || selection.length != 1) return;
+                                       var item = selection[0];
+                                       if(!qx.Class.isSubClassOf(qx.Class.getByName(item.classname), qx.ui.tree.AbstractTreeItem)) return;
+                                       this.setEnabled(false);
+                                       if(qx.Class.isSubClassOf(qx.Class.getByName(item.classname), org.argeo.ria.components.DynamicTreeFolder)){
+                                               this.setEnabled(true);
+                                       }
+                               },
                                command         : null
                        }
                }
@@ -128,15 +147,22 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
 
   statics : {
        flowLoader : function(folder){
-               var moduleData = folder.getUserData("executionModule");
-               var req = org.argeo.ria.remote.RequestManager.getInstance().getRequest("stub.xml", "GET", "application/xml");
+               var moduleData = folder.getUserData("moduleData");
+               var req = org.argeo.ria.remote.RequestManager.getInstance().getRequest("../argeo-ria-src/stub.xml", "GET", "application/xml");
                req.addListener("completed", function(response){
                        var executionModule = new org.argeo.slc.ria.execution.Module();                                         
                        executionModule.setXmlNode(response.getContent());
+                       //
+                       // ARTIFIALLY REPLACE MODULE NAME / VERSION, FOR TESTS PURPOSES
+                       //
+                       executionModule.setName(moduleData.name);
+                       executionModule.setVersion(moduleData.version);
+                       // END
                        var execFlows = executionModule.getExecutionFlows();
                        for(var key in execFlows){
                                var file = new qx.ui.tree.TreeFile(key);
-                               file.setUserData("executionFlow", execFlows);
+                               file.setUserData("executionModule", executionModule);
+                               file.setUserData("executionFlow", execFlows[key]);
                                folder.add(file);
                        }
                        folder.setLoaded(true);
@@ -163,7 +189,7 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
                                        folder.getDragData()
                                );
                                moduleFolder.add(versionFolder);
-                               //versionFolder.setUserData("executionModule", "object");
+                               versionFolder.setUserData("moduleData", {name:key, version:mods[key][i]});
                        }
                        folder.setLoaded(true);
                }
@@ -264,6 +290,16 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
                this.tree.setRoot(root);
                root.setOpen(true);
                
+               this.tree.addListener("changeSelection", function(e){
+                       var viewSelection = this.getViewSelection();
+                       viewSelection.setViewId("form:tree");
+                       viewSelection.clear();
+                       var sel = this.tree.getSortedSelection();
+                       for(var i=0;i<sel.length;i++){
+                               viewSelection.addNode(sel[i]);
+                       }                       
+               }, this);
+               
                this.listPane = new qx.ui.container.Composite(new qx.ui.layout.Dock());
                var listToolBar = new qx.ui.toolbar.ToolBar();          
                var toolGroup = new qx.ui.toolbar.Part();               
@@ -288,10 +324,14 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
                this.list.setSelectionMode("multi");
                this.list.setDroppable(true);
                this.list.addListener("drop", function(e){
-                 var label = e.getRelatedTarget().getLabel();
-                 var li = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
-                 li.add(new qx.ui.basic.Label(label));
-                 var item = new qx.ui.form.ListItem(label, e.getRelatedTarget().getIcon());
+                       var target = e.getRelatedTarget();
+                       var executionModule = target.getUserData("executionModule");
+                       var executionFlow = target.getUserData("executionFlow");
+                       var label = executionModule.getName()+"/"+executionModule.getVersion()+"/"+executionFlow.getName();
+                       var icon = target.getIcon();
+                       
+                 var item = new qx.ui.form.ListItem(label, icon);
+                 item.setUserData("batchEntrySpec", new org.argeo.slc.ria.execution.BatchEntrySpec(executionModule, executionFlow));
                  item.setPaddingTop(1);
                  item.setPaddingBottom(2);
                  this.list.add(item);
@@ -302,6 +342,7 @@ qx.Class.define("org.argeo.slc.ria.NewLauncherApplet",
                
                this.list.addListener("changeSelection", function(e){
                        var viewSelection = this.getViewSelection();
+                       viewSelection.setViewId("form:list");
                        viewSelection.clear();
                        var listSel = this.list.getSortedSelection();
                        for(var i=0;i<listSel.length;i++){
diff --git a/org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/BatchEntrySpec.js b/org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/BatchEntrySpec.js
new file mode 100644 (file)
index 0000000..3bb37fc
--- /dev/null
@@ -0,0 +1,19 @@
+/**\r
+ * Data model for an entry of the Batch list : original Spec, flow and module, and currently computed value.\r
+ */\r
+qx.Class.define("org.argeo.slc.ria.execution.BatchEntrySpec", {\r
+       extend : org.argeo.slc.ria.execution.Spec,\r
+       \r
+       properties : {\r
+               module :{},\r
+               flow : {},\r
+               originalSpec : {}               \r
+       },\r
+       \r
+       construct : function(module, flow){\r
+               this.base(arguments);\r
+               this.setModule(module);\r
+               this.setFlow(flow);\r
+               this.setOriginalSpec(flow.getExecutionSpec());\r
+       }\r
+});
\ No newline at end of file
index ed23ff04a158a2a4ad562fcb82ce30f82bb4d95d..75da046ca4fa4f14d6baea06a1034e26130375c8 100644 (file)
@@ -39,7 +39,9 @@ qx.Class.define("org.argeo.slc.ria.execution.Flow", {
                XPATH_VALUES : "slc:values"\r
        },\r
        \r
-       construct : function(){},\r
+       construct : function(){\r
+               this.base(arguments);\r
+       },\r
        \r
        members : {             \r
                /**\r
index 8e69c92b2b3b574294c78a2857bcc05bf893690f..b3e30349636dff62386a2a21e741ee7917c90668 100644 (file)
@@ -49,7 +49,9 @@ qx.Class.define("org.argeo.slc.ria.execution.Module", {
                XPATH_EXECUTION_SPECS : "slc:execution-module-descriptor/slc:executionSpecs/slc:simple-execution-spec"\r
        },\r
        \r
-       construct : function(){},\r
+       construct : function(){\r
+               this.base(arguments);\r
+       },\r
        \r
        members : {\r
                /**\r
index 0dc1eb0a877892a633cefccde4e5901ebc7e06fb..85a8d4a514127998b4e5f37040bca7e4cb65ec58 100644 (file)
@@ -33,7 +33,9 @@ qx.Class.define("org.argeo.slc.ria.execution.Spec", {
                XPATH_VALUES : "slc:values"\r
        },\r
        \r
-       construct : function(){},\r
+       construct : function(){\r
+               this.base(arguments);\r
+       },\r
        \r
        members : {\r
                /**\r
diff --git a/org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/SpecEditor.js b/org.argeo.slc.webapp/src/main/webapp/argeo-ria-lib/slc/class/org/argeo/slc/ria/execution/SpecEditor.js
new file mode 100644 (file)
index 0000000..f302c3d
--- /dev/null
@@ -0,0 +1,90 @@
+/**\r
+ * Generic modal popup window.\r
+ * It is layed out with a dock layout. When adding components to it, they are added as "center".\r
+ * @author Charles du Jeu\r
+ */\r
+qx.Class.define("org.argeo.slc.ria.execution.SpecEditor",\r
+{\r
+       extend : qx.ui.window.Window,\r
+  \r
+       events : {\r
+               /**\r
+                * Triggered when the user clicks the "ok" button. \r
+                */\r
+               "ok" : "qx.event.type.Event"\r
+       },\r
+       /**\r
+        * \r
+        * @param caption {String} Title of the window\r
+        * @param icon {String} Icon of the window\r
+        * @param text {String} Default content of the window.\r
+        */\r
+       construct : function(executionFlow){\r
+               this.base(arguments, "Spec Editor");\r
+               this.set({\r
+                       showMaximize : false,\r
+                       showMinimize : false,\r
+                       width: parseInt(qx.bom.Viewport.getWidth()*80/100),\r
+                       height: parseInt(qx.bom.Viewport.getHeight()*80/100)\r
+               });\r
+               this.setLayout(new qx.ui.layout.Dock());\r
+               this.setModal(true);\r
+               this.center();\r
+               if(executionFlow){\r
+                       this.addContent(new qx.ui.basic.Label("Editing specs for flow : "+executionFlow.getName()));\r
+               }else{\r
+                       this.addCloseButton();\r
+               }\r
+       },\r
+       \r
+       members : {\r
+               /**\r
+                * Display a component (panel) in the center of the popup\r
+                * @param panel {qx.ui.core.Widget} A gui component (will be set at width 100%).\r
+                */\r
+               addContent: function(panel){\r
+                       this.add(panel, {edge:'center', width:'100%'});\r
+                       this.addCloseButton();\r
+               },\r
+               /**\r
+                * Automatically attach to the application root, then show.\r
+                */\r
+               attachAndShow:function(){\r
+                       org.argeo.ria.components.ViewsManager.getInstance().getApplicationRoot().add(this);                     \r
+                       this.show();\r
+               },\r
+               /**\r
+                * Adds a close button bottom-center aligned to the popup\r
+                */\r
+               addCloseButton : function(){\r
+                       this.closeButton = new qx.ui.form.Button("Close");\r
+                       this.closeButton.addListener("execute", this._closeAndDestroy, this);\r
+                       this.add(this.closeButton, {edge:'south'});                     \r
+               },\r
+               /**\r
+                * Adds two buttons bottom-center aligned (Ok and Cancel). \r
+                * Ok button has no listener by default, Cancel will close and destroy the popup.\r
+                */\r
+               addOkCancel : function(){\r
+                       var buttonPane = new qx.ui.container.Composite(new qx.ui.layout.HBox(5, 'right'));\r
+                       buttonPane.setAlignX("center");\r
+                       this.add(buttonPane, {edge:"south"});\r
+                       this.okButton = new qx.ui.form.Button("Ok");\r
+                       this.okButton.addListener("execute", function(e){\r
+                               this.fireEvent("ok");\r
+                               this._closeAndDestroy();\r
+                       }, this);\r
+                       this.cancelButton = new qx.ui.form.Button("Cancel");\r
+                       this.cancelButton.addListener("execute", this._closeAndDestroy, this);\r
+                       buttonPane.add(this.okButton);\r
+                       buttonPane.add(this.cancelButton);\r
+               },\r
+               /**\r
+                * Close this modal window and destroy it.\r
+                */\r
+               _closeAndDestroy : function(){\r
+                       this.hide();\r
+                       this.destroy();                 \r
+               }\r
+       }\r
+});
\ No newline at end of file