mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
New build scripts
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5282 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
122
source/web/scripts/ajax/dojo/src/rpc/RpcService.js
Normal file
122
source/web/scripts/ajax/dojo/src/rpc/RpcService.js
Normal file
@@ -0,0 +1,122 @@
|
||||
/*
|
||||
Copyright (c) 2004-2006, The Dojo Foundation
|
||||
All Rights Reserved.
|
||||
|
||||
Licensed under the Academic Free License version 2.1 or above OR the
|
||||
modified BSD license. For more information on Dojo licensing, see:
|
||||
|
||||
http://dojotoolkit.org/community/licensing.shtml
|
||||
*/
|
||||
|
||||
dojo.provide("dojo.rpc.RpcService");
|
||||
dojo.require("dojo.io.*");
|
||||
dojo.require("dojo.json");
|
||||
dojo.require("dojo.lang.func");
|
||||
dojo.require("dojo.Deferred");
|
||||
|
||||
dojo.rpc.RpcService = function(url){
|
||||
// summary
|
||||
// constructor for rpc base class
|
||||
if(url){
|
||||
this.connect(url);
|
||||
}
|
||||
}
|
||||
|
||||
dojo.lang.extend(dojo.rpc.RpcService, {
|
||||
|
||||
strictArgChecks: true,
|
||||
serviceUrl: "",
|
||||
|
||||
parseResults: function(obj){
|
||||
// summary
|
||||
// parse the results coming back from an rpc request.
|
||||
// this base implementation, just returns the full object
|
||||
// subclasses should parse and only return the actual results
|
||||
return obj;
|
||||
},
|
||||
|
||||
errorCallback: function(/* dojo.Deferred */ deferredRequestHandler){
|
||||
// summary
|
||||
// create callback that calls the Deferres errback method
|
||||
return function(type, e){
|
||||
deferredRequestHandler.errback(new Error(e.message));
|
||||
}
|
||||
},
|
||||
|
||||
resultCallback: function(/* dojo.Deferred */ deferredRequestHandler){
|
||||
// summary
|
||||
// create callback that calls the Deferred's callback method
|
||||
var tf = dojo.lang.hitch(this,
|
||||
function(type, obj, e){
|
||||
if (obj["error"]!=null) {
|
||||
var err = new Error(obj.error);
|
||||
err.id = obj.id;
|
||||
deferredRequestHandler.errback(err);
|
||||
} else {
|
||||
var results = this.parseResults(obj);
|
||||
deferredRequestHandler.callback(results);
|
||||
}
|
||||
}
|
||||
);
|
||||
return tf;
|
||||
},
|
||||
|
||||
|
||||
generateMethod: function(/*string*/ method, /*array*/ parameters, /*string*/ url){
|
||||
// summary
|
||||
// generate the local bind methods for the remote object
|
||||
return dojo.lang.hitch(this, function(){
|
||||
var deferredRequestHandler = new dojo.Deferred();
|
||||
|
||||
// if params weren't specified, then we can assume it's varargs
|
||||
if( (this.strictArgChecks) &&
|
||||
(parameters != null) &&
|
||||
(arguments.length != parameters.length)
|
||||
){
|
||||
// put error stuff here, no enough params
|
||||
dojo.raise("Invalid number of parameters for remote method.");
|
||||
} else {
|
||||
this.bind(method, arguments, deferredRequestHandler, url);
|
||||
}
|
||||
|
||||
return deferredRequestHandler;
|
||||
});
|
||||
},
|
||||
|
||||
processSmd: function(/*json*/ object){
|
||||
// summary
|
||||
// callback method for reciept of a smd object. Parse the smd and
|
||||
// generate functions based on the description
|
||||
dojo.debug("RpcService: Processing returned SMD.");
|
||||
if(object.methods){
|
||||
dojo.lang.forEach(object.methods, function(m){
|
||||
if(m && m["name"]){
|
||||
dojo.debug("RpcService: Creating Method: this.", m.name, "()");
|
||||
this[m.name] = this.generateMethod( m.name,
|
||||
m.parameters,
|
||||
m["url"]||m["serviceUrl"]||m["serviceURL"]);
|
||||
if(dojo.lang.isFunction(this[m.name])){
|
||||
dojo.debug("RpcService: Successfully created", m.name, "()");
|
||||
}else{
|
||||
dojo.debug("RpcService: Failed to create", m.name, "()");
|
||||
}
|
||||
}
|
||||
}, this);
|
||||
}
|
||||
|
||||
this.serviceUrl = object.serviceUrl||object.serviceURL;
|
||||
dojo.debug("RpcService: Dojo RpcService is ready for use.");
|
||||
},
|
||||
|
||||
connect: function(/*String*/ smdUrl){
|
||||
// summary
|
||||
// connect to a remote url and retrieve a smd object
|
||||
dojo.debug("RpcService: Attempting to load SMD document from:", smdUrl);
|
||||
dojo.io.bind({
|
||||
url: smdUrl,
|
||||
mimetype: "text/json",
|
||||
load: dojo.lang.hitch(this, function(type, object, e){ return this.processSmd(object); }),
|
||||
sync: true
|
||||
});
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user