KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tcsimulator > ControlImpl


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.tcsimulator;
5
6 import EDU.oswego.cs.dl.util.concurrent.BrokenBarrierException;
7 import EDU.oswego.cs.dl.util.concurrent.CountDown;
8 import EDU.oswego.cs.dl.util.concurrent.CyclicBarrier;
9 import EDU.oswego.cs.dl.util.concurrent.TimeoutException;
10
11 import com.tc.object.config.ConfigVisitor;
12 import com.tc.object.config.DSOClientConfigHelper;
13 import com.tc.object.config.spec.CountDownSpec;
14 import com.tc.object.config.spec.CyclicBarrierSpec;
15 import com.tc.simulator.control.Control;
16 import com.tc.simulator.control.TCBrokenBarrierException;
17 import com.tc.util.TCTimeoutException;
18
19 public class ControlImpl implements Control {
20   private final int startParties;
21   private final int completeParties;
22   private final CyclicBarrier startBarrier;
23   private final CountDown countdown;
24
25   public ControlImpl(int parties) {
26     this(parties, parties);
27   }
28   
29   public ControlImpl(int startParties, int completeParties) {
30     this.startParties = startParties;
31     this.completeParties = completeParties;
32     this.startBarrier = new CyclicBarrier(startParties);
33     this.countdown = new CountDown(completeParties);
34   }
35
36   public static void visitL1DSOConfig(ConfigVisitor visitor, DSOClientConfigHelper config) {
37     String JavaDoc classname = ControlImpl.class.getName();
38     config.addIncludePattern(classname);
39     config.addWriteAutolock("* " + classname + ".*(..)");
40     
41     String JavaDoc cyclicBarrierClassname = CyclicBarrier.class.getName();
42     config.addIncludePattern(cyclicBarrierClassname);
43     config.addWriteAutolock("* " + cyclicBarrierClassname + ".*(..)");
44     
45     String JavaDoc countdownClassname = CountDown.class.getName();
46     config.addIncludePattern(countdownClassname);
47     config.addWriteAutolock("* " + countdownClassname + ".*(..)");
48   }
49   
50   public static void visitDSOApplicationConfig(com.tc.object.config.ConfigVisitor visitor,
51                                                com.tc.object.config.DSOApplicationConfig config) {
52     String JavaDoc classname = ControlImpl.class.getName();
53     config.addIncludePattern(classname);
54     config.addWriteAutolock("* " + classname + ".*(..)");
55     
56     new CyclicBarrierSpec().visit(visitor, config);
57     new CountDownSpec().visit(visitor, config);
58     
59   }
60   
61   public String JavaDoc toString() {
62     return getClass().getName() + "[ startParties=" + startParties + ", completeParties=" +
63     completeParties + ", startBarrier="
64     + startBarrier + ", countdown=" + countdown + "]";
65   }
66   
67   public void waitForStart(long timeout) throws InterruptedException JavaDoc, TCBrokenBarrierException, TCTimeoutException {
68     try {
69       try {
70         this.startBarrier.attemptBarrier(timeout);
71       } catch (InterruptedException JavaDoc e1) {
72         throw e1;
73       }
74     } catch (TimeoutException e) {
75       throw new TCTimeoutException(e);
76     } catch (BrokenBarrierException e) {
77       throw new TCBrokenBarrierException(e);
78     }
79   }
80
81   public void notifyComplete() {
82     this.countdown.release();
83   }
84   
85   public boolean waitForAllComplete(long timeout) throws InterruptedException JavaDoc {
86     if (timeout < 0) {
87       while (true) {
88         synchronized (this) {
89           wait();
90         }
91       }
92     }
93     try {
94       boolean rv = this.countdown.attempt(timeout);
95       return rv;
96     } catch (InterruptedException JavaDoc e) {
97       throw e;
98     }
99   }
100 }
Popular Tags