blob: dd7b37ba403b8c01fe5d59823fa7b5425b8bdab6 [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.data.FileStore"]){
dojo._hasResource["dojox.data.FileStore"]=true;
dojo.provide("dojox.data.FileStore");
dojo.declare("dojox.data.FileStore",null,{constructor:function(_1){
if(_1&&_1.label){
this.label=_1.label;
}
if(_1&&_1.url){
this.url=_1.url;
}
if(_1&&_1.options){
if(dojo.isArray(_1.options)){
this.options=_1.options;
}else{
if(dojo.isString(_1.options)){
this.options=_1.options.split(",");
}
}
}
if(_1&&_1.pathAsQueryParam){
this.pathAsQueryParam=true;
}
if(_1&&"urlPreventCache" in _1){
this.urlPreventCache=_1.urlPreventCache?true:false;
}
},url:"",_storeRef:"_S",label:"name",_identifier:"path",_attributes:["children","directory","name","path","modified","size","parentDir"],pathSeparator:"/",options:[],failOk:false,urlPreventCache:true,_assertIsItem:function(_2){
if(!this.isItem(_2)){
throw new Error("dojox.data.FileStore: a function was passed an item argument that was not an item");
}
},_assertIsAttribute:function(_3){
if(typeof _3!=="string"){
throw new Error("dojox.data.FileStore: a function was passed an attribute argument that was not an attribute name string");
}
},pathAsQueryParam:false,getFeatures:function(){
return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
},getValue:function(_4,_5,_6){
var _7=this.getValues(_4,_5);
if(_7&&_7.length>0){
return _7[0];
}
return _6;
},getAttributes:function(_8){
return this._attributes;
},hasAttribute:function(_9,_a){
this._assertIsItem(_9);
this._assertIsAttribute(_a);
return (_a in _9);
},getIdentity:function(_b){
return this.getValue(_b,this._identifier);
},getIdentityAttributes:function(_c){
return [this._identifier];
},isItemLoaded:function(_d){
var _e=this.isItem(_d);
if(_e&&typeof _d._loaded=="boolean"&&!_d._loaded){
_e=false;
}
return _e;
},loadItem:function(_f){
var _10=_f.item;
var _11=this;
var _12=_f.scope||dojo.global;
var _13={};
if(this.options.length>0){
_13.options=dojo.toJson(this.options);
}
if(this.pathAsQueryParam){
_13.path=_10.parentPath+this.pathSeparator+_10.name;
}
var _14={url:this.pathAsQueryParam?this.url:this.url+"/"+_10.parentPath+"/"+_10.name,handleAs:"json-comment-optional",content:_13,preventCache:this.urlPreventCache,failOk:this.failOk};
var _15=dojo.xhrGet(_14);
_15.addErrback(function(_16){
if(_f.onError){
_f.onError.call(_12,_16);
}
});
_15.addCallback(function(_17){
delete _10.parentPath;
delete _10._loaded;
dojo.mixin(_10,_17);
_11._processItem(_10);
if(_f.onItem){
_f.onItem.call(_12,_10);
}
});
},getLabel:function(_18){
return this.getValue(_18,this.label);
},getLabelAttributes:function(_19){
return [this.label];
},containsValue:function(_1a,_1b,_1c){
var _1d=this.getValues(_1a,_1b);
for(var i=0;i<_1d.length;i++){
if(_1d[i]==_1c){
return true;
}
}
return false;
},getValues:function(_1e,_1f){
this._assertIsItem(_1e);
this._assertIsAttribute(_1f);
var _20=_1e[_1f];
if(typeof _20!=="undefined"&&!dojo.isArray(_20)){
_20=[_20];
}else{
if(typeof _20==="undefined"){
_20=[];
}
}
return _20;
},isItem:function(_21){
if(_21&&_21[this._storeRef]===this){
return true;
}
return false;
},close:function(_22){
},fetch:function(_23){
_23=_23||{};
if(!_23.store){
_23.store=this;
}
var _24=this;
var _25=_23.scope||dojo.global;
var _26={};
if(_23.query){
_26.query=dojo.toJson(_23.query);
}
if(_23.sort){
_26.sort=dojo.toJson(_23.sort);
}
if(_23.queryOptions){
_26.queryOptions=dojo.toJson(_23.queryOptions);
}
if(typeof _23.start=="number"){
_26.start=""+_23.start;
}
if(typeof _23.count=="number"){
_26.count=""+_23.count;
}
if(this.options.length>0){
_26.options=dojo.toJson(this.options);
}
var _27={url:this.url,preventCache:this.urlPreventCache,failOk:this.failOk,handleAs:"json-comment-optional",content:_26};
var _28=dojo.xhrGet(_27);
_28.addCallback(function(_29){
_24._processResult(_29,_23);
});
_28.addErrback(function(_2a){
if(_23.onError){
_23.onError.call(_25,_2a,_23);
}
});
},fetchItemByIdentity:function(_2b){
var _2c=_2b.identity;
var _2d=this;
var _2e=_2b.scope||dojo.global;
var _2f={};
if(this.options.length>0){
_2f.options=dojo.toJson(this.options);
}
if(this.pathAsQueryParam){
_2f.path=_2c;
}
var _30={url:this.pathAsQueryParam?this.url:this.url+"/"+_2c,handleAs:"json-comment-optional",content:_2f,preventCache:this.urlPreventCache,failOk:this.failOk};
var _31=dojo.xhrGet(_30);
_31.addErrback(function(_32){
if(_2b.onError){
_2b.onError.call(_2e,_32);
}
});
_31.addCallback(function(_33){
var _34=_2d._processItem(_33);
if(_2b.onItem){
_2b.onItem.call(_2e,_34);
}
});
},_processResult:function(_35,_36){
var _37=_36.scope||dojo.global;
try{
if(_35.pathSeparator){
this.pathSeparator=_35.pathSeparator;
}
if(_36.onBegin){
_36.onBegin.call(_37,_35.total,_36);
}
var _38=this._processItemArray(_35.items);
if(_36.onItem){
var i;
for(i=0;i<_38.length;i++){
_36.onItem.call(_37,_38[i],_36);
}
_38=null;
}
if(_36.onComplete){
_36.onComplete.call(_37,_38,_36);
}
}
catch(e){
if(_36.onError){
_36.onError.call(_37,e,_36);
}else{
}
}
},_processItemArray:function(_39){
var i;
for(i=0;i<_39.length;i++){
this._processItem(_39[i]);
}
return _39;
},_processItem:function(_3a){
if(!_3a){
return null;
}
_3a[this._storeRef]=this;
if(_3a.children&&_3a.directory){
if(dojo.isArray(_3a.children)){
var _3b=_3a.children;
var i;
for(i=0;i<_3b.length;i++){
var _3c=_3b[i];
if(dojo.isObject(_3c)){
_3b[i]=this._processItem(_3c);
}else{
_3b[i]={name:_3c,_loaded:false,parentPath:_3a.path};
_3b[i][this._storeRef]=this;
}
}
}else{
delete _3a.children;
}
}
return _3a;
}});
}