added window for exception details

This commit is contained in:
Sebastian Sdorra
2012-03-13 20:59:38 +01:00
parent b5a1462694
commit 58e3d98c69
3 changed files with 133 additions and 7 deletions

View File

@@ -142,6 +142,7 @@
<!-- sonia.action -->
<script type="text/javascript" src="resources/js/action/sonia.action.js"></script>
<script type="text/javascript" src="resources/js/action/sonia.action.changepasswordwindow.js"></script>
<script type="text/javascript" src="resources/js/action/sonia.action.exceptionwindow.js"></script>
<!-- sonia.plugin -->
<script type="text/javascript" src="resources/js/plugin/sonia.plugin.js"></script>

View File

@@ -0,0 +1,96 @@
/* *
* Copyright (c) 2010, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
Sonia.action.ExceptionWindow = Ext.extend(Ext.Window,{
title: null,
message: null,
stacktrace: null,
icon: Ext.MessageBox.ERROR,
// TODO i18n
// labels
okText: 'Ok',
detailsText: 'Details',
exceptionText: 'Exception',
initComponent: function(){
var config = {
title: this.title,
width: 300,
height: 110,
closable: true,
resizable: true,
plain: true,
border: false,
modal: true,
bodyCssClass: 'x-window-dlg',
items: [{
xtype: 'panel',
height: 45,
bodyCssClass: 'x-panel-mc x-dlg-icon',
html: '<div class="ext-mb-icon ' + this.icon + '"></div><div class="ext-mb-content"><span class="ext-mb-text">' + this.message + '</span></div>'
},{
id: 'stacktraceArea',
xtype: 'textarea',
editable: false,
fieldLabel: this.exceptionText,
value: this.stacktrace,
width: '98%',
height: 260,
hidden: true
}],
buttons: [{
text: this.okText,
scope: this,
handler: this.close
},{
id: 'detailButton',
text: this.detailsText,
scope: this,
handler: this.showDetails
}]
}
Ext.apply(this, Ext.apply(this.initialConfig, config));
Sonia.action.ChangePasswordWindow.superclass.initComponent.apply(this, arguments);
},
showDetails: function(){
Ext.getCmp('detailButton').setDisabled(true);
Ext.getCmp('stacktraceArea').setVisible(true);
this.setWidth(640);
this.setHeight(380);
this.center();
}
});

View File

@@ -392,7 +392,7 @@ Sonia.scm.Main = Ext.extend(Ext.util.Observable, {
}, this);
},
handleFailure: function(status, title, message){
handleFailure: function(status, title, message, serverException){
if (debug){
console.debug( 'handle failure for status code: ' + status );
}
@@ -428,12 +428,41 @@ Sonia.scm.Main = Ext.extend(Ext.util.Observable, {
message = this.errorMessage;
}
var text = null;
if (serverException){
try {
if ( Ext.isString(serverException) ){
serverException = Ext.decode(serverException);
}
text = serverException.stacktrace;
if ( debug ){
console.debug( text );
}
} catch (e){
if ( debug ){
console.debug(e);
}
}
}
message = String.format(message, status);
if ( text == null ){
Ext.MessageBox.show({
title: title,
msg: String.format(message, status),
msg: message,
buttons: Ext.MessageBox.OK,
icon: Ext.MessageBox.ERROR
});
} else {
new Sonia.action.ExceptionWindow({
title: title,
message: message,
stacktrace: text
}).show();
}
}
},