X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.message.ui%2Fsrc%2Forg%2Fsimantics%2Fmessage%2Fui%2FLogEntry.java;fp=bundles%2Forg.simantics.message.ui%2Fsrc%2Forg%2Fsimantics%2Fmessage%2Fui%2FLogEntry.java;h=b282ff1a064ee8b43e45542b89c854694951a5f1;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.message.ui/src/org/simantics/message/ui/LogEntry.java b/bundles/org.simantics.message.ui/src/org/simantics/message/ui/LogEntry.java new file mode 100644 index 000000000..b282ff1a0 --- /dev/null +++ b/bundles/org.simantics.message.ui/src/org/simantics/message/ui/LogEntry.java @@ -0,0 +1,310 @@ +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.message.ui; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.ParseException; +import java.util.Date; +import java.util.StringTokenizer; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.ui.model.IWorkbenchAdapter; +import org.simantics.message.IDetailStatus; + +import com.ibm.icu.text.SimpleDateFormat; + +public class LogEntry extends AbstractEntry { + + public static final String F_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS"; //$NON-NLS-1$ + private static final SimpleDateFormat F_SDF = new SimpleDateFormat(F_DATE_FORMAT); + + private String pluginId; + private int severity; + private int code; + private String fDateString; + private Date fDate; + private String message; + private String detailedDescription; + private String stack; + private LogSession session; + + public LogEntry() { // do nothing + } + + public LogSession getSession() { + if ((session == null) && (parent != null) && (parent instanceof LogEntry)) + return ((LogEntry) parent).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 getDetailedDescription() { + return detailedDescription; + } + + public String getStack() { + return stack; + } + + public String getFormattedDate() { + if (fDateString == null) + fDateString = F_SDF.format(getDate()); + return fDateString; + } + + public Date getDate() { + if (fDate == null) + fDate = new Date(0); // unknown date - return epoch + return fDate; + } + + public String getSeverityText() { + return getSeverityText(severity); + } + + public String toString() { + return getSeverityText(); + } + + /** + * @see IWorkbenchAdapter#getImageDescriptor(Object) + */ + public ImageDescriptor getImageDescriptor(Object arg0) { + return null; + } + + /** + * @see IWorkbenchAdapter#getLabel(Object) + */ + public String getLabel(Object obj) { + return getSeverityText(); + } + + private String getSeverityText(int severity) { + switch (severity) { + case IDetailStatus.DEBUG : + return Messages.LogView_severity_debug; + case IStatus.ERROR : + return Messages.LogView_severity_error; + case IStatus.WARNING : + return Messages.LogView_severity_warning; + case IStatus.INFO : + return Messages.LogView_severity_info; + case IStatus.OK : + return Messages.LogView_severity_ok; + } + return "?"; //$NON-NLS-1$ + } + + void processEntry(String line) { + //!ENTRY + //!ENTRY if logged by the framework!!! + StringTokenizer stok = new StringTokenizer(line, " "); //$NON-NLS-1$ + int tokenCount = stok.countTokens(); + boolean noSeverity = stok.countTokens() < 5; + + // no severity means it should be represented as OK + if (noSeverity) { + severity = 0; + code = 0; + } + StringBuffer dateBuffer = new StringBuffer(); + for (int i = 0; i < tokenCount; i++) { + String token = stok.nextToken(); + switch (i) { + case 0 : + break; + case 1 : + pluginId = token; + break; + case 2 : + if (noSeverity) { + if (dateBuffer.length() > 0) + dateBuffer.append(" "); //$NON-NLS-1$ + dateBuffer.append(token); + } else { + severity = parseInteger(token); + } + break; + case 3 : + if (noSeverity) { + if (dateBuffer.length() > 0) + dateBuffer.append(" "); //$NON-NLS-1$ + dateBuffer.append(token); + } else + code = parseInteger(token); + break; + default : + if (dateBuffer.length() > 0) + dateBuffer.append(" "); //$NON-NLS-1$ + dateBuffer.append(token); + } + } + try { + Date date = F_SDF.parse(dateBuffer.toString()); + if (date != null) { + fDate = date; + fDateString = F_SDF.format(fDate); + } + } catch (ParseException e) { // do nothing + } + } + + int processSubEntry(String line) { + //!SUBENTRY + //!SUBENTRY if logged by the framework!!! + StringTokenizer stok = new StringTokenizer(line, " "); //$NON-NLS-1$ + int tokenCount = stok.countTokens(); + boolean byFrameWork = stok.countTokens() < 5; + + StringBuffer dateBuffer = new StringBuffer(); + int depth = 0; + for (int i = 0; i < tokenCount; i++) { + String token = stok.nextToken(); + switch (i) { + case 0 : + break; + case 1 : + depth = parseInteger(token); + break; + case 2 : + pluginId = token; + break; + case 3 : + if (byFrameWork) { + if (dateBuffer.length() > 0) + dateBuffer.append(" "); //$NON-NLS-1$ + dateBuffer.append(token); + } else { + severity = parseInteger(token); + } + break; + case 4 : + if (byFrameWork) { + if (dateBuffer.length() > 0) + dateBuffer.append(" "); //$NON-NLS-1$ + dateBuffer.append(token); + } else + code = parseInteger(token); + break; + default : + if (dateBuffer.length() > 0) + dateBuffer.append(" "); //$NON-NLS-1$ + dateBuffer.append(token); + } + } + try { + Date date = F_SDF.parse(dateBuffer.toString()); + if (date != null) { + fDate = date; + fDateString = F_SDF.format(fDate); + } + } catch (ParseException e) { // do nothing + } + 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; + } + + void setDetailedDescription(String detailedDescription) { + this.detailedDescription = detailedDescription; + } + + private void processStatus(IStatus status) { + pluginId = status.getPlugin(); + severity = status.getSeverity(); + code = status.getCode(); + fDate = new Date(); + fDateString = F_SDF.format(fDate); + message = status.getMessage(); + if (status instanceof IDetailStatus) { + IDetailStatus ds = (IDetailStatus) status; + detailedDescription = ds.getDetailedDescription(); + } + 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) { + for (int i = 0; i < schildren.length; i++) { + LogEntry child = new LogEntry(schildren[i]); + addChild(child); + } + } + } + + public void write(PrintWriter writer) { + if (session != null) + writer.println(session.getSessionData()); + writer.println(getSeverityText()); + if (fDate != null) + writer.println(getDate()); + + if (message != null) + writer.println(getMessage()); + + if (stack != null) { + writer.println(); + writer.println(stack); + } + } +}