]> git.argeo.org Git - gpl/argeo-slc.git/blob - XmlNodeProvider.js
0f7057a37f9b4091e2cc6026bc1b3a7cda5d184c
[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 /*
39 var children = this._xmlDoc.documentElement.childNodes;
40 for(var i=0;i<children.length;i++){
41 var subchildren = children[i].childNodes;
42 for(var j=0;j<subchildren.length;j++){
43 children[i].removeChild(subchildren[j]);
44 }
45 }
46 */
47 // END STUB
48 node.fromDomElement(this._xmlDoc.documentElement);
49 if(properties.dynamic){
50 this.setXmlDocLoaded(false);
51 }
52 }else{
53 this.addListenerOnce("changeXmlDocLoaded", function(){
54 this.loadNode(node, nodeCallback, childCallback);
55 }, this);
56 node.setLoadState("loading");
57 this.loadXmlDoc(node);
58 }
59 },
60
61 loadXmlDoc : function(node){
62 var properties = this.getSettings();
63 if(!properties.xmlSrc && !properties.xmlString) return;
64 if(properties.xmlSrc){
65 var request = new org.argeo.ria.remote.Request(properties.xmlSrc, 'GET', 'application/xml');
66 if(properties.dynamic && properties.pathParameter){
67 request.setParameter(properties.pathParameter, (node.getPath()|| "/"));
68 }
69 request.addListener("completed", function(response){
70 this._xmlDoc = response.getContent();
71 this.setXmlDocLoaded(true);
72 }, this);
73 request.send();
74 }else{
75 this._xmlDoc = qx.xml.Document.fromString(properties.xmlString);
76 this.setXmlDocLoaded(true);
77 }
78 }
79 }
80 });