crashanalysis/crashanalyser/com.nokia.s60tools.crashanalyser/src/com/nokia/s60tools/crashanalyser/containers/Thread.java
author Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
Tue, 20 Apr 2010 14:41:43 +0300
changeset 4 615035072f7e
parent 0 5ad7ad99af01
child 16 72f198be1c1d
permissions -rw-r--r--
Crash Analyser Carbide extension v1.3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     1
/*
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     2
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). 
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     3
* All rights reserved.
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     4
* This component and the accompanying materials are made available
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     6
* which accompanies this distribution, and is available
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     8
*
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
     9
* Initial Contributors:
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    11
*
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    12
* Contributors:
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    13
*
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    14
* Description:
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    15
*
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    16
*/
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    17
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    18
package com.nokia.s60tools.crashanalyser.containers;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    19
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    20
import org.w3c.dom.*;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    21
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    22
import com.nokia.s60tools.crashanalyser.model.XmlUtils;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    23
import com.nokia.s60tools.crashanalyser.containers.Process.StackItems;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    24
import com.nokia.s60tools.crashanalyser.data.ErrorLibrary;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    25
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    26
import java.io.BufferedWriter;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    27
import java.io.IOException;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    28
import java.util.*;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    29
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    30
/**
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    31
 * Contains thread data.
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    32
 *
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    33
 */
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    34
public final class Thread {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    35
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    36
	// XML tags
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    37
	public static final String TAG_ID = "id";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    38
	public static final String TAG_FULLNAME = "fullname";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    39
	public static final String TAG_EXIT_INFO = "exit_info";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    40
	public static final String TAG_EXIT_TYPE = "exit_type";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    41
	public static final String TAG_EXIT_CATEGORY = "exit_category";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    42
	public static final String TAG_EXIT_REASON = "exit_reason";
4
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
    43
	public static final String TAG_EXIT_DESCRIPTION = "exit_description";
0
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    44
	public static final String TAG_LINK = "link";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    45
	public static final String ATTRIBUTE_SEG = "seg";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    46
	public static final String SEGMENT_STACKS = "seg_stacks";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    47
	public static final String SEGMENT_REGISTERS = "seg_registers";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    48
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    49
	static final String FORMAT = "%-13s: %s";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    50
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    51
	private final int threadId;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    52
	private final String threadFullName;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    53
	private final String threadExitType;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    54
	private final String threadExitCategory;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    55
	private final String threadExitReason;
4
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
    56
	private final String threadExitDescription;
0
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    57
	private final String threadPanicDescription;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    58
	// PC, SP and LR do not really belong to thread,
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    59
	// but these are taken from this thread's stack which
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    60
	// contains CPSR. So these are the most "interesting" 
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    61
	// PC, SP and LR values for this thread, even though 
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    62
	// this thread can own multiple stacks and hence multiple
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    63
	// PC, SP and LR.
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    64
	private final String threadProgramCounter;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    65
	private final String threadStackPointer;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    66
	private final String threadLinkRegister;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    67
	private final List<Stack> threadStacks;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    68
	private final List<RegisterSet> threadRegisters;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    69
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    70
	private Thread(int id, String fullName, String exitType, String exitCategory, 
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    71
					String panicDescription, String programCounter, String stackPointer, String linkRegister, 
4
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
    72
					String exitReason, String exitDescription, List<Stack> stacks, List<RegisterSet> registers) {
0
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    73
		threadId = id;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    74
		threadFullName = fullName;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    75
		threadExitType = exitType;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    76
		threadExitCategory = exitCategory;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    77
		threadExitReason = exitReason;
4
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
    78
		threadExitDescription = exitDescription;
0
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    79
		threadProgramCounter = programCounter;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    80
		threadStackPointer = stackPointer;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    81
		threadLinkRegister = linkRegister;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    82
		threadStacks = stacks;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    83
		threadPanicDescription = panicDescription;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    84
		threadRegisters = registers;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    85
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    86
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    87
	public int getId() {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    88
		return threadId;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    89
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    90
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    91
	public String getFullName() {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    92
		return threadFullName;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    93
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    94
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    95
	public String getExitType() {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    96
		return threadExitType;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    97
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    98
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
    99
	public String getExitCategory() {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   100
		return threadExitCategory;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   101
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   102
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   103
	public String getExitReason() {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   104
		return threadExitReason;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   105
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   106
	
4
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   107
	public String getExitDescription() {
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   108
		return threadExitDescription;
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   109
	}
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   110
0
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   111
	public String getProgramCounter() {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   112
		return threadProgramCounter;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   113
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   114
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   115
	public String getStackPointer() {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   116
		return threadStackPointer;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   117
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   118
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   119
	public String getLinkRegister() {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   120
		return threadLinkRegister;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   121
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   122
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   123
	public String getPanicDescription() {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   124
		return threadPanicDescription;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   125
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   126
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   127
	public List<Stack> getStacks() {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   128
		return threadStacks;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   129
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   130
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   131
	public List<RegisterSet> getRegisters() {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   132
		return threadRegisters;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   133
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   134
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   135
	/**
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   136
	 * Writes thread data into given buffer (i.e. text file)
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   137
	 * @param out
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   138
	 * @param stackItems
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   139
	 * @param html
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   140
	 * @throws IOException
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   141
	 */
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   142
	public void writeTo(BufferedWriter out, StackItems stackItems, boolean html) throws IOException {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   143
		writeLine(out,"");
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   144
		writeLine(out, "THREAD:");
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   145
		writeLine(out, "--------");
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   146
		writeLine(out, "Thread Name", threadFullName);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   147
		writeLine(out, "Exit Type", threadExitType);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   148
		
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   149
		if ("Exception".equals(threadExitType)) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   150
			writeLine(out, "Exit Reason", threadExitReason);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   151
		} else {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   152
			writeLine(out, "Exit Reason", threadExitCategory + " - " +threadExitReason);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   153
		}
4
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   154
		writeLine(out, "Exit Description", threadExitDescription);
0
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   155
		
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   156
		writeLine(out, "");
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   157
		if (threadRegisters != null && !threadRegisters.isEmpty()) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   158
			for (int i = 0; i < threadRegisters.size(); i++) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   159
				RegisterSet registerSet = threadRegisters.get(i);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   160
				registerSet.writeTo(out);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   161
				writeLine(out, "");
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   162
			}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   163
		}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   164
		
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   165
		if (threadStacks != null && !threadStacks.isEmpty()) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   166
			for (int i = 0; i < threadStacks.size(); i++) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   167
				Stack stack = threadStacks.get(i);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   168
				stack.writeTo(out, stackItems, html);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   169
			}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   170
		}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   171
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   172
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   173
	void writeLine(BufferedWriter out, String line) throws IOException {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   174
		out.write(line);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   175
		out.newLine();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   176
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   177
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   178
	void writeLine(BufferedWriter out, String header, String value) throws IOException {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   179
		if (!"".equals(value)) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   180
			out.write(String.format(FORMAT, header, value));
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   181
			out.newLine();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   182
		}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   183
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   184
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   185
	/**
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   186
	 * Reads and creates thread from thread xml element
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   187
	 * @param elementThread
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   188
	 * @param registers
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   189
	 * @param symbols
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   190
	 * @param stacks
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   191
	 * @param errorLibrary
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   192
	 * @return created thread or null
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   193
	 */
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   194
	public static Thread read(Element elementThread,
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   195
								Map<Integer, RegisterSet> registers,
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   196
								Map<Integer, Symbol> symbols,
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   197
								Map<Integer, Stack> stacks,
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   198
								ErrorLibrary errorLibrary) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   199
		try {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   200
			// read thread id
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   201
			String threadId = XmlUtils.getTextValue(elementThread, TAG_ID);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   202
			if (threadId == null)
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   203
				return null;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   204
			
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   205
			// convert thread id to integer
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   206
			int id;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   207
			try {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   208
				id = Integer.parseInt(threadId);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   209
			} catch (Exception e) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   210
				return null;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   211
			}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   212
			
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   213
			// read the threads full name
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   214
			String fullName = XmlUtils.getTextValue(elementThread, TAG_FULLNAME);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   215
			if (fullName == null)
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   216
				return null;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   217
			
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   218
			String exitType = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   219
			String exitCategory = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   220
			String exitReason = "";
4
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   221
			String exitDescription = "";
0
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   222
			// get child nodes such as exit_info, stacks, registers
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   223
			NodeList childNodes = elementThread.getChildNodes();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   224
			if (childNodes == null || childNodes.getLength() < 1)
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   225
				return null;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   226
			
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   227
			// read Exit info
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   228
			NodeList exitInfo = elementThread.getElementsByTagName(TAG_EXIT_INFO);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   229
			if (exitInfo != null && exitInfo.getLength() > 0) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   230
				NodeList exitInfos = exitInfo.item(0).getChildNodes();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   231
				if (exitInfos != null && exitInfos.getLength() > 0) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   232
					for (int i = 0; i < exitInfos.getLength(); i++) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   233
						Node el = exitInfos.item(i);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   234
						Node firstChild = null;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   235
						if (TAG_EXIT_TYPE.equals(el.getNodeName())) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   236
							// read exit type (Exception, Panic, Kill, Terminate)
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   237
							firstChild = el.getFirstChild();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   238
							if (firstChild != null) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   239
								exitType = firstChild.getNodeValue();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   240
								if (exitType == null) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   241
									exitType = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   242
								}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   243
							} else {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   244
								exitType = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   245
							}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   246
						} else if (TAG_EXIT_CATEGORY.equals(el.getNodeName())) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   247
							// read exit category (e.g W32)
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   248
							firstChild = el.getFirstChild();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   249
							if (firstChild != null) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   250
								exitCategory = firstChild.getNodeValue();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   251
								if (exitCategory == null)
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   252
									exitCategory = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   253
							} else {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   254
								exitCategory = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   255
							}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   256
						} else if (TAG_EXIT_REASON.equals(el.getNodeName())) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   257
							// read exit reason (e.g 3)
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   258
							firstChild = el.getFirstChild();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   259
							if (firstChild != null) {							
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   260
								exitReason = firstChild.getNodeValue();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   261
								if (exitReason == null)
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   262
									exitReason = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   263
							} else {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   264
								exitReason = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   265
							}								
4
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   266
						} else if (TAG_EXIT_DESCRIPTION.equals(el.getNodeName())) {
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   267
							// read exit description
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   268
							firstChild = el.getFirstChild();
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   269
							if (firstChild != null) {							
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   270
								exitDescription = firstChild.getNodeValue();
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   271
								if (exitDescription == null)
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   272
									exitDescription = "";
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   273
							} else {
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   274
								exitDescription = "";
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   275
							}								
0
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   276
						}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   277
					}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   278
				}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   279
			}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   280
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   281
			if ("Exception".equals(exitType)) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   282
				exitReason = exitCategory;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   283
				exitCategory = "Exceptions";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   284
			}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   285
			
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   286
			
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   287
			String panicDescription = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   288
			if (!"".equals(exitCategory) && !"".equals(exitReason)) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   289
				panicDescription = errorLibrary.getPanicDescription(exitCategory, exitReason);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   290
			}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   291
			
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   292
			List<Stack> threadStacks = new ArrayList<Stack>();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   293
			List<RegisterSet> threadRegisters = new ArrayList<RegisterSet>();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   294
			String programCounter = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   295
			String stackPointer = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   296
			String linkRegister = "";
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   297
			
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   298
			// see if register has a symbol and/or message
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   299
			NodeList nl = elementThread.getElementsByTagName(TAG_LINK);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   300
			if (nl != null && nl.getLength() > 0) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   301
				for (int i = 0; i < nl.getLength(); i++) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   302
					Node linkNode = nl.item(i);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   303
					String nodeValue = XmlUtils.getNodeValue(linkNode);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   304
					NamedNodeMap attributes = linkNode.getAttributes();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   305
					if (attributes != null && attributes.getLength() > 0) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   306
						Node seg = attributes.getNamedItem(ATTRIBUTE_SEG);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   307
						// stack id
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   308
						if (SEGMENT_STACKS.equals(XmlUtils.getNodeValue(seg))) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   309
							int sId = Integer.parseInt(nodeValue);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   310
							if (stacks.containsKey(sId)) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   311
								Stack s = stacks.get(sId);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   312
								threadStacks.add(s);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   313
								// the most interesting PC, SP and LR comes from
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   314
								// that stack which contains CPSR.
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   315
								if (s.stackRegisterContainsCpsr()) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   316
									programCounter = s.getProgramCounter();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   317
									stackPointer = s.getStackPointer();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   318
									linkRegister = s.getLinkRegister();
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   319
								}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   320
							}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   321
						// register id
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   322
						} else if (SEGMENT_REGISTERS.equals(XmlUtils.getNodeValue(seg))) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   323
							int rId = Integer.parseInt(nodeValue);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   324
							// if passed registers list contains a register for this id
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   325
							if (registers.containsKey(rId)) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   326
								RegisterSet registerSet = registers.get(rId);
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   327
								threadRegisters.add(registerSet);								
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   328
							}							
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   329
						}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   330
					}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   331
				}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   332
			}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   333
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   334
			return new Thread(id, fullName, exitType, exitCategory, 
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   335
								panicDescription, programCounter, stackPointer, linkRegister,
4
615035072f7e Crash Analyser Carbide extension v1.3
Jussi Ryoma <ext-jussi.s.ryoma@nokia.com>
parents: 0
diff changeset
   336
								exitReason, exitDescription, threadStacks, threadRegisters);
0
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   337
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   338
		} catch (Exception e) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   339
			return null;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   340
		}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   341
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   342
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   343
	public Map<Integer, Stack> removeOwnStacks(Map<Integer, Stack> stacks) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   344
		
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   345
		if (threadStacks != null && !threadStacks.isEmpty()) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   346
			for (int i = 0; i < threadStacks.size(); i++) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   347
				if (stacks.containsKey(threadStacks.get(i).getId())) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   348
					stacks.remove(threadStacks.get(i).getId());
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   349
				}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   350
			}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   351
		}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   352
		
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   353
		return stacks;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   354
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   355
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   356
	public Map<Integer, RegisterSet> removeOwnRegisterSets(Map<Integer, RegisterSet> registerSets) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   357
		
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   358
		if (threadRegisters != null && !threadRegisters.isEmpty()) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   359
			for (int i = 0; i < threadRegisters.size(); i++) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   360
				if (registerSets.containsKey(threadRegisters.get(i).getId())) {
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   361
					registerSets.remove(threadRegisters.get(i).getId());
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   362
				}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   363
			}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   364
		}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   365
		
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   366
		return registerSets;
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   367
	}
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   368
	
5ad7ad99af01 Initial version of CrashAnalyser under EPL
Matti Laitinen <matti.t.laitinen@nokia.com>
parents:
diff changeset
   369
}