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 | } |