| /* |
| 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.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; |
| }}); |
| } |