KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > aspectj > debugger > request > ThreadsNeedingRequest


1 /* -*- Mode: JDE; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  *
3  * This file is part of the debugger and core tools for the AspectJ(tm)
4  * programming language; see http://aspectj.org
5  *
6  * The contents of this file are subject to the Mozilla Public License
7  * Version 1.1 (the "License"); you may not use this file except in
8  * compliance with the License. You may obtain a copy of the License at
9  * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
10  *
11  * Software distributed under the License is distributed on an "AS IS" basis,
12  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13  * for the specific language governing rights and limitations under the
14  * License.
15  *
16  * The Original Code is AspectJ.
17  *
18  * The Initial Developer of the Original Code is Xerox Corporation. Portions
19  * created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation.
20  * All Rights Reserved.
21  */

22
23 package org.aspectj.debugger.request;
24
25 import org.aspectj.debugger.base.*;
26
27 import com.sun.jdi.*;
28 import java.util.*;
29
30 /**
31  * ThreadsNeedingRequest.java
32  *
33  *
34  * Created: Thu Aug 24 16:42:46 2000
35  *
36  * @author <a HREF="mailto:palm@parc.xerox.com"Jeffrey Palm</a>
37  */

38
39 public abstract class ThreadsNeedingRequest extends Request {
40
41     protected List threadNames;
42     
43     public ThreadsNeedingRequest(Debugger debugger, List threadNames) {
44         super(debugger);
45         this.threadNames = threadNames;
46     }
47
48     public List getThreads() throws NoVMException, DebuggerException {
49         if (threadNames == null || threadNames.size() == 0) {
50             return vm().allThreads();
51         }
52         Iterator namesIter = threadNames.iterator();
53         List threads = new ArrayList();
54         List badThreads = new ArrayList();
55         while (namesIter.hasNext()) {
56             String JavaDoc threadName = namesIter.next() + "";
57             Iterator iter = vm().allThreads().iterator();
58             boolean found = false;
59             while (iter.hasNext()) {
60                 ThreadReference threadRef = (ThreadReference) iter.next();
61                 if (threadRef.name().equals(threadName)) {
62                     found = true;
63                     threads.add(threadRef);
64                     break;
65                 } else {
66                     try {
67                         long ourID = Long.parseLong(threadName);
68                         long refID = threadRef.uniqueID();
69                         if (ourID == refID) {
70                             found = true;
71                             threads.add(threadRef);
72                             break;
73                         }
74                     } catch (NumberFormatException JavaDoc e) {
75                     }
76                 }
77             }
78             if (!found) {
79                 badThreads.add(threadName);
80             }
81         }
82         if (badThreads.size() > 0) {
83             throw new ThreadsNotFoundException(badThreads);
84         }
85         return threads;
86     }
87 }
88
Popular Tags