Improve output: distinguish between failed assertions (failures) and unexpected exceptions (errors), and print a filtered stack trace for any exception.
This commit is contained in:
commit
4f2e303079
1839 changed files with 235630 additions and 0 deletions
217
webapp/web/src/widget/TreeLoadingController.js
Normal file
217
webapp/web/src/widget/TreeLoadingController.js
Normal file
|
@ -0,0 +1,217 @@
|
|||
/*
|
||||
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.widget.TreeLoadingController");
|
||||
|
||||
dojo.require("dojo.widget.TreeBasicController");
|
||||
dojo.require("dojo.event.*");
|
||||
dojo.require("dojo.json")
|
||||
dojo.require("dojo.io.*");
|
||||
|
||||
|
||||
dojo.widget.tags.addParseTreeHandler("dojo:TreeLoadingController");
|
||||
|
||||
|
||||
dojo.widget.TreeLoadingController = function() {
|
||||
dojo.widget.TreeBasicController.call(this);
|
||||
}
|
||||
|
||||
dojo.inherits(dojo.widget.TreeLoadingController, dojo.widget.TreeBasicController);
|
||||
|
||||
|
||||
dojo.lang.extend(dojo.widget.TreeLoadingController, {
|
||||
widgetType: "TreeLoadingController",
|
||||
|
||||
RPCUrl: "",
|
||||
|
||||
RPCActionParam: "action", // used for GET for RPCUrl
|
||||
|
||||
|
||||
/**
|
||||
* Common RPC error handler (dies)
|
||||
*/
|
||||
RPCErrorHandler: function(type, obj, evt) {
|
||||
alert( "RPC Error: " + (obj.message||"no message"));
|
||||
},
|
||||
|
||||
|
||||
|
||||
getRPCUrl: function(action) {
|
||||
|
||||
// RPCUrl=local meant SOLELY for DEMO and LOCAL TESTS.
|
||||
// May lead to widgetId collisions
|
||||
if (this.RPCUrl == "local") {
|
||||
var dir = document.location.href.substr(0, document.location.href.lastIndexOf('/'));
|
||||
var localUrl = dir+"/"+action;
|
||||
//dojo.debug(localUrl);
|
||||
return localUrl;
|
||||
}
|
||||
|
||||
if (!this.RPCUrl) {
|
||||
dojo.raise("Empty RPCUrl: can't load");
|
||||
}
|
||||
|
||||
return this.RPCUrl + ( this.RPCUrl.indexOf("?") > -1 ? "&" : "?") + this.RPCActionParam+"="+action;
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Add all loaded nodes from array obj as node children and expand it
|
||||
*/
|
||||
loadProcessResponse: function(node, result, callObj, callFunc) {
|
||||
|
||||
if (!dojo.lang.isUndefined(result.error)) {
|
||||
this.RPCErrorHandler("server", result.error);
|
||||
return false;
|
||||
}
|
||||
|
||||
//dojo.debugShallow(result);
|
||||
|
||||
var newChildren = result;
|
||||
|
||||
if (!dojo.lang.isArray(newChildren)) {
|
||||
dojo.raise('loadProcessResponse: Not array loaded: '+newChildren);
|
||||
}
|
||||
|
||||
for(var i=0; i<newChildren.length; i++) {
|
||||
// looks like dojo.widget.manager needs no special "add" command
|
||||
newChildren[i] = dojo.widget.createWidget(node.widgetType, newChildren[i]);
|
||||
node.addChild(newChildren[i]);
|
||||
}
|
||||
|
||||
|
||||
//node.addAllChildren(newChildren);
|
||||
|
||||
node.state = node.loadStates.LOADED;
|
||||
|
||||
//dojo.debug(callFunc);
|
||||
|
||||
if (dojo.lang.isFunction(callFunc)) {
|
||||
callFunc.apply(dojo.lang.isUndefined(callObj) ? this : callObj, [node, newChildren]);
|
||||
}
|
||||
//this.expand(node);
|
||||
},
|
||||
|
||||
getInfo: function(obj) {
|
||||
return obj.getInfo();
|
||||
},
|
||||
|
||||
runRPC: function(kw) {
|
||||
var _this = this;
|
||||
|
||||
var handle = function(type, data, evt) {
|
||||
// unlock BEFORE any processing is done
|
||||
// so errorHandler may apply locking
|
||||
if (kw.lock) {
|
||||
dojo.lang.forEach(kw.lock,
|
||||
function(t) { t.unlock() }
|
||||
);
|
||||
}
|
||||
|
||||
if(type == "load"){
|
||||
kw.load.call(this, data);
|
||||
}else{
|
||||
this.RPCErrorHandler(type, data, evt);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (kw.lock) {
|
||||
dojo.lang.forEach(kw.lock,
|
||||
function(t) { t.lock() }
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
dojo.io.bind({
|
||||
url: kw.url,
|
||||
/* I hitch to get this.loadOkHandler */
|
||||
handle: dojo.lang.hitch(this, handle),
|
||||
mimetype: "text/json",
|
||||
preventCache: true,
|
||||
sync: kw.sync,
|
||||
content: { data: dojo.json.serialize(kw.params) }
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Load children of the node from server
|
||||
* Synchroneous loading doesn't break control flow
|
||||
* I need sync mode for DnD
|
||||
*/
|
||||
loadRemote: function(node, sync, callObj, callFunc){
|
||||
var _this = this;
|
||||
|
||||
var params = {
|
||||
node: this.getInfo(node),
|
||||
tree: this.getInfo(node.tree)
|
||||
};
|
||||
|
||||
//dojo.debug(callFunc)
|
||||
|
||||
this.runRPC({
|
||||
url: this.getRPCUrl('getChildren'),
|
||||
load: function(result) {
|
||||
_this.loadProcessResponse(node, result, callObj, callFunc) ;
|
||||
},
|
||||
sync: sync,
|
||||
lock: [node],
|
||||
params: params
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
|
||||
expand: function(node, sync, callObj, callFunc) {
|
||||
|
||||
if (node.state == node.loadStates.UNCHECKED && node.isFolder) {
|
||||
|
||||
this.loadRemote(node, sync,
|
||||
this,
|
||||
function(node, newChildren) {
|
||||
this.expand(node, sync, callObj, callFunc);
|
||||
}
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
dojo.widget.TreeBasicController.prototype.expand.apply(this, arguments);
|
||||
|
||||
},
|
||||
|
||||
|
||||
|
||||
doMove: function(child, newParent, index) {
|
||||
/* load nodes into newParent in sync mode, if needed, first */
|
||||
if (newParent.isTreeNode && newParent.state == newParent.loadStates.UNCHECKED) {
|
||||
this.loadRemote(newParent, true);
|
||||
}
|
||||
|
||||
return dojo.widget.TreeBasicController.prototype.doMove.apply(this, arguments);
|
||||
},
|
||||
|
||||
|
||||
doCreateChild: function(parent, index, data, callObj, callFunc) {
|
||||
|
||||
/* load nodes into newParent in sync mode, if needed, first */
|
||||
if (parent.state == parent.loadStates.UNCHECKED) {
|
||||
this.loadRemote(parent, true);
|
||||
}
|
||||
|
||||
return dojo.widget.TreeBasicController.prototype.doCreateChild.apply(this, arguments);
|
||||
}
|
||||
|
||||
|
||||
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue