Service.js 3.7 KB

12345678
  1. /*
  2. Copyright (c) 2004-2009, 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. if(!dojo._hasResource["dojox.wire.ml.Service"]){dojo._hasResource["dojox.wire.ml.Service"]=true;dojo.provide("dojox.wire.ml.Service");dojo.provide("dojox.wire.ml.RestHandler");dojo.provide("dojox.wire.ml.XmlHandler");dojo.provide("dojox.wire.ml.JsonHandler");dojo.require("dijit._Widget");dojo.require("dojox.xml.parser");dojo.require("dojox.wire._base");dojo.require("dojox.wire.ml.util");dojo.declare("dojox.wire.ml.Service",dijit._Widget,{url:"",serviceUrl:"",serviceType:"",handlerClass:"",preventCache:true,postCreate:function(){this.handler=this._createHandler();},_handlerClasses:{"TEXT":"dojox.wire.ml.RestHandler","XML":"dojox.wire.ml.XmlHandler","JSON":"dojox.wire.ml.JsonHandler","JSON-RPC":"dojo.rpc.JsonService"},_createHandler:function(){if(this.url){var _1=this;var d=dojo.xhrGet({url:this.url,handleAs:"json",sync:true});d.addCallback(function(_2){_1.smd=_2;});if(this.smd&&!this.serviceUrl){this.serviceUrl=(this.smd.serviceUrl||this.smd.serviceURL);}}var _3=undefined;if(this.handlerClass){_3=dojox.wire._getClass(this.handlerClass);}else{if(this.serviceType){_3=this._handlerClasses[this.serviceType];if(_3&&dojo.isString(_3)){_3=dojox.wire._getClass(_3);this._handlerClasses[this.serviceType]=_3;}}else{if(this.smd&&this.smd.serviceType){_3=this._handlerClasses[this.smd.serviceType];if(_3&&dojo.isString(_3)){_3=dojox.wire._getClass(_3);this._handlerClasses[this.smd.serviceType]=_3;}}}}if(!_3){return null;}return new _3();},callMethod:function(_4,_5){var _6=new dojo.Deferred();this.handler.bind(_4,_5,_6,this.serviceUrl);return _6;}});dojo.declare("dojox.wire.ml.RestHandler",null,{contentType:"text/plain",handleAs:"text",bind:function(_7,_8,_9,_a){_7=_7.toUpperCase();var _b=this;var _c={url:this._getUrl(_7,_8,_a),contentType:this.contentType,handleAs:this.handleAs,headers:this.headers,preventCache:this.preventCache};var d=null;if(_7=="POST"){_c.postData=this._getContent(_7,_8);d=dojo.rawXhrPost(_c);}else{if(_7=="PUT"){_c.putData=this._getContent(_7,_8);d=dojo.rawXhrPut(_c);}else{if(_7=="DELETE"){d=dojo.xhrDelete(_c);}else{d=dojo.xhrGet(_c);}}}d.addCallbacks(function(_d){_9.callback(_b._getResult(_d));},function(_e){_9.errback(_e);});},_getUrl:function(_f,_10,url){var _11;if(_f=="GET"||_f=="DELETE"){if(_10.length>0){_11=_10[0];}}else{if(_10.length>1){_11=_10[1];}}if(_11){var _12="";for(var _13 in _11){var _14=_11[_13];if(_14){_14=encodeURIComponent(_14);var _15="{"+_13+"}";var _16=url.indexOf(_15);if(_16>=0){url=url.substring(0,_16)+_14+url.substring(_16+_15.length);}else{if(_12){_12+="&";}_12+=(_13+"="+_14);}}}if(_12){url+="?"+_12;}}return url;},_getContent:function(_17,_18){if(_17=="POST"||_17=="PUT"){return (_18?_18[0]:null);}else{return null;}},_getResult:function(_19){return _19;}});dojo.declare("dojox.wire.ml.XmlHandler",dojox.wire.ml.RestHandler,{contentType:"text/xml",handleAs:"xml",_getContent:function(_1a,_1b){var _1c=null;if(_1a=="POST"||_1a=="PUT"){var p=_1b[0];if(p){if(dojo.isString(p)){_1c=p;}else{var _1d=p;if(_1d instanceof dojox.wire.ml.XmlElement){_1d=_1d.element;}else{if(_1d.nodeType===9){_1d=_1d.documentElement;}}var _1e="<?xml version=\"1.0\"?>";_1c=_1e+dojox.xml.parser.innerXML(_1d);}}}return _1c;},_getResult:function(_1f){if(_1f){_1f=new dojox.wire.ml.XmlElement(_1f);}return _1f;}});dojo.declare("dojox.wire.ml.JsonHandler",dojox.wire.ml.RestHandler,{contentType:"text/json",handleAs:"json",headers:{"Accept":"*/json"},_getContent:function(_20,_21){var _22=null;if(_20=="POST"||_20=="PUT"){var p=(_21?_21[0]:undefined);if(p){if(dojo.isString(p)){_22=p;}else{_22=dojo.toJson(p);}}}return _22;}});}