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: ObjectId parentId = idMan.getObjectId(parent);
107: parentId.write(os);
108: }
109:
110: private void executeChildren(ByteBuffer bb, DataOutputStream os)
111: throws JdwpException, IOException
112: {
113: ObjectId oid = idMan.readObjectId(bb);
114: ThreadGroup group = (ThreadGroup) oid.getObject();
115:
116: ThreadGroup jdwpGroup = Thread.currentThread().getThreadGroup();
117: int numThreads = group.activeCount();
118: Thread allThreads[] = new Thread[numThreads];
119:
120: group.enumerate(allThreads, false);
121:
122:
123:
124:
125: numThreads = 0;
126: for (int i = 0; i < allThreads.length; i++)
127: {
128: Thread thread = allThreads[i];
129: if (thread == null)
130: break;
131: if (!thread.getThreadGroup().equals(jdwpGroup))
132: numThreads++;
133: }
134:
135: os.writeInt(numThreads);
136:
137: for (int i = 0; i < allThreads.length; i++)
138: {
139: Thread thread = allThreads[i];
140: if (thread == null)
141: break;
142: if (!thread.getThreadGroup().equals(jdwpGroup))
143: idMan.getObjectId(thread).write(os);
144: }
145:
146: int numGroups = group.activeCount();
147: ThreadGroup allGroups[] = new ThreadGroup[numGroups];
148:
149: group.enumerate(allGroups, false);
150:
151:
152:
153:
154: numGroups = 0;
155: for (int i = 0; i < allGroups.length; i++)
156: {
157: ThreadGroup tgroup = allGroups[i];
158: if (tgroup == null)
159: break;
160: if (!tgroup.equals(jdwpGroup))
161: numGroups++;
162: }
163:
164: os.writeInt(numGroups);
165:
166: for (int i = 0; i < allGroups.length; i++)
167: {
168: ThreadGroup tgroup = allGroups[i];
169: if (tgroup == null)
170: break;
171: if (!tgroup.equals(jdwpGroup))
172: idMan.getObjectId(tgroup).write(os);
173: }
174: }
175: }