Fix missed files from cvs to svn migration. again!
[phpeclipse.git] / net.sourceforge.phpeclipse.xdebug.ui / src / net / sourceforge / phpeclipse / xdebug / ui / views / logview / LogEntry.java
diff --git a/net.sourceforge.phpeclipse.xdebug.ui/src/net/sourceforge/phpeclipse/xdebug/ui/views/logview/LogEntry.java b/net.sourceforge.phpeclipse.xdebug.ui/src/net/sourceforge/phpeclipse/xdebug/ui/views/logview/LogEntry.java
new file mode 100644 (file)
index 0000000..b492240
--- /dev/null
@@ -0,0 +1,237 @@
+/*******************************************************************************
+ * 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 <pluginID> <severity> <code> <date>
+               //!SUBENTRY <depth> <pluginID> <severity> <code> <date>
+               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);
+       }
+}