crashanalysis/crashanalyser/com.nokia.s60tools.crashanalyser/src/com/nokia/s60tools/crashanalyser/containers/EventLog.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/crashanalysis/crashanalyser/com.nokia.s60tools.crashanalyser/src/com/nokia/s60tools/crashanalyser/containers/EventLog.java Thu Feb 11 15:06:45 2010 +0200
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+package com.nokia.s60tools.crashanalyser.containers;
+
+import java.util.*;
+import java.io.*;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
+import org.w3c.dom.NamedNodeMap;
+
+/**
+ * An event log class. Contains a list of all events found in XML.
+ *
+ * Event log is part of MobileCrash data, which contains 30 latest
+ * window and key press events which occurred before the crash.
+ *
+ * List of events example:
+ * [window][Home screen...]
+ * [key][Backspace key]
+ * [window][Home screen...]
+ * .
+ * .
+ * .
+ *
+ */
+public final class EventLog {
+
+ // XML tags
+ public static final String TAG_EVENT = "event";
+ public static final String ATTRIBUTE_TYPE = "type";
+ public static final String TYPE_KEY = "key";
+
+ // events list
+ private final List<String[]> logEvents;
+
+ /**
+ * Constructor
+ * @param events list of events
+ */
+ private EventLog(List<String[]> events) {
+ logEvents = events;
+ }
+
+ public List<String[]> getLogEvents() {
+ return logEvents;
+ }
+
+ /**
+ * Writes events in to a buffer (e.g. a text file)
+ * @param out where to write
+ * @throws IOException
+ */
+ public void writeTo(BufferedWriter out) throws IOException {
+ writeLine(out,"");
+ writeLine(out, "SYSTEM EVENT LOG:");
+ writeLine(out, "-----------------");
+ // if there are any events
+ if (logEvents != null && !logEvents.isEmpty()) {
+ int longestEventName = 0;
+ // calculate the longest event name
+ for (int i = 0; i < logEvents.size(); i++) {
+ String[] event = logEvents.get(i);
+ if (event[0].length() > longestEventName)
+ longestEventName = event[0].length();
+ }
+ // print events
+ for (int i = 0; i < logEvents.size(); i++) {
+ String[] event = logEvents.get(i);
+ String format = String.format("%%-%ds %%s", longestEventName);
+ String line = String.format(format, event[0], event[1]);
+ writeLine(out, line);
+ }
+ }
+ }
+
+ /**
+ * Writes given line plus a line break.
+ * @param out where to write
+ * @param line what to write
+ * @throws IOException
+ */
+ void writeLine(BufferedWriter out, String line) throws IOException {
+ out.write(line);
+ out.newLine();
+ }
+
+ /**
+ * Reads events from an XML element
+ * @param elementSegEventLog segeventlog tag
+ * @return a created EventLog class or null
+ */
+ public static EventLog read(Element elementSegEventLog) {
+ try {
+ List<String[]> events = new ArrayList<String[]>();
+
+ // get all event nodes
+ NodeList children = elementSegEventLog.getChildNodes();
+ if (children != null && children.getLength() > 0) {
+ // go through all event nodes
+ for (int i = 0; i < children.getLength(); i++) {
+ Node el = children.item(i);
+ // node is event node
+ if (TAG_EVENT.equals(el.getNodeName())) {
+ String eventValue = el.getFirstChild().getNodeValue();
+ NamedNodeMap attributes = el.getAttributes();
+ // if node has attributes
+ if (attributes != null && attributes.getLength() > 0) {
+ Node typeAttribute = attributes.getNamedItem(ATTRIBUTE_TYPE);
+ String type = typeAttribute.getNodeValue();
+ events.add(new String[]{type, eventValue});
+ }
+ }
+ }
+ }
+
+ return new EventLog(events);
+ } catch (Exception e) {
+ return null;
+ }
+ }
+}