src/main/java/xelfi/debugger/ThreadsView.java
author Jaroslav Tulach <jaroslav.tulach@xelfi.cz>
Tue, 17 Jan 2017 21:12:37 +0100
branchDirtyFix
changeset 10 fe294d0f1297
parent 0 189280700bc7
permissions -rw-r--r--
Making the project compilable
jaroslav@0
     1
/**
jaroslav@0
     2
 * ThreadsView
jaroslav@0
     3
 *
jaroslav@0
     4
 * @author Roman Blazevic
jaroslav@0
     5
 * @version 970208
jaroslav@0
     6
 */
jaroslav@0
     7
jaroslav@0
     8
package xelfi.debugger;
jaroslav@0
     9
jaroslav@0
    10
import java.awt.*;
jaroslav@0
    11
import xelfi.top.TopDialog;
jaroslav@0
    12
import xelfi.top.TopLevel;
jaroslav@0
    13
jaroslav@0
    14
/*
jaroslav@0
    15
 * This is a view on the data given by the Debugger.
jaroslav@0
    16
 * It is a view on thread groups and threads in the debugged application.
jaroslav@0
    17
 */
jaroslav@0
    18
jaroslav@0
    19
public class ThreadsView extends TopDialog
jaroslav@0
    20
{
jaroslav@0
    21
	private Debugger document;
jaroslav@0
    22
	private List list;
jaroslav@0
    23
jaroslav@0
    24
	static final int KEY_ENTER = 10;
jaroslav@0
    25
jaroslav@0
    26
	static final int HINT_COMPLETE_UPDATE = 0;
jaroslav@0
    27
jaroslav@0
    28
	/**
jaroslav@0
    29
	 * ThreadsView constructor.
jaroslav@0
    30
	 *
jaroslav@0
    31
	 * debugger - the document for this view
jaroslav@0
    32
	 */
jaroslav@0
    33
	ThreadsView(Debugger debugger)
jaroslav@0
    34
	{
jaroslav@0
    35
		super(TopLevel.getMenu(), false);
jaroslav@0
    36
		setTitle("Threads");
jaroslav@0
    37
		//super("Threads");
jaroslav@0
    38
 		setBackground(Color.lightGray);
jaroslav@0
    39
jaroslav@0
    40
		document = debugger;
jaroslav@0
    41
		list = new List();
jaroslav@0
    42
		add("Center", list);
jaroslav@0
    43
	}
jaroslav@0
    44
jaroslav@0
    45
	/**
jaroslav@0
    46
	 * My handleEvent() implementation.
jaroslav@0
    47
	 */
jaroslav@0
    48
	public boolean handleEvent(Event event)
jaroslav@0
    49
	{
jaroslav@0
    50
		if (event.id == Event.KEY_PRESS && event.key == 18) // Ctrl+R - refresh
jaroslav@0
    51
		{
jaroslav@0
    52
			update(HINT_COMPLETE_UPDATE, -1);
jaroslav@0
    53
			return true;
jaroslav@0
    54
		}
jaroslav@0
    55
jaroslav@0
    56
		if (!(event.id == Event.KEY_PRESS && event.key == KEY_ENTER)
jaroslav@0
    57
			&& !(event.id == Event.ACTION_EVENT))
jaroslav@0
    58
			return super.handleEvent(event);
jaroslav@0
    59
jaroslav@0
    60
		int selectedIndex = list.getSelectedIndex();
jaroslav@0
    61
jaroslav@0
    62
		if (selectedIndex == -1)
jaroslav@0
    63
			return true;
jaroslav@0
    64
jaroslav@0
    65
	/*        RemoteThreadGroup[] rtg = document.getThreadGroups();
jaroslav@0
    66
jaroslav@0
    67
		if (rtg == null)
jaroslav@0
    68
		{
jaroslav@0
    69
			Output output = TopLevel.getOutput();
jaroslav@0
    70
jaroslav@0
    71
			update(HINT_COMPLETE_UPDATE, -1);
jaroslav@0
    72
			output.show();
jaroslav@0
    73
			output.println("\"Threads\" window was out of date and updated");
jaroslav@0
    74
			return true;
jaroslav@0
    75
		}
jaroslav@0
    76
jaroslav@0
    77
		RemoteThreadGroup ctg = null;
jaroslav@0
    78
		RemoteThread ct = null;
jaroslav@0
    79
		int lineIndex = 0;
jaroslav@0
    80
		int threadGroupIndex = 1;
jaroslav@0
    81
jaroslav@0
    82
		for(int i = 0; i < rtg.length; i++)
jaroslav@0
    83
			try
jaroslav@0
    84
			{
jaroslav@0
    85
				// without "system" thread groups (system and main groups)
jaroslav@0
    86
				if (rtg[i].getName().compareTo("system") == 0 ||
jaroslav@0
    87
					rtg[i].getName().compareTo("main") == 0)
jaroslav@0
    88
					continue;
jaroslav@0
    89
jaroslav@0
    90
				String string = " ["+(threadGroupIndex)+"] "+rtg[i].getName();
jaroslav@0
    91
jaroslav@0
    92
				if (!list.getItem(lineIndex).equals(string))
jaroslav@0
    93
				{
jaroslav@0
    94
					Output output = TopLevel.getOutput();
jaroslav@0
    95
jaroslav@0
    96
					update(HINT_COMPLETE_UPDATE, -1);
jaroslav@0
    97
					output.show();
jaroslav@0
    98
					output.println("\"Threads\" window was out of date and updated");
jaroslav@0
    99
					return true;
jaroslav@0
   100
				}
jaroslav@0
   101
				else
jaroslav@0
   102
					if (lineIndex == selectedIndex)
jaroslav@0
   103
						return true;
jaroslav@0
   104
jaroslav@0
   105
				RemoteThread rt[] = rtg[i].listThreads(true);
jaroslav@0
   106
jaroslav@0
   107
				threadGroupIndex++;
jaroslav@0
   108
				lineIndex++;
jaroslav@0
   109
jaroslav@0
   110
				for(int j = 0; j < rt.length; j++)
jaroslav@0
   111
				{
jaroslav@0
   112
					string = "      "+rt[j].getName()+" : "+rt[j].getStatus();
jaroslav@0
   113
jaroslav@0
   114
					if (lineIndex == selectedIndex && list.getItem(lineIndex).equals(string))
jaroslav@0
   115
					{
jaroslav@0
   116
						ct = rt[j];
jaroslav@0
   117
						break;
jaroslav@0
   118
					}
jaroslav@0
   119
jaroslav@0
   120
					lineIndex++;
jaroslav@0
   121
				}
jaroslav@0
   122
jaroslav@0
   123
				if (ct != null) // it was finally found
jaroslav@0
   124
				{
jaroslav@0
   125
					ctg = rtg[i];
jaroslav@0
   126
					break;
jaroslav@0
   127
				}
jaroslav@0
   128
			}
jaroslav@0
   129
			catch(Exception e)
jaroslav@0
   130
			{
jaroslav@0
   131
				e.printStackTrace();
jaroslav@0
   132
			}
jaroslav@0
   133
jaroslav@0
   134
			if (ct == null)
jaroslav@0
   135
			{
jaroslav@0
   136
				Output output = TopLevel.getOutput();
jaroslav@0
   137
jaroslav@0
   138
				update(HINT_COMPLETE_UPDATE, -1);
jaroslav@0
   139
				output.show();
jaroslav@0
   140
				output.println("\"Threads\" window was out of date and updated");
jaroslav@0
   141
				return true;
jaroslav@0
   142
			}
jaroslav@0
   143
jaroslav@0
   144
			try
jaroslav@0
   145
			{
jaroslav@0
   146
				if (ct.getStatus().equals("at breakpoint")
jaroslav@0
   147
					//|| ct.getStatus().equals("suspended")
jaroslav@0
   148
					)
jaroslav@0
   149
					document.threadChosen(ctg, ct);
jaroslav@0
   150
				else
jaroslav@0
   151
				{
jaroslav@0
   152
					Output output = TopLevel.getOutput();
jaroslav@0
   153
jaroslav@0
   154
					output.show();
jaroslav@0
   155
					output.println("thread is not at breakpoint");
jaroslav@0
   156
					//output.println("thread is not suspended or at breakpoint");
jaroslav@0
   157
					return true;
jaroslav@0
   158
				}
jaroslav@0
   159
			}
jaroslav@0
   160
			catch(Exception e)
jaroslav@0
   161
			{
jaroslav@0
   162
				e.printStackTrace();
jaroslav@0
   163
			}*/
jaroslav@0
   164
jaroslav@0
   165
		return true;
jaroslav@0
   166
	}
jaroslav@0
   167
jaroslav@0
   168
	/**
jaroslav@0
   169
	 * This method is called when the content of the view must be
jaroslav@0
   170
	 * updated.
jaroslav@0
   171
	 */
jaroslav@0
   172
	void update(int hint, int index)
jaroslav@0
   173
	{
jaroslav@0
   174
		if (!isVisible())
jaroslav@0
   175
			return;
jaroslav@0
   176
jaroslav@0
   177
		if (hint != HINT_COMPLETE_UPDATE)
jaroslav@0
   178
		{
jaroslav@0
   179
			System.out.println("unsupported hint");
jaroslav@0
   180
			return;
jaroslav@0
   181
		}
jaroslav@0
   182
jaroslav@10
   183
        return;
jaroslav@10
   184
		
jaroslav@0
   185
	}
jaroslav@0
   186
jaroslav@0
   187
	/**
jaroslav@0
   188
	 * My show() implementation.
jaroslav@0
   189
	 */
jaroslav@0
   190
	public void show()
jaroslav@0
   191
	{
jaroslav@0
   192
		super.show();
jaroslav@0
   193
	}
jaroslav@0
   194
}