webui-aria2/js/libs/dojox/wire/ml/RestHandler.js.uncompressed.js
2012-05-01 19:52:07 +08:00

149 lines
3.9 KiB
JavaScript

//>>built
// wrapped by build app
define("dojox/wire/ml/RestHandler", ["dijit","dojo","dojox","dojo/require!dojox/wire/_base,dojox/wire/ml/util"], function(dijit,dojo,dojox){
dojo.provide("dojox.wire.ml.RestHandler");
dojo.require("dojox.wire._base");
dojo.require("dojox.wire.ml.util");
dojo.declare("dojox.wire.ml.RestHandler", null, {
// summary:
// A REST service handler
// description:
// This class serves as a base REST service.
// Sub-classes may override _getContent() and _getResult() to handle
// specific content types.
contentType: "text/plain",
handleAs: "text",
bind: function(method, parameters, deferred, url){
// summary:
// Call a service method with parameters.
// description:
// A service is called with a URL generated by _getUrl() and
// an HTTP method specified with 'method'.
// For "POST" and "PUT", a content is generated by _getContent().
// When data is loaded, _getResult() is used to pass the result to
// Deferred.callback().
// method:
// A method name
// parameters:
// An array of parameters
// deferred:
// 'Deferred'
// url:
// A URL for the method
method = method.toUpperCase();
var self = this;
var args = {
url: this._getUrl(method, parameters, url),
contentType: this.contentType,
handleAs: this.handleAs,
headers: this.headers,
preventCache: this.preventCache
};
var d = null;
if(method == "POST"){
args.postData = this._getContent(method, parameters);
d = dojo.rawXhrPost(args);
}else if(method == "PUT"){
args.putData = this._getContent(method, parameters);
d = dojo.rawXhrPut(args);
}else if(method == "DELETE"){
d = dojo.xhrDelete(args);
}else{ // "GET"
d = dojo.xhrGet(args);
}
d.addCallbacks(function(result){
deferred.callback(self._getResult(result));
}, function(error){
deferred.errback(error);
});
},
_getUrl: function(/*String*/method, /*Array*/parameters, /*String*/url){
// summary:
// Generate a URL
// description:
// If 'method' is "GET" or "DELETE", a query string is generated
// from a query object specified to the first parameter in
// 'parameters' and appended to 'url'.
// If 'url' contains variable seguments ("{parameter_name}"),
// they are replaced with corresponding parameter values, instead.
// method:
// A method name
// parameters:
// An array of parameters
// url:
// A base URL
// returns:
// A URL
var query;
if(method == "GET" || method == "DELETE"){
if(parameters.length > 0){
query = parameters[0];
}
}else{ // "POST" || "PUT"
if(parameters.length > 1){
query = parameters[1];
}
}
if(query){
var queryString = "";
for(var name in query){
var value = query[name];
if(value){
value = encodeURIComponent(value);
var variable = "{" + name + "}";
var index = url.indexOf(variable);
if(index >= 0){ // encode in path
url = url.substring(0, index) + value + url.substring(index + variable.length);
}else{ // encode as query string
if(queryString){
queryString += "&";
}
queryString += (name + "=" + value);
}
}
}
if(queryString){
url += "?" + queryString;
}
}
return url; //String
},
_getContent: function(/*String*/method, /*Array*/parameters){
// summary:
// Generate a request content
// description:
// If 'method' is "POST" or "PUT", the first parameter in
// 'parameters' is returned.
// method:
// A method name
// parameters:
// An array of parameters
// returns:
// A request content
if(method == "POST" || method == "PUT"){
return (parameters ? parameters[0] : null); //anything
}else{
return null; //null
}
},
_getResult: function(/*anything*/data){
// summary:
// Extract a result
// description:
// A response data is returned as is.
// data:
// A response data returned by a service
// returns:
// A result object
return data; //anything
}
});
});