1 package org.kuali.maven.wagon;
2
3 import java.lang.Thread.UncaughtExceptionHandler;
4
5 public class ThreadHandler implements UncaughtExceptionHandler {
6
7 ThreadGroup group;
8 Thread[] threads;
9 Throwable exception;
10 boolean stopThreads;
11 int requestsPerThread;
12 int threadCount;
13 ProgressTracker tracker;
14
15 public ThreadGroup getGroup() {
16 return group;
17 }
18
19 public void setGroup(ThreadGroup group) {
20 this.group = group;
21 }
22
23 public Thread[] getThreads() {
24 return threads;
25 }
26
27 public void setThreads(Thread[] threads) {
28 this.threads = threads;
29 }
30
31 public void executeThreads() {
32 start();
33 join();
34 }
35
36 protected void start() {
37 for (Thread thread : threads) {
38 thread.start();
39 }
40 }
41
42 protected void join() {
43 try {
44 for (Thread thread : threads) {
45 thread.join();
46 }
47 } catch (InterruptedException e) {
48 throw new RuntimeException(e);
49 }
50 }
51
52 public synchronized void uncaughtException(Thread t, Throwable e) {
53 this.stopThreads = true;
54 this.exception = new RuntimeException("Unexpected issue in thread [" + t.getId() + ":" + t.getName() + "]", e);
55 }
56
57 public Throwable getException() {
58 return exception;
59 }
60
61 public synchronized boolean isStopThreads() {
62 return stopThreads;
63 }
64
65 public int getRequestsPerThread() {
66 return requestsPerThread;
67 }
68
69 public void setRequestsPerThread(int requestsPerThread) {
70 this.requestsPerThread = requestsPerThread;
71 }
72
73 public int getThreadCount() {
74 return threadCount;
75 }
76
77 public void setThreadCount(int threadCount) {
78 this.threadCount = threadCount;
79 }
80
81 public ProgressTracker getTracker() {
82 return tracker;
83 }
84
85 public void setTracker(ProgressTracker tracker) {
86 this.tracker = tracker;
87 }
88 }