/******************************************************************************* * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package net.sourceforge.phpeclipse.xdebug.ui.views.logview; import java.io.PrintWriter; import java.io.StringWriter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.StringTokenizer; import net.sourceforge.phpeclipse.xdebug.ui.XDebugUIPlugin; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.PlatformObject; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.model.IWorkbenchAdapter; public class LogEntry extends PlatformObject implements IWorkbenchAdapter { private static final String KEY_ERROR = "LogView.severity.error"; //$NON-NLS-1$ private static final String KEY_WARNING = "LogView.severity.warning"; //$NON-NLS-1$ private static final String KEY_INFO = "LogView.severity.info"; //$NON-NLS-1$ private ArrayList children; private LogEntry parent; private String pluginId; private int severity; private int code; private String date; private String message; private String stack; private LogSession session; public LogEntry() { } public LogSession getSession() { return session; } void setSession(LogSession session) { this.session = session; } public LogEntry(IStatus status) { processStatus(status); } public int getSeverity() { return severity; } public boolean isOK() { return severity == IStatus.OK; } public int getCode() { return code; } public String getPluginId() { return pluginId; } public String getMessage() { return message; } public String getStack() { return stack; } public String getDate() { return date; } public String getSeverityText() { return getSeverityText(severity); } public boolean hasChildren() { return children != null && children.size() > 0; } public String toString() { return getSeverityText(); } /** * @see IWorkbenchAdapter#getChildren(Object) */ public Object[] getChildren(Object parent) { if (children == null) return new Object[0]; return children.toArray(); } /** * @see IWorkbenchAdapter#getImageDescriptor(Object) */ public ImageDescriptor getImageDescriptor(Object arg0) { return null; } /** * @see IWorkbenchAdapter#getLabel(Object) */ public String getLabel(Object obj) { return getSeverityText(); } /** * @see IWorkbenchAdapter#getParent(Object) */ public Object getParent(Object obj) { return parent; } void setParent(LogEntry parent) { this.parent = parent; } private String getSeverityText(int severity) { switch (severity) { case IStatus.ERROR : return XDebugUIPlugin.getString(KEY_ERROR); case IStatus.WARNING : return XDebugUIPlugin.getString(KEY_WARNING); case IStatus.INFO : return XDebugUIPlugin.getString(KEY_INFO); } return "?"; //$NON-NLS-1$ } int processLogLine(String line, boolean root) { //!ENTRY //!SUBENTRY StringTokenizer stok = new StringTokenizer(line, " ", true); //$NON-NLS-1$ StringBuffer dateBuffer = new StringBuffer(); int dateCount = 5; int depth = 0; for (int i = 0; stok.hasMoreTokens();) { String token = stok.nextToken(); if (i >= dateCount) { dateBuffer.append(token); continue; } else if (token.equals(" ")) //$NON-NLS-1$ continue; switch (i) { case 0 : // entry or subentry if (root) i += 2; else i++; break; case 1 : // depth depth = parseInteger(token); i++; break; case 2 : pluginId = token; i++; break; case 3 : // severity severity = parseInteger(token); i++; break; case 4 : // code code = parseInteger(token); i++; break; } } date = dateBuffer.toString().trim(); return depth; } private int parseInteger(String token) { try { return Integer.parseInt(token); } catch (NumberFormatException e) { return 0; } } void setStack(String stack) { this.stack = stack; } void setMessage(String message) { this.message = message; } private void processStatus(IStatus status) { pluginId = status.getPlugin(); severity = status.getSeverity(); code = status.getCode(); DateFormat formatter = new SimpleDateFormat("MMM dd, yyyy HH:mm:ss.SS"); //$NON-NLS-1$ date = formatter.format(new Date()); message = status.getMessage(); Throwable throwable = status.getException(); if (throwable != null) { StringWriter swriter = new StringWriter(); PrintWriter pwriter = new PrintWriter(swriter); throwable.printStackTrace(pwriter); pwriter.flush(); pwriter.close(); stack = swriter.toString(); } IStatus[] schildren = status.getChildren(); if (schildren.length > 0) { children = new ArrayList(); for (int i = 0; i < schildren.length; i++) { LogEntry child = new LogEntry(schildren[i]); addChild(child); } } } void addChild(LogEntry child) { if (children == null) children = new ArrayList(); children.add(child); child.setParent(this); } public void write(PrintWriter writer) { writer.print(getSeverityText()); if (date != null) { writer.print(" "); //$NON-NLS-1$ writer.print(getDate()); } if (message != null) { writer.print(" "); //$NON-NLS-1$ writer.print(getMessage()); } writer.println(); if (stack != null) writer.println(stack); } }