diff --git a/scm-webapp/src/main/webapp/index.html b/scm-webapp/src/main/webapp/index.html index 4ec4388743..e2055a8b7c 100644 --- a/scm-webapp/src/main/webapp/index.html +++ b/scm-webapp/src/main/webapp/index.html @@ -142,6 +142,7 @@ + diff --git a/scm-webapp/src/main/webapp/resources/js/action/sonia.action.exceptionwindow.js b/scm-webapp/src/main/webapp/resources/js/action/sonia.action.exceptionwindow.js new file mode 100644 index 0000000000..59a9d89e59 --- /dev/null +++ b/scm-webapp/src/main/webapp/resources/js/action/sonia.action.exceptionwindow.js @@ -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: '
' + this.message + '
' + },{ + 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(); + } + +}); \ No newline at end of file diff --git a/scm-webapp/src/main/webapp/resources/js/sonia.scm.js b/scm-webapp/src/main/webapp/resources/js/sonia.scm.js index 54bbbc1476..51178d818f 100644 --- a/scm-webapp/src/main/webapp/resources/js/sonia.scm.js +++ b/scm-webapp/src/main/webapp/resources/js/sonia.scm.js @@ -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; } - Ext.MessageBox.show({ - title: title, - msg: String.format(message, status), - buttons: Ext.MessageBox.OK, - icon: Ext.MessageBox.ERROR - }); + 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: message, + buttons: Ext.MessageBox.OK, + icon: Ext.MessageBox.ERROR + }); + + } else { + new Sonia.action.ExceptionWindow({ + title: title, + message: message, + stacktrace: text + }).show(); + } } },