1:
38:
39:
40: package ;
41:
42: import ;
43: import ;
44: import ;
45: import ;
46: import ;
47: import ;
48:
49: import ;
50: import ;
51: import ;
52:
53:
58: public class ThreadGroupReferenceCommandSet
59: extends CommandSet
60: {
61: public boolean runCommand(ByteBuffer bb, DataOutputStream os, byte command)
62: throws JdwpException
63: {
64: try
65: {
66: switch (command)
67: {
68: case JdwpConstants.CommandSet.ThreadGroupReference.NAME:
69: executeName(bb, os);
70: break;
71: case JdwpConstants.CommandSet.ThreadGroupReference.PARENT:
72: executeParent(bb, os);
73: break;
74: case JdwpConstants.CommandSet.ThreadGroupReference.CHILDREN:
75: executeChildren(bb, os);
76: break;
77: default:
78: throw new NotImplementedException("Command " + command +
79: " not found in ThreadGroupReference Command Set.");
80: }
81: }
82: catch (IOException ex)
83: {
84:
85:
86: throw new JdwpInternalErrorException(ex);
87: }
88:
89: return false;
90: }
91:
92: private void executeName(ByteBuffer bb, DataOutputStream os)
93: throws JdwpException, IOException
94: {
95: ObjectId oid = idMan.readObjectId(bb);
96: ThreadGroup group = (ThreadGroup) oid.getObject();
97: JdwpString.writeString(os, group.getName());
98: }
99:
100: private void executeParent(ByteBuffer bb, DataOutputStream os)
101: throws JdwpException, IOException
102: {
103: ObjectId oid = idMan.readObjectId(bb);
104: ThreadGroup group = (ThreadGroup) oid.getObject();
105: ThreadGroup parent = group.getParent();
106: if (parent == null) {
107: os.writeLong(0L);
108: } else {
109: ObjectId parentId = idMan.getObjectId(parent);
110: parentId.write(os);
111: }
112: }
113:
114: private void executeChildren(ByteBuffer bb, DataOutputStream os)
115: throws JdwpException, IOException
116: {
117: ObjectId oid = idMan.readObjectId(bb);
118: ThreadGroup group = (ThreadGroup) oid.getObject();
119:
120: ThreadGroup jdwpGroup = Thread.currentThread().getThreadGroup();
121: int numThreads = group.activeCount();
122: Thread allThreads[] = new Thread[numThreads];
123:
124: group.enumerate(allThreads, false);
125:
126:
127:
128:
129: numThreads = 0;
130: for (int i = 0; i < allThreads.length; i++)
131: {
132: Thread thread = allThreads[i];
133: if (thread == null)
134: break;
135: if (!thread.getThreadGroup().equals(jdwpGroup))
136: numThreads++;
137: }
138:
139: os.writeInt(numThreads);
140:
141: for (int i = 0; i < allThreads.length; i++)
142: {
143: Thread thread = allThreads[i];
144: if (thread == null)
145: break;
146: if (!thread.getThreadGroup().equals(jdwpGroup))
147: idMan.getObjectId(thread).write(os);
148: }
149:
150: int numGroups = group.activeCount();
151: ThreadGroup allGroups[] = new ThreadGroup[numGroups];
152:
153: group.enumerate(allGroups, false);
154:
155:
156:
157:
158: numGroups = 0;
159: for (int i = 0; i < allGroups.length; i++)
160: {
161: ThreadGroup tgroup = allGroups[i];
162: if (tgroup == null)
163: break;
164: if (!tgroup.equals(jdwpGroup))
165: numGroups++;
166: }
167:
168: os.writeInt(numGroups);
169:
170: for (int i = 0; i < allGroups.length; i++)
171: {
172: ThreadGroup tgroup = allGroups[i];
173: if (tgroup == null)
174: break;
175: if (!tgroup.equals(jdwpGroup))
176: idMan.getObjectId(tgroup).write(os);
177: }
178: }
179: }