1 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 46 public class PushTest extends Column { 47 48 56 private class SimulatedServerOperation 57 extends Thread { 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 ex) { } 73 } 74 } 75 } 76 } 77 78 private class ProgressUpdateTask 79 implements Runnable { 80 81 private int percentComplete; 82 83 private ProgressUpdateTask(int percentComplete) { 84 this.percentComplete = percentComplete; 85 } 86 87 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 taskQueue = getApplicationInstance().createTaskQueue(); 124 new SimulatedServerOperation().start(); 125 } 126 } 127 }); 128 add(startButton); 129 } 130 131 134 public void dispose() { 135 if (taskQueue != null) { 136 getApplicationInstance().removeTaskQueue(taskQueue); 137 } 138 super.dispose(); 139 } 140 141 } 142 | Popular Tags |