]> git.argeo.org Git - gpl/argeo-slc.git/blob - XmlNodeProvider.js
ee98349734931297f724c77c8b08a175aa5860c0
[gpl/argeo-slc.git] / XmlNodeProvider.js
1 qx.Class.define("org.argeo.jcr.ria.provider.XmlNodeProvider", {
2 extend : qx.core.Object,
3 implement : [org.argeo.jcr.ria.provider.INodeProvider],
4
5 properties : {
6 settings :{
7 check : "Object"
8 },
9 xmlDoc : {
10
11 },
12 xmlDocLoaded : {
13 check : "Boolean",
14 init : false,
15 event : "changeXmlDocLoaded"
16 }
17 },
18
19 members : {
20 _xmlDoc : null,
21 initProvider : function(properties){
22 this.setSettings(properties);
23 },
24 /**
25 *
26 * @param node org.argeo.jcr.ria.model.Node
27 * @param nodeCallback Function
28 * @param childCallback Function
29 */
30 loadNode : function(node, nodeCallback, childCallback){
31 if(node.getLoadState() == "loaded") return;
32
33 if(this.getXmlDocLoaded()){
34 // Parse document and load
35 node.setName(this._xmlDoc.documentElement.nodeName);
36 var properties = this.getSettings();
37 // STUB : prune sub children, load only level 1
38 var children = this._xmlDoc.documentElement.childNodes;
39 for(var i=0;i<children.length;i++){
40 var subchildren = children[i].childNodes;
41 for(var j=0;j<subchildren.length;j++){
42 children[i].removeChild(subchildren[j]);
43 }
44 }
45 // END STUB
46 node.fromDomElement(this._xmlDoc.documentElement);
47 node.setLoadState("loaded");
48 if(properties.dynamic){
49 this.setXmlDocLoaded(false);
50 }
51 }else{
52 this.addListenerOnce("changeXmlDocLoaded", function(){
53 this.loadNode(node, nodeCallback, childCallback);
54 }, this);
55 node.setLoadState("loading");
56 this.loadXmlDoc(node);
57 }
58 },
59
60 loadXmlDoc : function(node){
61 var properties = this.getSettings();
62 if(!properties.xmlSrc && !properties.xmlString) return;
63 if(properties.xmlSrc){
64 var request = new org.argeo.ria.remote.Request(properties.xmlSrc, 'GET', 'application/xml');
65 if(properties.dynamic && properties.pathParameter){
66 request.setParameter(properties.pathParameter, (node.getPath()|| "/"));
67 }
68 request.addListener("completed", function(response){
69 this._xmlDoc = response.getContent();
70 this.setXmlDocLoaded(true);
71 }, this);
72 request.send();
73 }else{
74 this._xmlDoc = qx.xml.Document.fromString(properties.xmlString);
75 this.setXmlDocLoaded(true);
76 }
77 }
78 }
79 });