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

108 lines
2.9 KiB
JavaScript

//>>built
// wrapped by build app
define("dojox/wire/ml/Service", ["dijit","dojo","dojox","dojo/require!dijit/_Widget,dojox/xml/parser,dojox/wire/_base,dojox/wire/ml/util"], function(dijit,dojo,dojox){
dojo.provide("dojox.wire.ml.Service");
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, {
// summary:
// A widget for a service
// description:
// This widget represents a service defined by a service description
// specified with 'url' attribute.
// If 'serviceType' and 'serviceUrl' attributes are specified, 'url'
// attribute can be omitted.
// url:
// A URL to a service description
// serviceUrl:
// A URL to a service
// serviceType:
// A service type
// handlerClass:
// A service handler class name
url: "",
serviceUrl: "",
serviceType: "",
handlerClass: "",
preventCache: true,
postCreate: function(){
// summary:
// Call _createHandler()
// description:
// See _createHandler().
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(){
// summary:
// Create a service handler
// desription:
// A service handler class is determined by:
// 1. 'handlerClass' attribute
// 2. 'serviceType' attribute
// 3. 'serviceType' property in a service description
// returns:
// A service handler
if(this.url){
var self = this;
var d = dojo.xhrGet({
url: this.url,
handleAs: "json",
sync: true
});
d.addCallback(function(result){
self.smd = result;
});
if(this.smd && !this.serviceUrl){
this.serviceUrl = (this.smd.serviceUrl || this.smd.serviceURL);
}
}
var handlerClass = undefined;
if(this.handlerClass){
handlerClass = dojox.wire._getClass(this.handlerClass);
}else if(this.serviceType){
handlerClass = this._handlerClasses[this.serviceType];
if(handlerClass && dojo.isString(handlerClass)){
handlerClass = dojox.wire._getClass(handlerClass);
this._handlerClasses[this.serviceType] = handlerClass;
}
}else if(this.smd && this.smd.serviceType){
handlerClass = this._handlerClasses[this.smd.serviceType];
if(handlerClass && dojo.isString(handlerClass)){
handlerClass = dojox.wire._getClass(handlerClass);
this._handlerClasses[this.smd.serviceType] = handlerClass;
}
}
if(!handlerClass){
return null; //null
}
return new handlerClass(); //Object
},
callMethod: function(method, parameters){
// summary:
// Call a service method with parameters
// method:
// A method name
// parameters:
// An array parameters
var deferred = new dojo.Deferred();
this.handler.bind(method, parameters, deferred, this.serviceUrl);
return deferred;
}
});
});