]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/DataModel.js
Refresh/remove a query
[gpl/argeo-slc.git] / server / org.argeo.slc.ria / src / argeo-ria-lib / jcr / class / org / argeo / jcr / ria / model / DataModel.js
index 5cb49bab6661310a9b5a3a3625c150469901078d..a8f75c0ebf776665f1cd56155b520f2c36f6f5d3 100644 (file)
@@ -1,24 +1,74 @@
 qx.Class.define("org.argeo.jcr.ria.model.DataModel", {\r
        extend : qx.core.Object,\r
        \r
+       events : {\r
+               "changeContextNode" : "qx.event.type.Data"\r
+       },\r
+       \r
        properties : {\r
                rootNode : {\r
                        check : "org.argeo.jcr.ria.model.Node",\r
                        event : "changeRootNode"                        \r
                },\r
                contextNode : {\r
-                       check : "org.argeo.jcr.ria.model.Node",\r
-                       event : "changeContextNode"\r
+                       check : "org.argeo.jcr.ria.model.Node"\r
                },\r
                selection : {\r
-                       check : "org.argeo.jcr.ria.model.Node[]",\r
-                       event : "changeSelection"\r
+                       check : "Array",\r
+                       event : "changeSelection",\r
+                       init : []\r
+               },\r
+               selectionSource : {\r
+                       check : "Object",\r
+                       init : null,\r
+                       nullable : true\r
                }\r
        },\r
        \r
        construct : function(rootNode){\r
                this.base(arguments);\r
                this.setRootNode(rootNode);\r
+       },\r
+       \r
+       members : {\r
+               requireContextChange : function(path){\r
+                       var targetNode;\r
+                       var rootNode = this.getRootNode();\r
+                       this.setSelection([]);\r
+                       if(!path){\r
+                               targetNode = rootNode;\r
+                       }else{\r
+                               // Create a fake node\r
+                               if(path[path.length-1] == '/'){\r
+                                       path = path.substring(0, path.length-1);\r
+                               }\r
+                               var base = path.substring(path.lastIndexOf("/")+1);\r
+                               targetNode = new org.argeo.jcr.ria.model.Node(base, rootNode.getNodeProvider());\r
+                               rootNode.addChild(targetNode);\r
+                               targetNode.setPath(path);                               \r
+                       }\r
+                       var observer = function(event){\r
+                               var state = event.getData();\r
+                               if(state == "loading"){\r
+                                       targetNode.loadingNode = new org.argeo.jcr.ria.model.Node("loading"); \r
+                                       targetNode.addChild(targetNode.loadingNode);\r
+                               }else if(state == "loaded"){\r
+                                       if(targetNode.loadingNode) {\r
+                                               targetNode.loadingNode.remove();\r
+                                               targetNode.loadingNode = null;\r
+                                       }\r
+                                       targetNode.removeListener("changeLoadState", observer, this);\r
+                               }                               \r
+                               this.setContextNode(targetNode);\r
+                               this.fireDataEvent("changeContextNode", targetNode);\r
+                       };\r
+                       targetNode.addListener("changeLoadState", observer, this);\r
+                       targetNode.load(1);\r
+               },\r
+               setSelectionWithSource : function(selection, source){\r
+                       this.setSelectionSource(source);\r
+                       this.setSelection(selection);\r
+               }\r
        }\r
        \r
 });
\ No newline at end of file