diff options
Diffstat (limited to 'includes/js/dojox/rpc/Service.js')
-rw-r--r-- | includes/js/dojox/rpc/Service.js | 293 |
1 files changed, 0 insertions, 293 deletions
diff --git a/includes/js/dojox/rpc/Service.js b/includes/js/dojox/rpc/Service.js deleted file mode 100644 index 438ee6f..0000000 --- a/includes/js/dojox/rpc/Service.js +++ /dev/null @@ -1,293 +0,0 @@ -if(!dojo._hasResource["dojox.rpc.Service"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojox.rpc.Service"] = true; -dojo.provide("dojox.rpc.Service"); - -dojo.require("dojo.AdapterRegistry"); - -dojo.declare("dojox.rpc.Service", null, { - constructor: function(smd, options){ - //summary: - //Take a string as a url to retrieve an smd or an object that is an smd or partial smd to use - //as a definition for the service - // - // smd: object - // Takes a number of properties as kwArgs for defining the service. It also - // accepts a string. When passed a string, it is treated as a url from - // which it should synchronously retrieve an smd file. Otherwise it is a kwArgs - // object. It accepts serviceUrl, to manually define a url for the rpc service - // allowing the rpc system to be used without an smd definition. strictArgChecks - // forces the system to verify that the # of arguments provided in a call - // matches those defined in the smd. smdString allows a developer to pass - // a jsonString directly, which will be converted into an object or alternatively - // smdObject is accepts an smdObject directly. - // - var url; - var _this = this; - function processSmd(smd){ - smd._baseUrl = new dojo._Url(location.href,url || '.') + ''; - _this._smd = smd; - - //generate the methods - for(var serviceName in _this._smd.services){ - _this[serviceName]=_this._generateService(serviceName, _this._smd.services[serviceName]); - - } - } - if(smd){ - //if the arg is a string, we assume it is a url to retrieve an smd definition from - if( (dojo.isString(smd)) || (smd instanceof dojo._Url)){ - if (smd instanceof dojo._Url){ - url = smd + ""; - }else{ - url = smd; - } - - var text = dojo._getText(url); - if(!text){ - throw new Error("Unable to load SMD from " + smd) - }else{ - processSmd(dojo.fromJson(text)); - } - }else{ - processSmd(smd); - } - } - - if (options){this._options = options} - this._requestId=0; - }, - - _generateService: function(serviceName, method){ - if(this[method]){ - throw new Error("WARNING: "+ serviceName+ " already exists for service. Unable to generate function"); - } - method.name = serviceName; - var func = dojo.hitch(this, "_executeMethod",method); - var transport = dojox.rpc.transportRegistry.match(method.transport || this._smd.transport); - if (transport.getExecutor) - func = transport.getExecutor(func,method,this); - var schema = method.returns || (method._schema = {}); // define the schema - schema._idPrefix = serviceName +'/'; // schemas are minimally used to track the id prefixes for the different services - dojox.rpc.services[serviceName] = func; // register the service - schema._service = func; - func.serviceName = serviceName; - func._schema = schema; - - return func; - }, - - _executeMethod: function(method){ - var args = []; - var i; - for (i=1; i< arguments.length; i++){ - args.push(arguments[i]); - } - - var smd = this._smd; - if (method.parameters && method.parameters[0] && method.parameters[0].name && (args.length==1) && dojo.isObject(args[0])){ - // if it is the parameters are not named in the definition, then we should use ordered params, otherwise try to determine by parameters - args = args[0]; - // inherit root-level parameters - if (smd.parameters && smd.parameters[0]){ - for (i=0; i< smd.parameters.length; i++){ - if (smd.parameters[i]["name"] && smd.parameters[i]["default"]){ - args[smd.parameters[i]["name"]] = smd.parameters[i]["default"]; - } - } - } - } - if (dojo.isObject(this._options)){ - args = dojo.mixin(args, this._options); - } - - var envelope = method.envelope || smd.envelope || "NONE"; - var envDef = dojox.rpc.envelopeRegistry.match(envelope); - var schema = method._schema || method.returns; // serialize with the right schema for the context; - var request = envDef.serialize.apply(this, [smd, method, args]); - var contentType = (method.contentType || smd.contentType || request.contentType); - var isJson = (contentType + '').match(/application\/json/); - - // this allows to mandate synchronous behavior from elsewhere when necessary, this may need to be changed to be one-shot in FF3 new sync handling model - dojo.mixin(request,{sync : dojox.rpc._sync, - handleAs : isJson ? "json" : "text", - contentType : contentType, - target : request.target || dojox.rpc.getTarget(smd, method), - transport: method.transport || smd.transport || request.transport, - envelope: method.envelope || smd.envelope || request.envelope, - timeout: method.timeout || smd.timeout, - callbackParamName: method.callbackParamName || smd.callbackParamName, - preventCache: method.preventCache || smd.preventCache}); - - var deferred = (method.restMethod || dojox.rpc.transportRegistry.match(request.transport).fire).call(this,request); - deferred.addBoth(dojo.hitch(this,function(results){ - // if it is an application/json content type, than it should be handled as json - // we have to do conversion here instead of in XHR so that we can set the currentSchema before running it - results = envDef.deserialize.call(this,isJson ? dojox.rpc.resolveJson(results,schema) : results); - return results; - })); - return deferred; - } -}); - -dojox.rpc.getTarget = function(smd, method){ - - var dest=smd._baseUrl; - if (smd.target){ - dest = new dojo._Url(dest,smd.target) + ''; - } - if (method.target){ - dest = new dojo._Url(dest,method.target) + ''; - } - return dest; -} - -dojox.rpc.toNamed=function(method, args, strictParams){ - var i; - if (!dojo.isArray(args)){ - if (strictParams){ - //verify that all required parameters were supplied - for (i=0; i<method.parameters.length;i++){ - if ((!method.parameters[i].optional) && (!args[method.parameters[i].name])){ - throw new Error("Optional Parameter '" + method.parameters[i].name + "' not supplied to " + method.name); - } - } - - //remove any properties that were not defined - for (var x in args){ - var found=false; - for(i=0; i<method.parameters.length;i++){ - if (method.parameters[i].name==x){found=true;} - } - if(!found){ - delete args[x]; - } - } - } - return args; - } - - var data={}; - for(i=0;i<method.parameters.length;i++){ - data[method.parameters[i].name]=args[i] - } - return data; -} - -dojox.rpc.toOrdered=function(method, args){ - if (dojo.isArray(args)){return args;} - var data=[]; - for(var i=0;i<method.parameters.length;i++){ - data.push(args[method.parameters[i].name]); - } - return data; -} - -dojox.rpc.transportRegistry = new dojo.AdapterRegistry(true); -dojox.rpc.envelopeRegistry = new dojo.AdapterRegistry(true); -//Built In Envelopes - -dojox.rpc.envelopeRegistry.register( - "URL",function(str){return str == "URL"},{ - serialize:function(smd, method, data ){ - var d = dojo.objectToQuery(dojox.rpc.toNamed(method, data, method.strictParameters||smd.strictParameters)); - - return { - data: d, - transport:"POST" - } - }, - deserialize:function(results){ - return results; - } - } -); - -dojox.rpc.envelopeRegistry.register( - "JSON",function(str){return str == "JSON"},{ - serialize: function(smd, method, data){ - var d = dojox.rpc.toJson(dojox.rpc.toNamed(method, data, method.strictParameters||smd.strictParameters)); - - return { - data: d, - contentType : 'application/json' - } - }, - deserialize: function(results){ - return results; - } - } -); -dojox.rpc.envelopeRegistry.register( - "PATH",function(str){return str == "PATH"},{ - serialize:function(smd, method, data){ - var i; - var target = dojox.rpc.getTarget(smd, method); - if (dojo.isArray(data)){ - for (i = 0; i < data.length;i++) - target += '/' + data[i]; - } - else { - for (i in data) - target += '/' + i + '/' + data[i]; - } - - return { - data:'', - target: target - } - }, - deserialize:function(results){ - return results; - } - } -); - - - -//post is registered first because it is the default; -dojox.rpc.transportRegistry.register( - "POST",function(str){return str == "POST"},{ - fire:function(r){ - r.url = r.target; - r.postData = r.data; - return dojo.rawXhrPost(r); - } - } -); - -dojox.rpc.transportRegistry.register( - "GET",function(str){return str == "GET"},{ - fire: function(r){ - r.url= r.target + (r.data ? '?'+ r.data : ''); - r.preventCache = r.preventCache || true; - return dojo.xhrGet(r); - } - } -); - - -//only works if you include dojo.io.script -dojox.rpc.transportRegistry.register( - "JSONP",function(str){return str == "JSONP"},{ - fire:function(r){ - r.url = r.target + ((r.target.indexOf("?") == -1) ? '?' : '&') + r.data, - r.callbackParamName = r.callbackParamName || "callback"; - return dojo.io.script.get(r); - } - } -); -dojox.rpc.services={}; -// The RPC service can have it's own serializer. It needs to define this if they are not defined by JsonReferencing -if (!dojox.rpc.toJson){ - dojox.rpc.toJson = function(){ - return dojo.toJson.apply(dojo,arguments); - } - dojox.rpc.fromJson = function(){ - return dojo.fromJson.apply(dojo,arguments); - } - dojox.rpc.resolveJson = function(it){ - return it; - } -} - -} |