KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > nextapp > echo2 > testapp > interactive > testscreen > PushTest


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.testscreen;
31
32 import nextapp.echo2.app.ApplicationInstance;
33 import nextapp.echo2.app.Button;
34 import nextapp.echo2.app.Extent;
35 import nextapp.echo2.app.Insets;
36 import nextapp.echo2.app.Label;
37 import nextapp.echo2.app.TaskQueueHandle;
38 import nextapp.echo2.app.Column;
39 import nextapp.echo2.app.event.ActionEvent;
40 import nextapp.echo2.app.event.ActionListener;
41 import nextapp.echo2.app.layout.SplitPaneLayoutData;
42
43 /**
44  * Test for asynchronous (server push) operations.
45  */

46 public class PushTest extends Column {
47     
48     /**
49      * Thread to simulate long-running operation on server.
50      * Note that threading is not allowed by J2EE containers
51      * conforming to the 1.3 (or earlier) J2EE specification.
52      * If you plan on deploying an Echo2 user interface to such
53      * a container, please refrain from using this class as
54      * an example.
55      */

56     private class SimulatedServerOperation
57     extends Thread JavaDoc {
58         
59         private int percentComplete = 0;
60         
61         public void run() {
62             while (percentComplete < 100) {
63                 percentComplete += (Math.random() * 20);
64                 if (percentComplete > 100) {
65                     percentComplete = 100;
66                 }
67                 ApplicationInstance app = getApplicationInstance();
68                 if (app != null) {
69                     app.enqueueTask(taskQueue, new ProgressUpdateTask(percentComplete));
70                     try {
71                         Thread.sleep((long) (Math.random() * 1000));
72                     } catch (InterruptedException JavaDoc ex) { }
73                 }
74             }
75         }
76     }
77     
78     private class ProgressUpdateTask
79     implements Runnable JavaDoc {
80         
81         private int percentComplete;
82         
83         private ProgressUpdateTask(int percentComplete) {
84             this.percentComplete = percentComplete;
85         }
86         
87         /**
88          * @see java.lang.Runnable#run()
89          */

90         public void run() {
91             if (percentComplete < 100) {
92                 statusLabel.setText("Asynchronous operation in progress; " + percentComplete
93                         + "% complete.");
94             } else {
95                 statusLabel.setText("Asynchronous operation complete.");
96                 getApplicationInstance().removeTaskQueue(taskQueue);
97                 taskQueue = null;
98             }
99         }
100     }
101     
102     private TaskQueueHandle taskQueue;
103     private Label statusLabel;
104     
105     public PushTest() {
106         super();
107         
108         SplitPaneLayoutData splitPaneLayoutData = new SplitPaneLayoutData();
109         splitPaneLayoutData.setInsets(new Insets(10));
110         setLayoutData(splitPaneLayoutData);
111         
112         setCellSpacing(new Extent(20));
113         
114         statusLabel = new Label("Asynchronous operation not active.");
115         add(statusLabel);
116         
117         Button startButton = new Button("Start Asynchronous (Server Push) Operation");
118         startButton.setStyleName("Default");
119         startButton.addActionListener(new ActionListener() {
120             public void actionPerformed(ActionEvent e) {
121                 if (taskQueue == null) {
122                     // Only start new operation if taskQueue is null, indicating that last operation has completed.
123
taskQueue = getApplicationInstance().createTaskQueue();
124                     new SimulatedServerOperation().start();
125                 }
126             }
127         });
128         add(startButton);
129     }
130     
131     /**
132      * @see nextapp.echo2.app.Component#dispose()
133      */

134     public void dispose() {
135         if (taskQueue != null) {
136             getApplicationInstance().removeTaskQueue(taskQueue);
137         }
138         super.dispose();
139     }
140     
141 }
142
Popular Tags