KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > restart > AppStateSnapshot


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

4 package com.tctest.restart;
5
6 import java.util.HashMap JavaDoc;
7 import java.util.HashSet JavaDoc;
8 import java.util.Iterator JavaDoc;
9 import java.util.Map JavaDoc;
10 import java.util.Set JavaDoc;
11
12 public class AppStateSnapshot {
13
14   private final RestartTestApp[] apps;
15   private final Set JavaDoc inits = new HashSet JavaDoc();
16   private final Set JavaDoc starts = new HashSet JavaDoc();
17   final Set JavaDoc holders = new HashSet JavaDoc();
18   final Set JavaDoc waiters = new HashSet JavaDoc();
19   private final Set JavaDoc ends = new HashSet JavaDoc();
20   private final Map JavaDoc sets = new HashMap JavaDoc();
21
22   public AppStateSnapshot(RestartTestApp[] apps) {
23     this.apps = apps;
24     sets.put(TestAppState.INIT, inits);
25     sets.put(TestAppState.START, starts);
26     sets.put(TestAppState.HOLDER, holders);
27     sets.put(TestAppState.WAITER, waiters);
28     sets.put(TestAppState.END, ends);
29     takeSnapshot();
30   }
31
32   public synchronized RestartTestApp getHolder() {
33     while (true) {
34       takeSnapshot();
35       if (allEnded()) return null;
36       RestartTestApp[] h = getHolders();
37       if (h.length == 1) return h[0];
38     }
39   }
40
41   public String JavaDoc toString() {
42     StringBuffer JavaDoc buf = new StringBuffer JavaDoc();
43     for (Iterator JavaDoc i = sets.keySet().iterator(); i.hasNext();) {
44       Object JavaDoc key = i.next();
45       buf.append(key + ":" + ((Set JavaDoc) sets.get(key)).size() + " ");
46     }
47     return buf.toString();
48   }
49
50   private void clear() {
51     for (Iterator JavaDoc i = sets.values().iterator(); i.hasNext();) {
52       Set JavaDoc s = (Set JavaDoc) i.next();
53       s.clear();
54     }
55   }
56
57   public synchronized AppStateSnapshot takeSnapshot() {
58     clear();
59     for (int i = 0; i < apps.length; i++) {
60       ((Set JavaDoc) sets.get(apps[i].getStateName())).add(apps[i]);
61     }
62     return this;
63   }
64
65   public synchronized RestartTestApp[] getHolders() {
66     takeSnapshot();
67     return toArray(holders);
68   }
69
70   public synchronized RestartTestApp[] getWaiters() {
71     takeSnapshot();
72     return toArray(waiters);
73   }
74
75   private RestartTestApp[] toArray(Set JavaDoc s) {
76     RestartTestApp[] rv = new RestartTestApp[s.size()];
77     return (RestartTestApp[]) s.toArray(rv);
78   }
79
80   public synchronized boolean allStarted() {
81     takeSnapshot();
82     return inits.size() == 0;
83   }
84
85   public boolean allWaiters() {
86     takeSnapshot();
87     return waiters.size() == apps.length;
88   }
89
90   public synchronized boolean allEnded() {
91     takeSnapshot();
92     return ends.size() == apps.length;
93   }
94 }
Popular Tags