/*
	Copyright (c) 2004-2008, 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.ServiceStore"]){
dojo._hasResource["dojox.data.ServiceStore"]=true;
dojo.provide("dojox.data.ServiceStore");
dojo.declare("dojox.data.ServiceStore",dojox.data.ClientFilter,{constructor:function(_1){
this.byId=this.fetchItemByIdentity;
this._index={};
if(_1){
dojo.mixin(this,_1);
}
this.idAttribute=(_1&&_1.idAttribute)||(this.schema&&this.schema._idAttr);
this.labelAttribute=this.labelAttribute||"label";
},schema:null,idAttribute:"id",syncMode:false,getSchema:function(){
return this.schema;
},loadLazyValues:true,getValue:function(_2,_3,_4){
var _5=_2[_3];
return _5||(_3 in _2?_5:_2._loadObject?(dojox.rpc._sync=true)&&arguments.callee.call(this,dojox.data.ServiceStore.prototype.loadItem({item:_2})||{},_3,_4):_4);
},getValues:function(_6,_7){
var _8=this.getValue(_6,_7);
return _8 instanceof Array?_8:_8===undefined?[]:[_8];
},getAttributes:function(_9){
var _a=[];
for(var i in _9){
_a.push(i);
}
return _a;
},hasAttribute:function(_c,_d){
return _d in _c;
},containsValue:function(_e,_f,_10){
return dojo.indexOf(this.getValues(_e,_f),_10)>-1;
},isItem:function(_11){
return typeof _11=="object";
},isItemLoaded:function(_12){
return _12&&!_12._loadObject;
},loadItem:function(_13){
var _14;
if(_13.item._loadObject){
_13.item._loadObject(function(_15){
_14=_15;
delete _14._loadObject;
var _16=_15 instanceof Error?_13.onError:_13.onItem;
if(_16){
_16.call(_13.scope,_15);
}
});
}
return _14;
},_currentId:0,_processResults:function(_17,_18){
if(_17&&typeof _17=="object"){
var id=_17.__id;
if(!id){
if(this.idAttribute){
id=_17[this.idAttribute];
}else{
id=this._currentId++;
}
if(id!==undefined){
var _1a=this._index[id];
if(_1a){
for(var j in _1a){
delete _1a[j];
}
_17=dojo.mixin(_1a,_17);
}
_17.__id=id;
this._index[id]=_17;
}
}
for(var i in _17){
_17[i]=this._processResults(_17[i],_18).items;
}
}
var _1d=_17.length;
return {totalCount:_18.request.count==_1d?_1d*2:_1d,items:_17};
},close:function(_1e){
return _1e&&_1e.abort&&_1e.abort();
},fetch:function(_1f){
_1f=_1f||{};
if("syncMode" in _1f?_1f.syncMode:this.syncMode){
dojox.rpc._sync=true;
}
var _20=this;
var _21=_1f.scope||_20;
var _22=this.cachingFetch?this.cachingFetch(_1f):this._doQuery(_1f);
_22.request=_1f;
_22.addCallback(function(_23){
if(_1f.clientQuery){
_23=_20.clientSideFetch({query:_1f.clientFetch,sort:_1f.sort,start:_1f.start,count:_1f.count},_23);
}
var _24=_20._processResults(_23,_22);
_23=_1f.results=_24.items;
if(_1f.onBegin){
_1f.onBegin.call(_21,_24.totalCount,_1f);
}
if(_1f.onItem){
for(var i=0;i<_23.length;i++){
_1f.onItem.call(_21,_23[i],_1f);
}
}
if(_1f.onComplete){
_1f.onComplete.call(_21,_1f.onItem?null:_23,_1f);
}
return _23;
});
_22.addErrback(_1f.onError&&dojo.hitch(_21,_1f.onError));
_1f.abort=function(){
_22.ioArgs.xhr.abort();
};
_1f.store=this;
return _1f;
},_doQuery:function(_26){
var _27=typeof _26.queryStr=="string"?_26.queryStr:_26.query;
return this.service(_27);
},getFeatures:function(){
return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true,"dojo.data.api.Schema":this.schema};
},getLabel:function(_28){
return this.getValue(_28,this.labelAttribute);
},getLabelAttributes:function(_29){
return [this.labelAttribute];
},getIdentity:function(_2a){
if(!("__id" in _2a)){
throw new Error("Identity attribute not found");
}
return _2a.__id;
},getIdentityAttributes:function(_2b){
return [this.idAttribute];
},fetchItemByIdentity:function(_2c){
var _2d=this._index[(_2c._prefix||"")+_2c.identity];
if(_2d&&_2c.onItem){
_2c.onItem.call(_2c.scope,_2d);
}else{
return this.fetch({query:_2c.identity,onComplete:_2c.onItem,onError:_2c.onError,scope:_2c.scope}).results;
}
return _2d;
}});
}
