/* 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.AppStore"]){dojo._hasResource["dojox.data.AppStore"]=true;dojo.provide("dojox.data.AppStore");dojo.require("dojox.atom.io.Connection");dojo.require("dojo.data.util.simpleFetch");dojo.require("dojo.data.util.filter");dojo.experimental("dojox.data.AppStore");dojo.declare("dojox.data.AppStore",null,{url:"",urlPreventCache:false,xmethod:false,_atomIO:null,_feed:null,_requests:null,_processing:null,_updates:null,_adds:null,_deletes:null,constructor:function(_1){if(_1&&_1.url){this.url=_1.url;}if(_1&&_1.urlPreventCache){this.urlPreventCache=_1.urlPreventCache;}if(!this.url){throw new Error("A URL is required to instantiate an APP Store object");}},_setFeed:function(_2,_3){this._feed=_2;var i;for(i=0;i0)?_d[0]:_c;},getValues:function(_e,_f){this._assertIsItem(_e);var _10=this._assertIsAttribute(_f);if(_10){if((_f==="author"||_f==="contributor"||_f==="link")&&_e[_f+"s"]){return _e[_f+"s"];}if(_f==="category"&&_e.categories){return _e.categories;}if(_e[_f]){_e=_e[_f];if(_e.declaredClass=="dojox.atom.io.model.Content"){return [_e.value];}return [_e];}}return [];},getAttributes:function(_11){this._assertIsItem(_11);var _12=[];for(var key in dojox.atom.io.model._actions){if(this.hasAttribute(_11,key)){_12.push(key);}}return _12;},hasAttribute:function(_13,_14){return this.getValues(_13,_14).length>0;},containsValue:function(_15,_16,_17){var _18=undefined;if(typeof _17==="string"){_18=dojo.data.util.filter.patternToRegExp(_17,false);}return this._containsValue(_15,_16,_17,_18);},_containsValue:function(_19,_1a,_1b,_1c,_1d){var _1e=this.getValues(_19,_1a);for(var i=0;i<_1e.length;++i){var _1f=_1e[i];if(typeof _1f==="string"&&_1c){if(_1d){_1f=_1f.replace(new RegExp(/^\s+/),"");_1f=_1f.replace(new RegExp(/\s+$/),"");}_1f=_1f.replace(/\r|\n|\r\n/g,"");return (_1f.match(_1c)!==null);}else{if(_1b===_1f){return true;}}}return false;},isItem:function(_20){return _20&&_20.store&&_20.store===this;},isItemLoaded:function(_21){return this.isItem(_21);},loadItem:function(_22){this._assertIsItem(_22.item);},_fetchItems:function(_23,_24,_25){if(this._feed){this._finishFetchItems(_23,_24,_25);}else{var _26=false;if(!this._requests){this._requests=[];_26=true;}this._requests.push({request:_23,fh:_24,eh:_25});if(_26){this._atomIO=new dojox.atom.io.Connection(false,this.urlPreventCache);this._atomIO.getFeed(this.url,this._setFeed,null,this);}}},_finishFetchItems:function(_27,_28,_29){var _2a=null;var _2b=this._getAllItems();if(_27.query){var _2c=_27.queryOptions?_27.queryOptions.ignoreCase:false;_2a=[];var _2d={};var key;var _2e;for(key in _27.query){_2e=_27.query[key]+"";if(typeof _2e==="string"){_2d[key]=dojo.data.util.filter.patternToRegExp(_2e,_2c);}}for(var i=0;i<_2b.length;++i){var _2f=true;var _30=_2b[i];for(key in _27.query){_2e=_27.query[key]+"";if(!this._containsValue(_30,key,_2e,_2d[key],_27.trim)){_2f=false;}}if(_2f){_2a.push(_30);}}}else{if(_2b.length>0){_2a=_2b.slice(0,_2b.length);}}try{_28(_2a,_27);}catch(e){_29(e,_27);}},getFeatures:function(){return {"dojo.data.api.Read":true,"dojo.data.api.Write":true,"dojo.data.api.Identity":true};},close:function(_31){this._feed=null;},getLabel:function(_32){if(this.isItem(_32)){return this.getValue(_32,"title","No Title");}return undefined;},getLabelAttributes:function(_33){return ["title"];},getIdentity:function(_34){this._assertIsItem(_34);return this.getValue(_34,"id");},getIdentityAttributes:function(_35){return ["id"];},fetchItemByIdentity:function(_36){this._fetchItems({query:{id:_36.identity},onItem:_36.onItem,scope:_36.scope},function(_37,_38){var _39=_38.scope;if(!_39){_39=dojo.global;}if(_37.length<1){_38.onItem.call(_39,null);}else{_38.onItem.call(_39,_37[0]);}},_36.onError);},newItem:function(_3a){var _3b=new dojox.atom.io.model.Entry();var _3c=null;var _3d=null;var i;for(var key in _3a){if(this._assertIsAttribute(key)){_3c=_3a[key];switch(key){case "link":for(i in _3c){_3d=_3c[i];_3b.addLink(_3d.href,_3d.rel,_3d.hrefLang,_3d.title,_3d.type);}break;case "author":for(i in _3c){_3d=_3c[i];_3b.addAuthor(_3d.name,_3d.email,_3d.uri);}break;case "contributor":for(i in _3c){_3d=_3c[i];_3b.addContributor(_3d.name,_3d.email,_3d.uri);}break;case "category":for(i in _3c){_3d=_3c[i];_3b.addCategory(_3d.scheme,_3d.term,_3d.label);}break;case "icon":case "id":case "logo":case "xmlBase":case "rights":_3b[key]=_3c;break;case "updated":case "published":case "issued":case "modified":_3b[key]=dojox.atom.io.model.util.createDate(_3c);break;case "content":case "summary":case "title":case "subtitle":_3b[key]=new dojox.atom.io.model.Content(key);_3b[key].value=_3c;break;default:_3b[key]=_3c;break;}}}_3b.store=this;_3b.isDirty=true;if(!this._adds){this._adds=[_3b];}else{this._adds.push(_3b);}if(this._feed){this._feed.addEntry(_3b);}else{if(this._requests){this._requests.push({add:_3b});}else{this._requests=[{add:_3b}];this._atomIO=new dojox.atom.io.Connection(false,this.urlPreventCache);this._atomIO.getFeed(this.url,dojo.hitch(this,this._setFeed));}}return true;},deleteItem:function(_3e){this._assertIsItem(_3e);if(!this._deletes){this._deletes=[_3e];}else{this._deletes.push(_3e);}if(this._feed){this._feed.removeEntry(_3e);}else{if(this._requests){this._requests.push({remove:_3e});}else{this._requests=[{remove:_3e}];this._atomIO=new dojox.atom.io.Connection(false,this.urlPreventCache);this._atomIO.getFeed(this.url,dojo.hitch(this,this._setFeed));}}_3e=null;return true;},setValue:function(_3f,_40,_41){this._assertIsItem(_3f);var _42={item:_3f};if(this._assertIsAttribute(_40)){switch(_40){case "link":_42.links=_3f.links;this._addUpdate(_42);_3f.links=null;_3f.addLink(_41.href,_41.rel,_41.hrefLang,_41.title,_41.type);_3f.isDirty=true;return true;case "author":_42.authors=_3f.authors;this._addUpdate(_42);_3f.authors=null;_3f.addAuthor(_41.name,_41.email,_41.uri);_3f.isDirty=true;return true;case "contributor":_42.contributors=_3f.contributors;this._addUpdate(_42);_3f.contributors=null;_3f.addContributor(_41.name,_41.email,_41.uri);_3f.isDirty=true;return true;case "category":_42.categories=_3f.categories;this._addUpdate(_42);_3f.categories=null;_3f.addCategory(_41.scheme,_41.term,_41.label);_3f.isDirty=true;return true;case "icon":case "id":case "logo":case "xmlBase":case "rights":_42[_40]=_3f[_40];this._addUpdate(_42);_3f[_40]=_41;_3f.isDirty=true;return true;case "updated":case "published":case "issued":case "modified":_42[_40]=_3f[_40];this._addUpdate(_42);_3f[_40]=dojox.atom.io.model.util.createDate(_41);_3f.isDirty=true;return true;case "content":case "summary":case "title":case "subtitle":_42[_40]=_3f[_40];this._addUpdate(_42);_3f[_40]=new dojox.atom.io.model.Content(_40);_3f[_40].value=_41;_3f.isDirty=true;return true;default:_42[_40]=_3f[_40];this._addUpdate(_42);_3f[_40]=_41;_3f.isDirty=true;return true;}}return false;},setValues:function(_43,_44,_45){if(_45.length===0){return this.unsetAttribute(_43,_44);}this._assertIsItem(_43);var _46={item:_43};var _47;var i;if(this._assertIsAttribute(_44)){switch(_44){case "link":_46.links=_43.links;_43.links=null;for(i in _45){_47=_45[i];_43.addLink(_47.href,_47.rel,_47.hrefLang,_47.title,_47.type);}_43.isDirty=true;return true;case "author":_46.authors=_43.authors;_43.authors=null;for(i in _45){_47=_45[i];_43.addAuthor(_47.name,_47.email,_47.uri);}_43.isDirty=true;return true;case "contributor":_46.contributors=_43.contributors;_43.contributors=null;for(i in _45){_47=_45[i];_43.addContributor(_47.name,_47.email,_47.uri);}_43.isDirty=true;return true;case "categories":_46.categories=_43.categories;_43.categories=null;for(i in _45){_47=_45[i];_43.addCategory(_47.scheme,_47.term,_47.label);}_43.isDirty=true;return true;case "icon":case "id":case "logo":case "xmlBase":case "rights":_46[_44]=_43[_44];_43[_44]=_45[0];_43.isDirty=true;return true;case "updated":case "published":case "issued":case "modified":_46[_44]=_43[_44];_43[_44]=dojox.atom.io.model.util.createDate(_45[0]);_43.isDirty=true;return true;case "content":case "summary":case "title":case "subtitle":_46[_44]=_43[_44];_43[_44]=new dojox.atom.io.model.Content(_44);_43[_44].values[0]=_45[0];_43.isDirty=true;return true;default:_46[_44]=_43[_44];_43[_44]=_45[0];_43.isDirty=true;return true;}}this._addUpdate(_46);return false;},unsetAttribute:function(_48,_49){this._assertIsItem(_48);if(this._assertIsAttribute(_49)){if(_48[_49]!==null){var _4a={item:_48};switch(_49){case "author":case "contributor":case "link":_4a[_49+"s"]=_48[_49+"s"];break;case "category":_4a.categories=_48.categories;break;default:_4a[_49]=_48[_49];break;}_48.isDirty=true;_48[_49]=null;this._addUpdate(_4a);return true;}}return false;},save:function(_4b){var i;for(i in this._adds){this._atomIO.addEntry(this._adds[i],null,function(){},_4b.onError,false,_4b.scope);}this._adds=null;for(i in this._updates){this._atomIO.updateEntry(this._updates[i].item,function(){},_4b.onError,false,this.xmethod,_4b.scope);}this._updates=null;for(i in this._deletes){this._atomIO.removeEntry(this._deletes[i],function(){},_4b.onError,this.xmethod,_4b.scope);}this._deletes=null;this._atomIO.getFeed(this.url,dojo.hitch(this,this._setFeed));if(_4b.onComplete){var _4c=_4b.scope||dojo.global;_4b.onComplete.call(_4c);}},revert:function(){var i;for(i in this._adds){this._feed.removeEntry(this._adds[i]);}this._adds=null;var _4d,_4e,key;for(i in this._updates){_4d=this._updates[i];_4e=_4d.item;for(key in _4d){if(key!=="item"){_4e[key]=_4d[key];}}}this._updates=null;for(i in this._deletes){this._feed.addEntry(this._deletes[i]);}this._deletes=null;return true;},isDirty:function(_4f){if(_4f){this._assertIsItem(_4f);return _4f.isDirty?true:false;}return (this._adds!==null||this._updates!==null);}});dojo.extend(dojox.data.AppStore,dojo.data.util.simpleFetch);}