MonitorPerspective implementation
authorCharles du Jeu <charles.dujeu@gmail.com>
Thu, 23 Jul 2009 11:38:02 +0000 (11:38 +0000)
committerCharles du Jeu <charles.dujeu@gmail.com>
Thu, 23 Jul 2009 11:38:02 +0000 (11:38 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@2731 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/org.argeo.slc.ria/src/argeo-ria-lib/slc-web/class/org/argeo/slc/web/MonitorPerspective.js
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/SlcApi.js
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/monitor/DistListView.js
server/org.argeo.slc.ria/src/argeo-ria-lib/slc/class/org/argeo/slc/ria/monitor/UploadView.js

index 61f56e57b29b451c1003520566e7d3adfdda7179..12924780c44032987fdac5c2b5b78d7ce70eaa18 100644 (file)
@@ -29,8 +29,8 @@ qx.Class.define("org.argeo.slc.web.MonitorPerspective",
        initViewPanes : function(viewsManager){\r
                \r
                this._splitPane = new qx.ui.splitpane.Pane("vertical");\r
-               var mainPane = new org.argeo.ria.components.ViewPane("distrib", "Bundles");\r
-               this._splitPane.add(mainPane, 5);\r
+               var mainPane = new org.argeo.ria.components.ViewPane("distrib", "Modular Distributions");\r
+               this._splitPane.add(mainPane, 10);\r
                var uploadPane = new org.argeo.ria.components.ViewPane("upload", "Upload a distribution");\r
                this._splitPane.add(uploadPane, 1);\r
                viewsManager.registerViewPane(mainPane);      \r
@@ -41,8 +41,8 @@ qx.Class.define("org.argeo.slc.web.MonitorPerspective",
        \r
        initViews : function(viewsManager){\r
          var pView = viewsManager.initIViewClass(org.argeo.slc.ria.monitor.DistListView, "distrib");\r
-         pView.load();\r
          var view = viewsManager.initIViewClass(org.argeo.slc.ria.monitor.UploadView, "upload");\r
+         pView.load();\r
          view.load();\r
        },\r
        \r
index d69830da20e692960bdd1b513f33be06aca711d5..b5604d4d59d2763358d5a237267f4764ed4a6379 100644 (file)
@@ -30,6 +30,9 @@ qx.Class.define("org.argeo.slc.ria.SlcApi",
        RELOAD_BUNDLE_SERVICE : "reloadBundle.service",\r
        AMQ_SERVICE : "amq",\r
        \r
+       LIST_MODULAR_DISTRIB_SERVICE : "listModularDistributions.service",\r
+       UPLOAD_MODULAR_DISTRIB_SERVICE : "uploadModularDistrib.service",\r
+       \r
        /**\r
         * Standard Request getter\r
         * @param serviceName {String} The name of the service to call (without base context)\r
@@ -203,6 +206,23 @@ qx.Class.define("org.argeo.slc.ria.SlcApi",
                );\r
        },\r
        \r
+       /**\r
+        * List currently registered SlcExecutions.\r
+        * @param fireReloadEventType {String} Event type to trigger (optionnal)\r
+        * @param iLoadStatusables {org.argeo.ria.components.ILoadStatusables[]} Gui parts to update \r
+        * @return {qx.io.remote.Request}\r
+        */\r
+       getListModularDistributionsService:function(fireReloadEventType, iLoadStatusables){\r
+               return org.argeo.slc.ria.SlcApi.getServiceRequest(\r
+                       org.argeo.slc.ria.SlcApi.LIST_MODULAR_DISTRIB_SERVICE,\r
+                       fireReloadEventType,\r
+                       iLoadStatusables\r
+               );\r
+       },\r
+       \r
+       getUploadModularDistributionsService : function(){\r
+               return org.argeo.slc.ria.SlcApi.UPLOAD_MODULAR_DISTRIB_SERVICE;\r
+       },\r
 \r
        /**\r
         * New SlcExecution\r
index 129d1a91a62974ac51b1b9c52bebb177952b881b..a444bdadbd3b4ee3e47094abd89804e0fb1eb013 100644 (file)
@@ -8,7 +8,20 @@ qx.Class.define("org.argeo.slc.ria.monitor.DistListView", {
                 * See {@link org.argeo.ria.event.CommandsManager#definitions} for the keys to use for defining commands.\r
                 */\r
                commands : {\r
-                       init : {}\r
+                       init : {\r
+                               "reload" : {\r
+                                       label : "Reload",\r
+                                       icon : "org.argeo.slc.ria/view-refresh.png",\r
+                                       shortcut : "control+h",\r
+                                       enabled : true,\r
+                                       menu : "Distributions",\r
+                                       toolbar : "list",\r
+                                       callback : function(e) {\r
+                                               this.load();\r
+                                       },\r
+                                       command : null\r
+                               }\r
+                       }\r
                },\r
                viewSelection : {\r
                        nullable:false, \r
@@ -23,10 +36,10 @@ qx.Class.define("org.argeo.slc.ria.monitor.DistListView", {
 \r
        construct : function(){\r
                this.base(arguments);\r
-               this.setLayout(new qx.ui.layout.Dock());        \r
+               this.setLayout(new qx.ui.layout.Canvas());      \r
                this.xmlStub = '<slc:object-list xmlns:slc="http://argeo.org/projects/slc/schemas">' +\r
                                '<slc:modular-distribution-descriptor name="name" version="0.1.0">' +\r
-                               '<slc:modulesDescriptors><slc:modulesDescriptor type="modularDistribution" url="http://localhost/modularDistribution" />' +\r
+                               '<slc:modulesDescriptors><slc:modulesDescriptor type="modularDistribution" url="http://localhost/modularDistribution" >toto</slc:modulesDescriptor>' +\r
                                '<slc:modulesDescriptor type="eclipse" url="http://localhost/updateSite" />' +\r
                                '</slc:modulesDescriptors></slc:modular-distribution-descriptor>' +\r
                                '<slc:modular-distribution-descriptor name="name2" version="0.1.1">' +\r
@@ -48,20 +61,68 @@ qx.Class.define("org.argeo.slc.ria.monitor.DistListView", {
                init : function(viewPane, data){\r
                        this.setView(viewPane);                 \r
                        this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId()));\r
-                       this.label = new qx.ui.basic.Label("Properties");\r
-                       this.add(this.label, {edge : "center"});\r
+                       this.tableModel = new qx.ui.table.model.Simple();                       \r
+                       this.tableModel.setColumns(["Name", "Version", "Modular Distribution", "Eclipse Update Site"], ["name","version","modularDistribution","eclipse"]);\r
+                       this.list = new qx.ui.table.Table(this.tableModel, {\r
+                               tableColumnModel: function(obj){\r
+                                       return new qx.ui.table.columnmodel.Resize(obj)\r
+                               }                               \r
+                       });\r
+                       this.list.set({\r
+                               decorator:null,\r
+                               statusBarVisible : false\r
+                       });\r
+                       this.tableModel.setColumnEditable(2, true);\r
+                       this.tableModel.setColumnEditable(3, true);\r
+                       var columnModel = this.list.getTableColumnModel();\r
+                       columnModel.getBehavior().setWidth(0, "15%");\r
+                       columnModel.getBehavior().setWidth(1, "15%");\r
+                       columnModel.getBehavior().setWidth(2, "35%");\r
+                       columnModel.getBehavior().setWidth(3, "35%");\r
+                       var factory = function(cellInfo){\r
+                               var tField = new qx.ui.table.celleditor.TextField();\r
+                               tField.setValidationFunction(function(newValue, oldValue){return oldValue;});\r
+                               return tField;\r
+                       };\r
+                       columnModel.setCellEditorFactory(2, new qx.ui.table.celleditor.Dynamic(factory));\r
+                       columnModel.setCellEditorFactory(3, new qx.ui.table.celleditor.Dynamic(factory));\r
+                       this.add(this.list, {top:0,left:0,width:'100%',height:'100%'});                 \r
                },\r
                /**\r
                 * The implementation should contain the real data loading (i.o. query...)\r
                 * @return {Boolean}\r
                 */\r
                load : function(){\r
-                       \r
+                       this.tableModel.setData([]);\r
+                       var req = org.argeo.slc.ria.SlcApi.getListModularDistributionsService();\r
+                       req.addListener("completed", function(response){\r
+                               this.parseData(response.getContent());\r
+                       }, this);\r
+                       req.addListener("failed", function(){\r
+                               var xmlDoc = qx.xml.Document.fromString(this.xmlStub);\r
+                               this.parseData(xmlDoc);                                                 \r
+                       }, this);\r
+                       req.send();                     \r
                },\r
                \r
-               updateData : function(node){\r
-                       this.label.setContent("Properties for : " + node.getLabel());\r
+               parseData : function(xmlDoc){\r
+                       var data = [];\r
+                       var descriptorPath = 'slc:object-list/slc:modular-distribution-descriptor';\r
+                       var namePath = '@name';\r
+                       var versionPath = '@version';\r
+                       var distribPath = 'slc:modulesDescriptors/slc:modulesDescriptor[@type="modularDistribution"]/@url';\r
+                       var eclipsePath = 'slc:modulesDescriptors/slc:modulesDescriptor[@type="eclipse"]/@url';\r
+                       var nodes = org.argeo.ria.util.Element.selectNodes(xmlDoc, descriptorPath);                     \r
+                       for(var i=0;i<nodes.length;i++){\r
+                               var name = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], namePath);\r
+                               var version = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], versionPath);\r
+                               var distrib = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], distribPath);\r
+                               var eclipse = org.argeo.ria.util.Element.getSingleNodeText(nodes[i], eclipsePath);\r
+                               data.push([name,version,distrib,eclipse]);\r
+                       }\r
+                       this.tableModel.setData(data);\r
                },\r
+               \r
                /**\r
                 * Whether this component is already contained in a scroller (return false) or not (return true).\r
                 * @return {Boolean}\r
index f54ba16ccd1d26932ef4b66695c1a4149cc49545..f5d5da3e89aacd69eb2050b31e7dd66ab7a9eee8 100644 (file)
@@ -23,7 +23,7 @@ qx.Class.define("org.argeo.slc.ria.monitor.UploadView", {
 \r
        construct : function(){\r
                this.base(arguments);\r
-               this.setLayout(new qx.ui.layout.Dock());        \r
+               this.setLayout(new qx.ui.layout.Basic); \r
        },      \r
        \r
        members : {\r
@@ -38,20 +38,59 @@ qx.Class.define("org.argeo.slc.ria.monitor.UploadView", {
                init : function(viewPane, data){\r
                        this.setView(viewPane);                 \r
                        this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId()));\r
-                       this.label = new qx.ui.basic.Label("Upoad");\r
-                       this.add(this.label, {edge : "center"});\r
+                       this.form = new org.argeo.ria.components.upload.UploadForm("uploadFrm", org.argeo.slc.ria.SlcApi.getUploadModularDistributionsService());\r
+                       this.form.setLayout(new qx.ui.layout.HBox(5));\r
+                       this.fileWidget = new org.argeo.ria.components.upload.UploadField("uploadFile", "Choose a file");\r
+                       \r
+                       this.form.addListener("completed", function(e){\r
+                               this.fileWidget.setFieldValue("");\r
+                               var response = this.form.getIframeHtmlContent();\r
+                               this.debug(response);\r
+                               this.displayMessage(response, 4000);\r
+                       }, this);\r
+                       this.form.addListener("sending", function(e){\r
+                               this.debug("Sending...");\r
+                               this.displayMessage("Sending...");\r
+                       }, this);\r
+                       this.fileWidget.addListener("changeFieldValue", function(e){\r
+                               if(e.getData()!=""){\r
+                                       this.submitButton.setEnabled(true);\r
+                               }\r
+                       }, this);\r
+                       \r
+                       this.submitButton = new qx.ui.form.Button("Upload");\r
+                       this.submitButton.setEnabled(false);\r
+                       this.submitButton.addListener("execute", function(e){\r
+                               if(this.fileWidget.getFieldValue()!=""){\r
+                                       this.form.send();\r
+                               }\r
+                       }, this);\r
+\r
+                       this.fileWidget.getTextField().setWidth(200);\r
+                       this.form.add(this.fileWidget);\r
+                       this.form.add(this.submitButton);\r
+                       this.messageLabel = new qx.ui.basic.Label("");\r
+                       this.messageLabel.setRich(true);\r
+                       this.messageLabel.setPadding(4,4,4,20);\r
+                       this.form.add(this.messageLabel);\r
+                       this.add(this.form, {left : 20, top:20});\r
+               },\r
+               \r
+               displayMessage : function(message, timer){\r
+                       this.messageLabel.setContent("<i>"+qx.lang.String.stripTags(message)+"</i>");\r
+                       if(timer){\r
+                               qx.event.Timer.once(function(){\r
+                                       this.messageLabel.setContent("");\r
+                               }, this, timer);\r
+                       }\r
                },\r
                /**\r
                 * The implementation should contain the real data loading (i.o. query...)\r
                 * @return {Boolean}\r
                 */\r
-               load : function(){\r
-                       \r
+               load : function(){                      \r
                },\r
                \r
-               updateData : function(node){\r
-                       this.label.setContent("Properties for : " + node.getLabel());\r
-               },\r
                /**\r
                 * Whether this component is already contained in a scroller (return false) or not (return true).\r
                 * @return {Boolean}\r