/* 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.CdfStore"]){dojo._hasResource["dojox.data.CdfStore"]=true;dojo.provide("dojox.data.CdfStore");dojo.require("dojo.data.util.sorter");dojox.data.ASYNC_MODE=0;dojox.data.SYNC_MODE=1;dojo.declare("dojox.data.CdfStore",null,{identity:"jsxid",url:"",xmlStr:"",data:null,label:"",mode:dojox.data.ASYNC_MODE,constructor:function(_1){if(_1){this.url=_1.url;this.xmlStr=_1.xmlStr||_1.str;if(_1.data){this.xmlStr=this._makeXmlString(_1.data);}this.identity=_1.identity||this.identity;this.label=_1.label||this.label;this.mode=_1.mode!==undefined?_1.mode:this.mode;}this._modifiedItems={};this.byId=this.fetchItemByIdentity;},getValue:function(_2,_3,_4){return _2.getAttribute(_3)||_4;},getValues:function(_5,_6){var v=this.getValue(_5,_6,[]);return dojo.isArray(v)?v:[v];},getAttributes:function(_7){return _7.getAttributeNames();},hasAttribute:function(_8,_9){return (this.getValue(_8,_9)!==undefined);},hasProperty:function(_a,_b){return this.hasAttribute(_a,_b);},containsValue:function(_c,_d,_e){var _f=this.getValues(_c,_d);for(var i=0;i<_f.length;i++){if(_f[i]===null){continue;}if((typeof _e==="string")){if(_f[i].toString&&_f[i].toString()===_e){return true;}}else{if(_f[i]===_e){return true;}}}return false;},isItem:function(_10){if(_10.getClass&&_10.getClass().equals(jsx3.xml.Entity.jsxclass)){return true;}return false;},isItemLoaded:function(_11){return this.isItem(_11);},loadItem:function(_12){},getFeatures:function(){return {"dojo.data.api.Read":true,"dojo.data.api.Write":true,"dojo.data.api.Identity":true};},getLabel:function(_13){if((this.label!=="")&&this.isItem(_13)){var _14=this.getValue(_13,this.label);if(_14){return _14.toString();}}return undefined;},getLabelAttributes:function(_15){if(this.label!==""){return [this.label];}return null;},fetch:function(_16){_16=_16||{};if(!_16.store){_16.store=this;}if(_16.mode!==undefined){this.mode=_16.mode;}var _17=this;var _18=function(_19){if(_16.onError){var _1a=_16.scope||dojo.global;_16.onError.call(_1a,_19,_16);}else{console.error("cdfStore Error:",_19);}};var _1b=function(_1c,_1d){_1d=_1d||_16;var _1e=_1d.abort||null;var _1f=false;var _20=_1d.start?_1d.start:0;var _21=(_1d.count&&(_1d.count!==Infinity))?(_20+_1d.count):_1c.length;_1d.abort=function(){_1f=true;if(_1e){_1e.call(_1d);}};var _22=_1d.scope||dojo.global;if(!_1d.store){_1d.store=_17;}if(_1d.onBegin){_1d.onBegin.call(_22,_1c.length,_1d);}if(_1d.sort){_1c.sort(dojo.data.util.sorter.createSortFunction(_1d.sort,_17));}if(_1d.onItem){for(var i=_20;(i<_1c.length)&&(i<_21);++i){var _23=_1c[i];if(!_1f){_1d.onItem.call(_22,_23,_1d);}}}if(_1d.onComplete&&!_1f){if(!_1d.onItem){_1c=_1c.slice(_20,_21);if(_1d.byId){_1c=_1c[0];}}_1d.onComplete.call(_22,_1c,_1d);}else{_1c=_1c.slice(_20,_21);if(_1d.byId){_1c=_1c[0];}}return _1c;};if(!this.url&&!this.data&&!this.xmlStr){_18(new Error("No URL or data specified."));return false;}var _24=_16||"*";if(this.mode==dojox.data.SYNC_MODE){var res=this._loadCDF();if(res instanceof Error){if(_16.onError){_16.onError.call(_16.scope||dojo.global,res,_16);}else{console.error("CdfStore Error:",res);}return res;}this.cdfDoc=res;var _25=this._getItems(this.cdfDoc,_24);if(_25&&_25.length>0){_25=_1b(_25,_16);}else{_25=_1b([],_16);}return _25;}else{var dfd=this._loadCDF();dfd.addCallbacks(dojo.hitch(this,function(_26){var _27=this._getItems(this.cdfDoc,_24);if(_27&&_27.length>0){_1b(_27,_16);}else{_1b([],_16);}}),dojo.hitch(this,function(err){_18(err,_16);}));return dfd;}},_loadCDF:function(){var dfd=new dojo.Deferred();if(this.cdfDoc){if(this.mode==dojox.data.SYNC_MODE){return this.cdfDoc;}else{setTimeout(dojo.hitch(this,function(){dfd.callback(this.cdfDoc);}),0);return dfd;}}this.cdfDoc=jsx3.xml.CDF.Document.newDocument();this.cdfDoc.subscribe("response",this,function(evt){dfd.callback(this.cdfDoc);});this.cdfDoc.subscribe("error",this,function(err){dfd.errback(err);});this.cdfDoc.setAsync(!this.mode);if(this.url){this.cdfDoc.load(this.url);}else{if(this.xmlStr){this.cdfDoc.loadXML(this.xmlStr);if(this.cdfDoc.getError().code){return new Error(this.cdfDoc.getError().description);}}}if(this.mode==dojox.data.SYNC_MODE){return this.cdfDoc;}else{return dfd;}},_getItems:function(_28,_29){var itr=_28.selectNodes(_29.query,false,1);var _2a=[];while(itr.hasNext()){_2a.push(itr.next());}return _2a;},close:function(_2b){},newItem:function(_2c,_2d){_2c=(_2c||{});if(_2c.tagName){if(_2c.tagName!="record"){console.warn("Only record inserts are supported at this time");}delete _2c.tagName;}_2c.jsxid=_2c.jsxid||this.cdfDoc.getKey();if(this.isItem(_2d)){_2d=this.getIdentity(_2d);}var _2e=this.cdfDoc.insertRecord(_2c,_2d);this._makeDirty(_2e);return _2e;},deleteItem:function(_2f){this.cdfDoc.deleteRecord(this.getIdentity(_2f));this._makeDirty(_2f);return true;},setValue:function(_30,_31,_32){this._makeDirty(_30);_30.setAttribute(_31,_32);return true;},setValues:function(_33,_34,_35){this._makeDirty(_33);console.warn("cdfStore.setValues only partially implemented.");return _33.setAttribute(_34,_35);},unsetAttribute:function(_36,_37){this._makeDirty(_36);_36.removeAttribute(_37);return true;},revert:function(){delete this.cdfDoc;this._modifiedItems={};return true;},isDirty:function(_38){if(_38){return !!this._modifiedItems[this.getIdentity(_38)];}else{var _39=false;for(var nm in this._modifiedItems){_39=true;break;}return _39;}},_makeDirty:function(_3a){var id=this.getIdentity(_3a);this._modifiedItems[id]=_3a;},_makeXmlString:function(obj){var _3b=function(obj,_3c){var _3d="";var nm;if(dojo.isArray(obj)){for(var i=0;i";}}return _3d;};return _3b(obj,"data");},getIdentity:function(_3e){return this.getValue(_3e,this.identity);},getIdentityAttributes:function(_3f){return [this.identity];},fetchItemByIdentity:function(_40){if(dojo.isString(_40)){var id=_40;_40={query:"//record[@jsxid='"+id+"']",mode:dojox.data.SYNC_MODE};}else{if(_40){_40.query="//record[@jsxid='"+_40.identity+"']";}if(!_40.mode){_40.mode=this.mode;}}_40.byId=true;return this.fetch(_40);},byId:function(_41){}});}