root / trunk / web / dojo / dojox / data / AndOrReadStore.js @ 10
History | View | Annotate | Download (15 KB)
| 1 | 9 | andrej.cim | /*
|
|---|---|---|---|
| 2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
||
| 3 | Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||
| 4 | see: http://dojotoolkit.org/license for details
|
||
| 5 | */
|
||
| 6 | |||
| 7 | |||
| 8 | if(!dojo._hasResource["dojox.data.AndOrReadStore"]){ |
||
| 9 | dojo._hasResource["dojox.data.AndOrReadStore"]=true; |
||
| 10 | dojo.provide("dojox.data.AndOrReadStore");
|
||
| 11 | dojo.require("dojo.data.util.filter");
|
||
| 12 | dojo.require("dojo.data.util.simpleFetch");
|
||
| 13 | dojo.require("dojo.date.stamp");
|
||
| 14 | dojo.declare("dojox.data.AndOrReadStore",null,{constructor:function(_1){ |
||
| 15 | this._arrayOfAllItems=[];
|
||
| 16 | this._arrayOfTopLevelItems=[];
|
||
| 17 | this._loadFinished=false; |
||
| 18 | this._jsonFileUrl=_1.url;
|
||
| 19 | this._ccUrl=_1.url;
|
||
| 20 | this.url=_1.url;
|
||
| 21 | this._jsonData=_1.data;
|
||
| 22 | this.data=null; |
||
| 23 | this._datatypeMap=_1.typeMap||{};
|
||
| 24 | if(!this._datatypeMap["Date"]){ |
||
| 25 | this._datatypeMap["Date"]={type:Date,deserialize:function(_2){ |
||
| 26 | return dojo.date.stamp.fromISOString(_2);
|
||
| 27 | }}; |
||
| 28 | } |
||
| 29 | this._features={"dojo.data.api.Read":true,"dojo.data.api.Identity":true}; |
||
| 30 | this._itemsByIdentity=null; |
||
| 31 | this._storeRefPropName="_S"; |
||
| 32 | this._itemNumPropName="_0"; |
||
| 33 | this._rootItemPropName="_RI"; |
||
| 34 | this._reverseRefMap="_RRM"; |
||
| 35 | this._loadInProgress=false; |
||
| 36 | this._queuedFetches=[];
|
||
| 37 | if(_1.urlPreventCache!==undefined){ |
||
| 38 | this.urlPreventCache=_1.urlPreventCache?true:false; |
||
| 39 | } |
||
| 40 | if(_1.hierarchical!==undefined){ |
||
| 41 | this.hierarchical=_1.hierarchical?true:false; |
||
| 42 | } |
||
| 43 | if(_1.clearOnClose){
|
||
| 44 | this.clearOnClose=true; |
||
| 45 | } |
||
| 46 | },url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,hierarchical:true,_assertIsItem:function(_3){ |
||
| 47 | if(!this.isItem(_3)){ |
||
| 48 | throw new Error("dojox.data.AndOrReadStore: Invalid item argument."); |
||
| 49 | } |
||
| 50 | },_assertIsAttribute:function(_4){ |
||
| 51 | if(typeof _4!=="string"){ |
||
| 52 | throw new Error("dojox.data.AndOrReadStore: Invalid attribute argument."); |
||
| 53 | } |
||
| 54 | },getValue:function(_5,_6,_7){ |
||
| 55 | var _8=this.getValues(_5,_6); |
||
| 56 | return (_8.length>0)?_8[0]:_7; |
||
| 57 | },getValues:function(_9,_a){ |
||
| 58 | this._assertIsItem(_9);
|
||
| 59 | this._assertIsAttribute(_a);
|
||
| 60 | var _b=_9[_a]||[];
|
||
| 61 | return _b.slice(0,_b.length); |
||
| 62 | },getAttributes:function(_c){ |
||
| 63 | this._assertIsItem(_c);
|
||
| 64 | var _d=[];
|
||
| 65 | for(var _e in _c){ |
||
| 66 | if((_e!==this._storeRefPropName)&&(_e!==this._itemNumPropName)&&(_e!==this._rootItemPropName)&&(_e!==this._reverseRefMap)){ |
||
| 67 | _d.push(_e); |
||
| 68 | } |
||
| 69 | } |
||
| 70 | return _d;
|
||
| 71 | },hasAttribute:function(_f,_10){ |
||
| 72 | this._assertIsItem(_f);
|
||
| 73 | this._assertIsAttribute(_10);
|
||
| 74 | return (_10 in _f); |
||
| 75 | },containsValue:function(_11,_12,_13){ |
||
| 76 | var _14=undefined; |
||
| 77 | if(typeof _13==="string"){ |
||
| 78 | _14=dojo.data.util.filter.patternToRegExp(_13,false);
|
||
| 79 | } |
||
| 80 | return this._containsValue(_11,_12,_13,_14); |
||
| 81 | },_containsValue:function(_15,_16,_17,_18){ |
||
| 82 | return dojo.some(this.getValues(_15,_16),function(_19){ |
||
| 83 | if(_19!==null&&!dojo.isObject(_19)&&_18){ |
||
| 84 | if(_19.toString().match(_18)){
|
||
| 85 | return true; |
||
| 86 | } |
||
| 87 | }else{
|
||
| 88 | if(_17===_19){
|
||
| 89 | return true; |
||
| 90 | } |
||
| 91 | } |
||
| 92 | }); |
||
| 93 | },isItem:function(_1a){ |
||
| 94 | if(_1a&&_1a[this._storeRefPropName]===this){ |
||
| 95 | if(this._arrayOfAllItems[_1a[this._itemNumPropName]]===_1a){ |
||
| 96 | return true; |
||
| 97 | } |
||
| 98 | } |
||
| 99 | return false; |
||
| 100 | },isItemLoaded:function(_1b){ |
||
| 101 | return this.isItem(_1b); |
||
| 102 | },loadItem:function(_1c){ |
||
| 103 | this._assertIsItem(_1c.item);
|
||
| 104 | },getFeatures:function(){ |
||
| 105 | return this._features; |
||
| 106 | },getLabel:function(_1d){ |
||
| 107 | if(this._labelAttr&&this.isItem(_1d)){ |
||
| 108 | return this.getValue(_1d,this._labelAttr); |
||
| 109 | } |
||
| 110 | return undefined; |
||
| 111 | },getLabelAttributes:function(_1e){ |
||
| 112 | if(this._labelAttr){ |
||
| 113 | return [this._labelAttr]; |
||
| 114 | } |
||
| 115 | return null; |
||
| 116 | },_fetchItems:function(_1f,_20,_21){ |
||
| 117 | var _22=this; |
||
| 118 | var _23=function(_24,_25){ |
||
| 119 | var _26=[];
|
||
| 120 | if(_24.query){
|
||
| 121 | var _27=dojo.fromJson(dojo.toJson(_24.query));
|
||
| 122 | if(typeof _27=="object"){ |
||
| 123 | var _28=0; |
||
| 124 | var p;
|
||
| 125 | for(p in _27){ |
||
| 126 | _28++; |
||
| 127 | } |
||
| 128 | if(_28>1&&_27.complexQuery){ |
||
| 129 | var cq=_27.complexQuery;
|
||
| 130 | var _29=false; |
||
| 131 | for(p in _27){ |
||
| 132 | if(p!=="complexQuery"){ |
||
| 133 | if(!_29){
|
||
| 134 | cq="( "+cq+" )"; |
||
| 135 | _29=true;
|
||
| 136 | } |
||
| 137 | var v=_24.query[p];
|
||
| 138 | if(dojo.isString(v)){
|
||
| 139 | v="'"+v+"'"; |
||
| 140 | } |
||
| 141 | cq+=" AND "+p+":"+v; |
||
| 142 | delete _27[p];
|
||
| 143 | } |
||
| 144 | } |
||
| 145 | _27.complexQuery=cq; |
||
| 146 | } |
||
| 147 | } |
||
| 148 | var _2a=_24.queryOptions?_24.queryOptions.ignoreCase:false; |
||
| 149 | if(typeof _27!="string"){ |
||
| 150 | _27=dojo.toJson(_27); |
||
| 151 | _27=_27.replace(/\\\\/g,"\\"); |
||
| 152 | } |
||
| 153 | _27=_27.replace(/\\"/g,"\""); |
||
| 154 | var _2b=dojo.trim(_27.replace(/{|}/g,"")); |
||
| 155 | var _2c,i;
|
||
| 156 | if(_2b.match(/"? *complexQuery *"?:/)){ |
||
| 157 | _2b=dojo.trim(_2b.replace(/"?\s*complexQuery\s*"?:/,"")); |
||
| 158 | var _2d=["'","\""]; |
||
| 159 | var _2e,_2f;
|
||
| 160 | var _30=false; |
||
| 161 | for(i=0;i<_2d.length;i++){ |
||
| 162 | _2e=_2b.indexOf(_2d[i]); |
||
| 163 | _2c=_2b.indexOf(_2d[i],1);
|
||
| 164 | _2f=_2b.indexOf(":",1); |
||
| 165 | if(_2e===0&&_2c!=-1&&_2f<_2c){ |
||
| 166 | _30=true;
|
||
| 167 | break;
|
||
| 168 | } |
||
| 169 | } |
||
| 170 | if(_30){
|
||
| 171 | _2b=_2b.replace(/^\"|^\'|\"$|\'$/g,""); |
||
| 172 | } |
||
| 173 | } |
||
| 174 | var _31=_2b;
|
||
| 175 | var _32=/^,|^NOT |^AND |^OR |^\(|^\)|^!|^&&|^\|\|/i; |
||
| 176 | var _33=""; |
||
| 177 | var op=""; |
||
| 178 | var val=""; |
||
| 179 | var pos=-1; |
||
| 180 | var err=false; |
||
| 181 | var key=""; |
||
| 182 | var _34=""; |
||
| 183 | var tok=""; |
||
| 184 | _2c=-1;
|
||
| 185 | for(i=0;i<_25.length;++i){ |
||
| 186 | var _35=true; |
||
| 187 | var _36=_25[i];
|
||
| 188 | if(_36===null){ |
||
| 189 | _35=false;
|
||
| 190 | }else{
|
||
| 191 | _2b=_31; |
||
| 192 | _33="";
|
||
| 193 | while(_2b.length>0&&!err){ |
||
| 194 | op=_2b.match(_32); |
||
| 195 | while(op&&!err){
|
||
| 196 | _2b=dojo.trim(_2b.replace(op[0],"")); |
||
| 197 | op=dojo.trim(op[0]).toUpperCase();
|
||
| 198 | op=op=="NOT"?"!":op=="AND"||op==","?"&&":op=="OR"?"||":op; |
||
| 199 | op=" "+op+" "; |
||
| 200 | _33+=op; |
||
| 201 | op=_2b.match(_32); |
||
| 202 | } |
||
| 203 | if(_2b.length>0){ |
||
| 204 | pos=_2b.indexOf(":");
|
||
| 205 | if(pos==-1){ |
||
| 206 | err=true;
|
||
| 207 | break;
|
||
| 208 | }else{
|
||
| 209 | key=dojo.trim(_2b.substring(0,pos).replace(/\"|\'/g,"")); |
||
| 210 | _2b=dojo.trim(_2b.substring(pos+1));
|
||
| 211 | tok=_2b.match(/^\'|^\"/);
|
||
| 212 | if(tok){
|
||
| 213 | tok=tok[0];
|
||
| 214 | pos=_2b.indexOf(tok); |
||
| 215 | _2c=_2b.indexOf(tok,pos+1);
|
||
| 216 | if(_2c==-1){ |
||
| 217 | err=true;
|
||
| 218 | break;
|
||
| 219 | } |
||
| 220 | _34=_2b.substring(pos+1,_2c);
|
||
| 221 | if(_2c==_2b.length-1){ |
||
| 222 | _2b="";
|
||
| 223 | }else{
|
||
| 224 | _2b=dojo.trim(_2b.substring(_2c+1));
|
||
| 225 | } |
||
| 226 | _33+=_22._containsValue(_36,key,_34,dojo.data.util.filter.patternToRegExp(_34,_2a)); |
||
| 227 | }else{
|
||
| 228 | tok=_2b.match(/\s|\)|,/);
|
||
| 229 | if(tok){
|
||
| 230 | var _37=new Array(tok.length); |
||
| 231 | for(var j=0;j<tok.length;j++){ |
||
| 232 | _37[j]=_2b.indexOf(tok[j]); |
||
| 233 | } |
||
| 234 | pos=_37[0];
|
||
| 235 | if(_37.length>1){ |
||
| 236 | for(var j=1;j<_37.length;j++){ |
||
| 237 | pos=Math.min(pos,_37[j]); |
||
| 238 | } |
||
| 239 | } |
||
| 240 | _34=dojo.trim(_2b.substring(0,pos));
|
||
| 241 | _2b=dojo.trim(_2b.substring(pos)); |
||
| 242 | }else{
|
||
| 243 | _34=dojo.trim(_2b); |
||
| 244 | _2b="";
|
||
| 245 | } |
||
| 246 | _33+=_22._containsValue(_36,key,_34,dojo.data.util.filter.patternToRegExp(_34,_2a)); |
||
| 247 | } |
||
| 248 | } |
||
| 249 | } |
||
| 250 | } |
||
| 251 | _35=eval(_33); |
||
| 252 | } |
||
| 253 | if(_35){
|
||
| 254 | _26.push(_36); |
||
| 255 | } |
||
| 256 | } |
||
| 257 | if(err){
|
||
| 258 | _26=[]; |
||
| 259 | } |
||
| 260 | _20(_26,_24); |
||
| 261 | }else{
|
||
| 262 | for(var i=0;i<_25.length;++i){ |
||
| 263 | var _38=_25[i];
|
||
| 264 | if(_38!==null){ |
||
| 265 | _26.push(_38); |
||
| 266 | } |
||
| 267 | } |
||
| 268 | _20(_26,_24); |
||
| 269 | } |
||
| 270 | }; |
||
| 271 | if(this._loadFinished){ |
||
| 272 | _23(_1f,this._getItemsArray(_1f.queryOptions));
|
||
| 273 | }else{
|
||
| 274 | if(this._jsonFileUrl!==this._ccUrl){ |
||
| 275 | dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); |
||
| 276 | this._ccUrl=this._jsonFileUrl; |
||
| 277 | this.url=this._jsonFileUrl; |
||
| 278 | }else{
|
||
| 279 | if(this.url!==this._ccUrl){ |
||
| 280 | this._jsonFileUrl=this.url; |
||
| 281 | this._ccUrl=this.url; |
||
| 282 | } |
||
| 283 | } |
||
| 284 | if(this.data!=null&&this._jsonData==null){ |
||
| 285 | this._jsonData=this.data; |
||
| 286 | this.data=null; |
||
| 287 | } |
||
| 288 | if(this._jsonFileUrl){ |
||
| 289 | if(this._loadInProgress){ |
||
| 290 | this._queuedFetches.push({args:_1f,filter:_23}); |
||
| 291 | }else{
|
||
| 292 | this._loadInProgress=true; |
||
| 293 | var _39={url:_22._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache}; |
||
| 294 | var _3a=dojo.xhrGet(_39);
|
||
| 295 | _3a.addCallback(function(_3b){
|
||
| 296 | try{
|
||
| 297 | _22._getItemsFromLoadedData(_3b); |
||
| 298 | _22._loadFinished=true;
|
||
| 299 | _22._loadInProgress=false;
|
||
| 300 | _23(_1f,_22._getItemsArray(_1f.queryOptions)); |
||
| 301 | _22._handleQueuedFetches(); |
||
| 302 | } |
||
| 303 | catch(e){
|
||
| 304 | _22._loadFinished=true;
|
||
| 305 | _22._loadInProgress=false;
|
||
| 306 | _21(e,_1f); |
||
| 307 | } |
||
| 308 | }); |
||
| 309 | _3a.addErrback(function(_3c){
|
||
| 310 | _22._loadInProgress=false;
|
||
| 311 | _21(_3c,_1f); |
||
| 312 | }); |
||
| 313 | var _3d=null; |
||
| 314 | if(_1f.abort){
|
||
| 315 | _3d=_1f.abort; |
||
| 316 | } |
||
| 317 | _1f.abort=function(){ |
||
| 318 | var df=_3a;
|
||
| 319 | if(df&&df.fired===-1){ |
||
| 320 | df.cancel(); |
||
| 321 | df=null;
|
||
| 322 | } |
||
| 323 | if(_3d){
|
||
| 324 | _3d.call(_1f); |
||
| 325 | } |
||
| 326 | }; |
||
| 327 | } |
||
| 328 | }else{
|
||
| 329 | if(this._jsonData){ |
||
| 330 | try{
|
||
| 331 | this._loadFinished=true; |
||
| 332 | this._getItemsFromLoadedData(this._jsonData); |
||
| 333 | this._jsonData=null; |
||
| 334 | _23(_1f,this._getItemsArray(_1f.queryOptions));
|
||
| 335 | } |
||
| 336 | catch(e){
|
||
| 337 | _21(e,_1f); |
||
| 338 | } |
||
| 339 | }else{
|
||
| 340 | _21(new Error("dojox.data.AndOrReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_1f); |
||
| 341 | } |
||
| 342 | } |
||
| 343 | } |
||
| 344 | },_handleQueuedFetches:function(){ |
||
| 345 | if(this._queuedFetches.length>0){ |
||
| 346 | for(var i=0;i<this._queuedFetches.length;i++){ |
||
| 347 | var _3e=this._queuedFetches[i]; |
||
| 348 | var _3f=_3e.args;
|
||
| 349 | var _40=_3e.filter;
|
||
| 350 | if(_40){
|
||
| 351 | _40(_3f,this._getItemsArray(_3f.queryOptions));
|
||
| 352 | }else{
|
||
| 353 | this.fetchItemByIdentity(_3f);
|
||
| 354 | } |
||
| 355 | } |
||
| 356 | this._queuedFetches=[];
|
||
| 357 | } |
||
| 358 | },_getItemsArray:function(_41){ |
||
| 359 | if(_41&&_41.deep){
|
||
| 360 | return this._arrayOfAllItems; |
||
| 361 | } |
||
| 362 | return this._arrayOfTopLevelItems; |
||
| 363 | },close:function(_42){ |
||
| 364 | if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){ |
||
| 365 | if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){ |
||
| 366 | } |
||
| 367 | this._arrayOfAllItems=[];
|
||
| 368 | this._arrayOfTopLevelItems=[];
|
||
| 369 | this._loadFinished=false; |
||
| 370 | this._itemsByIdentity=null; |
||
| 371 | this._loadInProgress=false; |
||
| 372 | this._queuedFetches=[];
|
||
| 373 | } |
||
| 374 | },_getItemsFromLoadedData:function(_43){ |
||
| 375 | var _44=this; |
||
| 376 | function _45(_46){ |
||
| 377 | var _47=((_46!==null)&&(typeof _46==="object")&&(!dojo.isArray(_46))&&(!dojo.isFunction(_46))&&(_46.constructor==Object)&&(typeof _46._reference==="undefined")&&(typeof _46._type==="undefined")&&(typeof _46._value==="undefined")&&_44.hierarchical); |
||
| 378 | return _47;
|
||
| 379 | }; |
||
| 380 | function _48(_49){ |
||
| 381 | _44._arrayOfAllItems.push(_49); |
||
| 382 | for(var _4a in _49){ |
||
| 383 | var _4b=_49[_4a];
|
||
| 384 | if(_4b){
|
||
| 385 | if(dojo.isArray(_4b)){
|
||
| 386 | var _4c=_4b;
|
||
| 387 | for(var k=0;k<_4c.length;++k){ |
||
| 388 | var _4d=_4c[k];
|
||
| 389 | if(_45(_4d)){
|
||
| 390 | _48(_4d); |
||
| 391 | } |
||
| 392 | } |
||
| 393 | }else{
|
||
| 394 | if(_45(_4b)){
|
||
| 395 | _48(_4b); |
||
| 396 | } |
||
| 397 | } |
||
| 398 | } |
||
| 399 | } |
||
| 400 | }; |
||
| 401 | this._labelAttr=_43.label;
|
||
| 402 | var i;
|
||
| 403 | var _4e;
|
||
| 404 | this._arrayOfAllItems=[];
|
||
| 405 | this._arrayOfTopLevelItems=_43.items;
|
||
| 406 | for(i=0;i<this._arrayOfTopLevelItems.length;++i){ |
||
| 407 | _4e=this._arrayOfTopLevelItems[i];
|
||
| 408 | _48(_4e); |
||
| 409 | _4e[this._rootItemPropName]=true; |
||
| 410 | } |
||
| 411 | var _4f={};
|
||
| 412 | var key;
|
||
| 413 | for(i=0;i<this._arrayOfAllItems.length;++i){ |
||
| 414 | _4e=this._arrayOfAllItems[i];
|
||
| 415 | for(key in _4e){ |
||
| 416 | if(key!==this._rootItemPropName){ |
||
| 417 | var _50=_4e[key];
|
||
| 418 | if(_50!==null){ |
||
| 419 | if(!dojo.isArray(_50)){
|
||
| 420 | _4e[key]=[_50]; |
||
| 421 | } |
||
| 422 | }else{
|
||
| 423 | _4e[key]=[null];
|
||
| 424 | } |
||
| 425 | } |
||
| 426 | _4f[key]=key; |
||
| 427 | } |
||
| 428 | } |
||
| 429 | while(_4f[this._storeRefPropName]){ |
||
| 430 | this._storeRefPropName+="_"; |
||
| 431 | } |
||
| 432 | while(_4f[this._itemNumPropName]){ |
||
| 433 | this._itemNumPropName+="_"; |
||
| 434 | } |
||
| 435 | while(_4f[this._reverseRefMap]){ |
||
| 436 | this._reverseRefMap+="_"; |
||
| 437 | } |
||
| 438 | var _51;
|
||
| 439 | var _52=_43.identifier;
|
||
| 440 | if(_52){
|
||
| 441 | this._itemsByIdentity={};
|
||
| 442 | this._features["dojo.data.api.Identity"]=_52; |
||
| 443 | for(i=0;i<this._arrayOfAllItems.length;++i){ |
||
| 444 | _4e=this._arrayOfAllItems[i];
|
||
| 445 | _51=_4e[_52]; |
||
| 446 | var _53=_51[0]; |
||
| 447 | if(!this._itemsByIdentity[_53]){ |
||
| 448 | this._itemsByIdentity[_53]=_4e;
|
||
| 449 | }else{
|
||
| 450 | if(this._jsonFileUrl){ |
||
| 451 | throw new Error("dojox.data.AndOrReadStore: The json data as specified by: ["+this._jsonFileUrl+"] is malformed. Items within the list have identifier: ["+_52+"]. Value collided: ["+_53+"]"); |
||
| 452 | }else{
|
||
| 453 | if(this._jsonData){ |
||
| 454 | throw new Error("dojox.data.AndOrReadStore: The json data provided by the creation arguments is malformed. Items within the list have identifier: ["+_52+"]. Value collided: ["+_53+"]"); |
||
| 455 | } |
||
| 456 | } |
||
| 457 | } |
||
| 458 | } |
||
| 459 | }else{
|
||
| 460 | this._features["dojo.data.api.Identity"]=Number; |
||
| 461 | } |
||
| 462 | for(i=0;i<this._arrayOfAllItems.length;++i){ |
||
| 463 | _4e=this._arrayOfAllItems[i];
|
||
| 464 | _4e[this._storeRefPropName]=this; |
||
| 465 | _4e[this._itemNumPropName]=i;
|
||
| 466 | } |
||
| 467 | for(i=0;i<this._arrayOfAllItems.length;++i){ |
||
| 468 | _4e=this._arrayOfAllItems[i];
|
||
| 469 | for(key in _4e){ |
||
| 470 | _51=_4e[key]; |
||
| 471 | for(var j=0;j<_51.length;++j){ |
||
| 472 | _50=_51[j]; |
||
| 473 | if(_50!==null&&typeof _50=="object"){ |
||
| 474 | if(("_type" in _50)&&("_value" in _50)){ |
||
| 475 | var _54=_50._type;
|
||
| 476 | var _55=this._datatypeMap[_54]; |
||
| 477 | if(!_55){
|
||
| 478 | throw new Error("dojox.data.AndOrReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+_54+"'"); |
||
| 479 | }else{
|
||
| 480 | if(dojo.isFunction(_55)){
|
||
| 481 | _51[j]=new _55(_50._value);
|
||
| 482 | }else{
|
||
| 483 | if(dojo.isFunction(_55.deserialize)){
|
||
| 484 | _51[j]=_55.deserialize(_50._value); |
||
| 485 | }else{
|
||
| 486 | throw new Error("dojox.data.AndOrReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function"); |
||
| 487 | } |
||
| 488 | } |
||
| 489 | } |
||
| 490 | } |
||
| 491 | if(_50._reference){
|
||
| 492 | var _56=_50._reference;
|
||
| 493 | if(!dojo.isObject(_56)){
|
||
| 494 | _51[j]=this._getItemByIdentity(_56);
|
||
| 495 | }else{
|
||
| 496 | for(var k=0;k<this._arrayOfAllItems.length;++k){ |
||
| 497 | var _57=this._arrayOfAllItems[k]; |
||
| 498 | var _58=true; |
||
| 499 | for(var _59 in _56){ |
||
| 500 | if(_57[_59]!=_56[_59]){
|
||
| 501 | _58=false;
|
||
| 502 | } |
||
| 503 | } |
||
| 504 | if(_58){
|
||
| 505 | _51[j]=_57; |
||
| 506 | } |
||
| 507 | } |
||
| 508 | } |
||
| 509 | if(this.referenceIntegrity){ |
||
| 510 | var _5a=_51[j];
|
||
| 511 | if(this.isItem(_5a)){ |
||
| 512 | this._addReferenceToMap(_5a,_4e,key);
|
||
| 513 | } |
||
| 514 | } |
||
| 515 | }else{
|
||
| 516 | if(this.isItem(_50)){ |
||
| 517 | if(this.referenceIntegrity){ |
||
| 518 | this._addReferenceToMap(_50,_4e,key);
|
||
| 519 | } |
||
| 520 | } |
||
| 521 | } |
||
| 522 | } |
||
| 523 | } |
||
| 524 | } |
||
| 525 | } |
||
| 526 | },_addReferenceToMap:function(_5b,_5c,_5d){ |
||
| 527 | },getIdentity:function(_5e){ |
||
| 528 | var _5f=this._features["dojo.data.api.Identity"]; |
||
| 529 | if(_5f===Number){
|
||
| 530 | return _5e[this._itemNumPropName]; |
||
| 531 | }else{
|
||
| 532 | var _60=_5e[_5f];
|
||
| 533 | if(_60){
|
||
| 534 | return _60[0]; |
||
| 535 | } |
||
| 536 | } |
||
| 537 | return null; |
||
| 538 | },fetchItemByIdentity:function(_61){ |
||
| 539 | if(!this._loadFinished){ |
||
| 540 | var _62=this; |
||
| 541 | if(this._jsonFileUrl!==this._ccUrl){ |
||
| 542 | dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); |
||
| 543 | this._ccUrl=this._jsonFileUrl; |
||
| 544 | this.url=this._jsonFileUrl; |
||
| 545 | }else{
|
||
| 546 | if(this.url!==this._ccUrl){ |
||
| 547 | this._jsonFileUrl=this.url; |
||
| 548 | this._ccUrl=this.url; |
||
| 549 | } |
||
| 550 | } |
||
| 551 | if(this.data!=null&&this._jsonData==null){ |
||
| 552 | this._jsonData=this.data; |
||
| 553 | this.data=null; |
||
| 554 | } |
||
| 555 | if(this._jsonFileUrl){ |
||
| 556 | if(this._loadInProgress){ |
||
| 557 | this._queuedFetches.push({args:_61}); |
||
| 558 | }else{
|
||
| 559 | this._loadInProgress=true; |
||
| 560 | var _63={url:_62._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache}; |
||
| 561 | var _64=dojo.xhrGet(_63);
|
||
| 562 | _64.addCallback(function(_65){
|
||
| 563 | var _66=_61.scope?_61.scope:dojo.global;
|
||
| 564 | try{
|
||
| 565 | _62._getItemsFromLoadedData(_65); |
||
| 566 | _62._loadFinished=true;
|
||
| 567 | _62._loadInProgress=false;
|
||
| 568 | var _67=_62._getItemByIdentity(_61.identity);
|
||
| 569 | if(_61.onItem){
|
||
| 570 | _61.onItem.call(_66,_67); |
||
| 571 | } |
||
| 572 | _62._handleQueuedFetches(); |
||
| 573 | } |
||
| 574 | catch(error){
|
||
| 575 | _62._loadInProgress=false;
|
||
| 576 | if(_61.onError){
|
||
| 577 | _61.onError.call(_66,error); |
||
| 578 | } |
||
| 579 | } |
||
| 580 | }); |
||
| 581 | _64.addErrback(function(_68){
|
||
| 582 | _62._loadInProgress=false;
|
||
| 583 | if(_61.onError){
|
||
| 584 | var _69=_61.scope?_61.scope:dojo.global;
|
||
| 585 | _61.onError.call(_69,_68); |
||
| 586 | } |
||
| 587 | }); |
||
| 588 | } |
||
| 589 | }else{
|
||
| 590 | if(this._jsonData){ |
||
| 591 | _62._getItemsFromLoadedData(_62._jsonData); |
||
| 592 | _62._jsonData=null;
|
||
| 593 | _62._loadFinished=true;
|
||
| 594 | var _6a=_62._getItemByIdentity(_61.identity);
|
||
| 595 | if(_61.onItem){
|
||
| 596 | var _6b=_61.scope?_61.scope:dojo.global;
|
||
| 597 | _61.onItem.call(_6b,_6a); |
||
| 598 | } |
||
| 599 | } |
||
| 600 | } |
||
| 601 | }else{
|
||
| 602 | var _6a=this._getItemByIdentity(_61.identity); |
||
| 603 | if(_61.onItem){
|
||
| 604 | var _6b=_61.scope?_61.scope:dojo.global;
|
||
| 605 | _61.onItem.call(_6b,_6a); |
||
| 606 | } |
||
| 607 | } |
||
| 608 | },_getItemByIdentity:function(_6c){ |
||
| 609 | var _6d=null; |
||
| 610 | if(this._itemsByIdentity){ |
||
| 611 | _6d=this._itemsByIdentity[_6c];
|
||
| 612 | }else{
|
||
| 613 | _6d=this._arrayOfAllItems[_6c];
|
||
| 614 | } |
||
| 615 | if(_6d===undefined){ |
||
| 616 | _6d=null;
|
||
| 617 | } |
||
| 618 | return _6d;
|
||
| 619 | },getIdentityAttributes:function(_6e){ |
||
| 620 | var _6f=this._features["dojo.data.api.Identity"]; |
||
| 621 | if(_6f===Number){
|
||
| 622 | return null; |
||
| 623 | }else{
|
||
| 624 | return [_6f];
|
||
| 625 | } |
||
| 626 | },_forceLoad:function(){ |
||
| 627 | var _70=this; |
||
| 628 | if(this._jsonFileUrl!==this._ccUrl){ |
||
| 629 | dojo.deprecated("dojox.data.AndOrReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); |
||
| 630 | this._ccUrl=this._jsonFileUrl; |
||
| 631 | this.url=this._jsonFileUrl; |
||
| 632 | }else{
|
||
| 633 | if(this.url!==this._ccUrl){ |
||
| 634 | this._jsonFileUrl=this.url; |
||
| 635 | this._ccUrl=this.url; |
||
| 636 | } |
||
| 637 | } |
||
| 638 | if(this.data!=null&&this._jsonData==null){ |
||
| 639 | this._jsonData=this.data; |
||
| 640 | this.data=null; |
||
| 641 | } |
||
| 642 | if(this._jsonFileUrl){ |
||
| 643 | var _71={url:_70._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,sync:true}; |
||
| 644 | var _72=dojo.xhrGet(_71);
|
||
| 645 | _72.addCallback(function(_73){
|
||
| 646 | try{
|
||
| 647 | if(_70._loadInProgress!==true&&!_70._loadFinished){ |
||
| 648 | _70._getItemsFromLoadedData(_73); |
||
| 649 | _70._loadFinished=true;
|
||
| 650 | }else{
|
||
| 651 | if(_70._loadInProgress){
|
||
| 652 | throw new Error("dojox.data.AndOrReadStore: Unable to perform a synchronous load, an async load is in progress."); |
||
| 653 | } |
||
| 654 | } |
||
| 655 | } |
||
| 656 | catch(e){
|
||
| 657 | throw e;
|
||
| 658 | } |
||
| 659 | }); |
||
| 660 | _72.addErrback(function(_74){
|
||
| 661 | throw _74;
|
||
| 662 | }); |
||
| 663 | }else{
|
||
| 664 | if(this._jsonData){ |
||
| 665 | _70._getItemsFromLoadedData(_70._jsonData); |
||
| 666 | _70._jsonData=null;
|
||
| 667 | _70._loadFinished=true;
|
||
| 668 | } |
||
| 669 | } |
||
| 670 | }}); |
||
| 671 | dojo.extend(dojox.data.AndOrReadStore,dojo.data.util.simpleFetch); |
||
| 672 | } |