]> git.argeo.org Git - gpl/argeo-slc.git/blob - server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/Node.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 / Node.js
1 qx.Class.define("org.argeo.jcr.ria.model.Node", {
2 extend : org.argeo.jcr.ria.model.AbstractItem,
3
4 events : {
5 "clear" : "qx.event.type.Event",
6 "childNodeAdded" : "qx.event.type.Data",
7 "childNodeRemoved" : "qx.event.type.Data",
8 "childrenChanged" : "qx.event.type.Data",
9
10 "propertyAdded" : "qx.event.type.Data",
11 "propertyRemoved" : "qx.event.type.Data",
12 "propertiesChanged" : "qx.event.type.Data"
13 },
14 properties : {
15 loadState : {
16 check : "String",
17 init : "empty", // Can be "empty" => "loading" => "loaded"
18 event : "changeLoadState"
19 },
20 nodeProvider : {
21 check : "org.argeo.jcr.ria.provider.INodeProvider",
22 nullable : true
23 }
24 },
25
26 construct : function(nodeName, nodeProvider, isRoot){
27 this.base(arguments);
28 this._children = {};
29 this._properties = {};
30 this.setName(nodeName);
31 if(nodeProvider){
32 this.setNodeProvider(nodeProvider);
33 }
34 if(isRoot){
35 this.setPath("");
36 this.setRoot(this);
37 }
38 },
39
40 members : {
41 _children : null,
42 _properties : null,
43
44 load : function(depth, filter){
45 if(!depth) depth = 1;
46 if(!filter) filter = '';
47 this.getNodeProvider().loadNode(this, depth, filter);
48 },
49
50 remove : function(){
51 if(this.itemIsRoot()) return;
52 this.getParent().removeChild(this.getName());
53 },
54
55 fromDomElement : function(domElement){
56 if(domElement.nodeType != 1) return;
57 for(var i=0;i<domElement.attributes.length;i++){
58 var att = domElement.attributes[i];
59 if(!this.itemIsRoot() && att.nodeName.substring(0,5) == "xmlns"){
60 continue;
61 }
62 var property = new org.argeo.jcr.ria.model.Property(att.nodeName);
63 this.addProperty(property);
64 property.fromDomElement(att);
65 }
66 for(var i=0;i<domElement.childNodes.length;i++){
67 var child = domElement.childNodes[i];
68 if(child.nodeType != 1) continue;
69 var jcrChild = new org.argeo.jcr.ria.model.Node(child.nodeName, this.getNodeProvider());
70 this.addChild(jcrChild);
71 jcrChild.fromDomElement(child);
72 }
73 //this.setLoadState("loaded");
74 },
75
76 fromXmlString : function(xmlString){
77 var domDocument = qx.xml.Document.fromString(xmlString);
78 var root = domDocument.documentElement;
79 this.fromDomElement(root);
80 },
81
82 toXmlString : function(recurse, childrenWriter){
83 var string = "<"+this.getName();
84 var props = this.getProperties();
85 for(var i=0;i<props.length;i++){
86 string += " " + props[i].toXmlString();
87 }
88 string += ">";
89 if(recurse){
90 var childs = this.getChildren();
91 var childrenString = "";
92 for(var j=0;j<childs.length;j++){
93 childrenString += childs[j].toXmlString(recurse, childrenWriter);
94 }
95 if(childrenWriter){
96 string += childrenWriter(childrenString);
97 }else{
98 string += childrenString;
99 }
100 }
101 string += "</"+this.getName()+">";
102 return string;
103 },
104
105 getChild : function(childName){
106 return this._children[childName];
107 },
108 getProperty : function(propertyName){
109 return this._properties[propertyName];
110 },
111 addChild : function(childNode){
112 this._children[childNode.getName()] = childNode;
113
114 childNode.setParent(this);
115 childNode.setRoot(this.getRoot());
116 childNode.setPath(this.getPath() + "/" + childNode.getName());
117
118 this.fireDataEvent("childNodeAdded", childNode);
119 this.fireDataEvent("childNodeChanged");
120 },
121 removeChild : function(childName){
122 delete(this._children[childName]);
123 this.fireDataEvent("childNodeRemoved", childName);
124 this.fireDataEvent("childNodeChanged");
125 },
126 addProperty : function(property){
127 this._properties[property.getName()] = property;
128
129 property.setParent(this);
130 property.setRoot(this.getRoot());
131 property.setPath(this.getPath() + "/" + property.getName());
132
133 this.fireDataEvent("propertyAdded", property);
134 this.fireDataEvent("propertiesChanged");
135 },
136 removeProperty : function(propertyName){
137 delete(this._properties[propertyName]);
138 this.fireDataEvent("propertyRemoved", propertyName);
139 this.fireDataEvent("propertiesChanged");
140 },
141 getChildren : function(){
142 return qx.lang.Object.getValues(this._children);
143 },
144 getProperties : function(){
145 return qx.lang.Object.getValues(this._properties);
146 },
147 getChildrenCount : function(){
148 return qx.lang.Object.getLength(this._children);
149 },
150 getPropertiesCount : function(){
151 return qx.lang.Object.getLength(this._properties);
152 }
153 }
154 });