Author: rob.stryker(a)jboss.com
Date: 2008-01-17 20:04:05 -0500 (Thu, 17 Jan 2008)
New Revision: 5788
Added:
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/dialogs/ShowStackTraceDialog.java
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/events/EventLogModel.java
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/polling/JMXPoller.java
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/EventLogViewProvider.java
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/events/PollingLabelProvider.java
Log:
JBIDE-1638 Examining Event Log Exceptions.
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/events/EventLogModel.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/events/EventLogModel.java 2008-01-17
23:44:20 UTC (rev 5787)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/events/EventLogModel.java 2008-01-18
01:04:05 UTC (rev 5788)
@@ -41,7 +41,9 @@
*/
public class EventLogModel {
public static final String ENABLE_LOGGING_PREFERENCE =
"org.jboss.ide.eclipse.as.core.extensions.events.enableLogging";
-
+ public static final String EVENT_TYPE_EXCEPTION =
"org.jboss.ide.eclipse.as.core.extensions.events.EXCEPTION";
+ public static final String EXCEPTION_PROPERTY =
"org.jboss.ide.eclipse.as.core.extensions.events.EXCEPTION_PROPERTY";
+
public static void enableLogging(boolean enabled) {
if( enabled )
enableLogging();
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/polling/JMXPoller.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/polling/JMXPoller.java 2008-01-17
23:44:20 UTC (rev 5787)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.core/jbosscore/org/jboss/ide/eclipse/as/core/extensions/polling/JMXPoller.java 2008-01-18
01:04:05 UTC (rev 5788)
@@ -22,7 +22,6 @@
package org.jboss.ide.eclipse.as.core.extensions.polling;
import java.io.IOException;
-import java.util.Date;
import java.util.Properties;
import javax.management.MBeanException;
@@ -35,6 +34,7 @@
import javax.naming.NamingException;
import org.eclipse.wst.server.core.IServer;
+import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel;
import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel.EventLogTreeItem;
import org.jboss.ide.eclipse.as.core.extensions.jmx.JMXClassLoaderRepository;
import org.jboss.ide.eclipse.as.core.extensions.jmx.JMXUtil;
@@ -51,9 +51,7 @@
public class JMXPoller implements IServerStatePoller {
public static final String STARTED_PROPERTY =
"org.jboss.ide.eclipse.as.core.extensions.polling.jmx.STARTED_PROPERTY";
- public static final String EXCEPTION_PROPERTY =
"org.jboss.ide.eclipse.as.core.extensions.polling.jmx.EXCEPTION_PROPERTY";
public static final String EVENT_TYPE_STARTING =
"org.jboss.ide.eclipse.as.core.extensions.polling.jmx.eventTypes.STARTING";
- public static final String EVENT_TYPE_EXCEPTION =
"org.jboss.ide.eclipse.as.core.extensions.polling.jmx.eventTypes.EXCEPTION";
public static final int STATE_STARTED = 1;
@@ -201,8 +199,8 @@
}
public JMXEvent(SimpleTreeItem parent, Exception e) {
- super(parent, PollThread.SERVER_STATE_MAJOR_TYPE, EVENT_TYPE_EXCEPTION );
- setProperty(EXCEPTION_PROPERTY, e.getMessage());
+ super(parent, PollThread.SERVER_STATE_MAJOR_TYPE, EventLogModel.EVENT_TYPE_EXCEPTION
);
+ setProperty(EventLogModel.EXCEPTION_PROPERTY, e);
}
}
}
Added:
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/dialogs/ShowStackTraceDialog.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/dialogs/ShowStackTraceDialog.java
(rev 0)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/dialogs/ShowStackTraceDialog.java 2008-01-18
01:04:05 UTC (rev 5788)
@@ -0,0 +1,71 @@
+package org.jboss.ide.eclipse.as.ui.dialogs;
+
+import java.util.ArrayList;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.window.IShellProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel;
+import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel.EventLogTreeItem;
+
+public class ShowStackTraceDialog extends Dialog {
+
+ private EventLogTreeItem selected;
+ public ShowStackTraceDialog(IShellProvider parentShell, EventLogTreeItem selected) {
+ super(parentShell);
+ this.selected = selected;
+ }
+
+ public ShowStackTraceDialog(Shell shell, EventLogTreeItem selected) {
+ super(shell);
+ this.selected = selected;
+ }
+
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+ setShellStyle(SWT.SHELL_TRIM);
+ newShell.setText("Exception Stack Trace");
+ //newShell.setImage(JBossServerUISharedImages.getImage(JBossServerUISharedImages.TWIDDLE_IMAGE));
+ newShell.setBounds(300, 300, 500, 300);
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite c = (Composite)super.createDialogArea(parent);
+ c.setLayout(new FillLayout());
+ Text t = new Text(c, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ Object exception = selected.getProperty(EventLogModel.EXCEPTION_PROPERTY);
+ if( exception instanceof Throwable) {
+ Throwable aThrowable = (Throwable)exception;
+ ArrayList<Throwable> seen = new ArrayList<Throwable>();
+ final StringBuilder result = new StringBuilder();
+ boolean first = true;
+ while( aThrowable != null && !seen.contains(aThrowable)) {
+ seen.add(aThrowable);
+ if( !first ) result.append("nested:" + Text.DELIMITER);
+ appendDetails(aThrowable, result);
+ aThrowable = aThrowable.getCause();
+ first = false;
+ }
+ t.setText(result.toString());
+ }
+ return c;
+ }
+
+ protected void appendDetails(Throwable t, StringBuilder result) {
+ result.append(t.toString());
+ result.append(Text.DELIMITER);
+
+ //add each element of the stack trace
+ for (StackTraceElement element : t.getStackTrace() ){
+ result.append(" at ");
+ result.append( element );
+ result.append( Text.DELIMITER );
+ }
+ result.append(Text.DELIMITER );
+ }
+}
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/EventLogViewProvider.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/EventLogViewProvider.java 2008-01-17
23:44:20 UTC (rev 5787)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/EventLogViewProvider.java 2008-01-18
01:04:05 UTC (rev 5788)
@@ -58,6 +58,7 @@
import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel.IEventLogListener;
import org.jboss.ide.eclipse.as.core.util.SimpleTreeItem;
import org.jboss.ide.eclipse.as.ui.JBossServerUIPlugin;
+import org.jboss.ide.eclipse.as.ui.dialogs.ShowStackTraceDialog;
import org.jboss.ide.eclipse.as.ui.preferencepages.ViewProviderPreferenceComposite;
import org.jboss.ide.eclipse.as.ui.views.server.extensions.IEventLogLabelProvider;
import org.jboss.ide.eclipse.as.ui.views.server.extensions.JBossServerViewExtension;
@@ -82,13 +83,13 @@
private ITreeContentProvider contentProvider;
private LabelProvider labelProvider;
-
private IEventLogLabelProvider[] labelProviderDelegates = null;
-
private IPropertySheetPage propertyPage = null;
+ private Object[] selection;
private IServer input;
private Action clearLogAction;
+ private Action showStackTraceAction;
private static HashMap<String, String> majorTypeToName = new HashMap<String,
String>();
static {
@@ -119,7 +120,15 @@
}
};
clearLogAction.setText("Clear Event Log");
- //clearLogAction.setImageDescriptor(newImage)
+
+ showStackTraceAction = new Action() {
+ public void run() {
+ EventLogTreeItem item = (EventLogTreeItem)selection[0];
+ ShowStackTraceDialog dialog = new ShowStackTraceDialog(new Shell(), item);
+ dialog.open();
+ }
+ };
+ showStackTraceAction.setText("See Exception Details");
}
public class EventLogContentProvider implements ITreeContentProvider {
@@ -265,8 +274,14 @@
}
public void fillContextMenu(Shell shell, IMenuManager menu, Object selection[]) {
+ this.selection = selection;
if( selection.length == 1 && selection[0] == this.provider)
menu.add(clearLogAction);
+ if( selection.length == 1 && selection[0] instanceof EventLogTreeItem
&&
+ (((EventLogTreeItem)selection[0]).getEventClass().equals(EventLogModel.EVENT_TYPE_EXCEPTION))
||
+ ((EventLogTreeItem)selection[0]).getSpecificType().equals(EventLogModel.EVENT_TYPE_EXCEPTION))
{
+ menu.add(showStackTraceAction);
+ }
}
public ITreeContentProvider getContentProvider() {
Modified:
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/events/PollingLabelProvider.java
===================================================================
---
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/events/PollingLabelProvider.java 2008-01-17
23:44:20 UTC (rev 5787)
+++
trunk/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/views/server/providers/events/PollingLabelProvider.java 2008-01-18
01:04:05 UTC (rev 5788)
@@ -27,6 +27,7 @@
import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.ui.internal.provisional.UIDecoratorManager;
+import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel;
import org.jboss.ide.eclipse.as.core.extensions.events.EventLogModel.EventLogTreeItem;
import org.jboss.ide.eclipse.as.core.extensions.polling.JMXPoller;
import org.jboss.ide.eclipse.as.core.server.IServerStatePoller;
@@ -52,7 +53,7 @@
supported.add(PollThread.POLL_THREAD_EXCEPTION);
supported.add(PollThread.POLLER_NOT_FOUND);
- supported.add(JMXPoller.EVENT_TYPE_EXCEPTION);
+ supported.add(EventLogModel.EVENT_TYPE_EXCEPTION);
supported.add(JMXPoller.EVENT_TYPE_STARTING);
supported.add(JBossServerBehavior.FORCE_SHUTDOWN_EVENT_KEY);
@@ -78,7 +79,7 @@
return getErrorImage();
}
- if( element.getSpecificType().equals(JMXPoller.EVENT_TYPE_EXCEPTION))
+ if( element.getSpecificType().equals(EventLogModel.EVENT_TYPE_EXCEPTION))
return
PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_WARN_TSK);
if( element.getSpecificType().equals(JMXPoller.EVENT_TYPE_STARTING)) {
boolean started =
((Boolean)element.getProperty(JMXPoller.STARTED_PROPERTY)).booleanValue();
@@ -111,8 +112,11 @@
if( element.getSpecificType().equals(PollThread.POLLER_NOT_FOUND)) return
expectedString + " failed. Poller not found";
}
- if( element.getSpecificType().equals(JMXPoller.EVENT_TYPE_EXCEPTION))
- return "JMXException: " +
(String)element.getProperty(JMXPoller.EXCEPTION_PROPERTY);
+ if( element.getSpecificType().equals(EventLogModel.EVENT_TYPE_EXCEPTION)) {
+ Object o = element.getProperty(EventLogModel.EXCEPTION_PROPERTY);
+ return "JMXException: " + ( o == null ? "null" :
((Exception)o).getMessage());
+ }
+
if( element.getSpecificType().equals(JMXPoller.EVENT_TYPE_STARTING)) {
boolean started =
((Boolean)element.getProperty(JMXPoller.STARTED_PROPERTY)).booleanValue();
if( !started )
@@ -154,7 +158,7 @@
// property names and their readable forms
propertyToMessageMap.put(EventLogTreeItem.DATE, "Time");
propertyToMessageMap.put(PollThread.EXPECTED_STATE, "Expected State");
- propertyToMessageMap.put(JMXPoller.EXCEPTION_PROPERTY, "Exception");
+ propertyToMessageMap.put(EventLogModel.EXCEPTION_PROPERTY, "Exception");
propertyToMessageMap.put(JMXPoller.STARTED_PROPERTY, "Server Started");
propertyToMessageMap.put(PollThread.POLL_THREAD_ABORTED_CAUSE, "Abort
Cause");
// now values and their readable forms