KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > nextapp > echo2 > testapp > interactive > GhostTask


1 /*
2  * This file is part of the Echo Web Application Framework (hereinafter "Echo").
3  * Copyright (C) 2002-2005 NextApp, Inc.
4  *
5  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6  *
7  * The contents of this file are subject to the Mozilla Public License Version
8  * 1.1 (the "License"); you may not use this file except in compliance with
9  * the License. You may obtain a copy of the License at
10  * http://www.mozilla.org/MPL/
11  *
12  * Software distributed under the License is distributed on an "AS IS" basis,
13  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14  * for the specific language governing rights and limitations under the
15  * License.
16  *
17  * Alternatively, the contents of this file may be used under the terms of
18  * either the GNU General Public License Version 2 or later (the "GPL"), or
19  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
20  * in which case the provisions of the GPL or the LGPL are applicable instead
21  * of those above. If you wish to allow use of your version of this file only
22  * under the terms of either the GPL or the LGPL, and not to allow others to
23  * use your version of this file under the terms of the MPL, indicate your
24  * decision by deleting the provisions above and replace them with the notice
25  * and other provisions required by the GPL or the LGPL. If you do not delete
26  * the provisions above, a recipient may use your version of this file under
27  * the terms of any one of the MPL, the GPL or the LGPL.
28  */

29
30 package nextapp.echo2.testapp.interactive;
31
32 import nextapp.echo2.app.Button;
33 import nextapp.echo2.app.TaskQueueHandle;
34
35 /**
36  * Note to developers who might use this class as an example:
37  * Don't. This is a *very unusual* use of asynchronous tasks.
38  * See the documentation for examples of how asynchronous tasks
39  * might normally be used.
40  */

41 public class GhostTask {
42     
43     private InteractiveApp app;
44     private int clicksPerIteration = 1;
45     private boolean indefiniteAllowed;
46     private int iteration = 0;
47     private String JavaDoc[] script;
48     private int scriptIndex = 0;
49     private String JavaDoc[] startupScript;
50     
51     private TaskQueueHandle taskQueue;
52     
53     private int totalIterations = -1;
54     private int runTime = -1;
55     private long stopTime = -1;
56
57     private Runnable JavaDoc task = new Runnable JavaDoc() {
58     
59         /**
60          * @see java.lang.Runnable#run()
61          */

62         public void run() {
63             for (int i = 0; i < clicksPerIteration; ++i) {
64                 if (script == null) {
65                     RandomClick.clickRandomButton();
66                 } else {
67                     Button button = (Button) app.getDefaultWindow().getComponent(script[scriptIndex]);
68                     button.doAction();
69                     ++scriptIndex;
70                     if (scriptIndex >= script.length) {
71                         scriptIndex = 0;
72                     }
73                 }
74             }
75             if (stopTime != -1 && System.currentTimeMillis() > stopTime) {
76                 app.setGhostIterationWindowTitle(-1);
77                 // Test complete.
78
app.stopGhostTest();
79             } else if (totalIterations != -1 && iteration >= totalIterations) {
80                 app.setGhostIterationWindowTitle(-1);
81                 // Test complete.
82
app.stopGhostTest();
83             } else if (indefiniteAllowed) {
84                 ++iteration;
85                 app.setGhostIterationWindowTitle(iteration);
86                 app.enqueueTask(taskQueue, this);
87             }
88         }
89     };
90     
91     /**
92      * Creates a new <code>GhostTask</code>.
93      *
94      * @param app the application to test
95      * @param taskQueue the <code>TaskQueueHandle</code> to which tasks will be
96      * added
97      */

98     public GhostTask() {
99         super();
100         indefiniteAllowed = !InteractiveApp.LIVE_DEMO_SERVER;
101     }
102     
103     public int getClicksPerIteration() {
104         return clicksPerIteration;
105     }
106     
107     public int getRunTime() {
108         return runTime;
109     }
110
111     public String JavaDoc[] getScript() {
112         return script;
113     }
114
115     public String JavaDoc[] getStartupScript() {
116         return startupScript;
117     }
118
119     public int getTotalIterations() {
120         return totalIterations;
121     }
122
123     public void setClicksPerIteration(int clicksPerIteration) {
124         this.clicksPerIteration = clicksPerIteration;
125     }
126
127     public void setScript(String JavaDoc[] script) {
128         this.script = script;
129     }
130
131     public void setRunTime(int runTime) {
132         this.runTime = runTime;
133         this.totalIterations = -1;
134     }
135
136     public void setStartupScript(String JavaDoc[] startupScript) {
137         this.startupScript = startupScript;
138     }
139
140     public void setTotalIterations(int totalIterations) {
141         this.totalIterations = totalIterations;
142         this.runTime = -1;
143     }
144
145     void startTask(InteractiveApp app, TaskQueueHandle taskQueue) {
146         this.app = app;
147         this.taskQueue = taskQueue;
148         if (runTime != -1) {
149             stopTime = System.currentTimeMillis() + runTime;
150         }
151         app.enqueueTask(taskQueue, task);
152     }
153 }
154
Popular Tags