/**
*
*/
package org.zkoss.zktest.test2;
import java.util.UUID;
import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.EventQueue;
import org.zkoss.zk.ui.event.EventQueues;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Div;
import org.zkoss.zul.Label;
/**
* @author jumperchen
*
*/
public class B70_ZK_2574 extends SelectorComposer<Div> {
@Override
public void doAfterCompose(Div comp) throws Exception {
// TODO Auto-generated method stub
super.doAfterCompose(comp);
}
@Wire
Label status;
// based on
// http://books.zkoss.org/wiki/ZK_Developer%27s_Reference/UI_Patterns/Long_Operations/Use_Event_Queues#A_Generic_Approach
// --> fails
@Listen("onClick=#btn")
public void longOp() {
final String tempWorkingQueueName = "workingQueue" + UUID.randomUUID();
final EventQueue eventQueue = EventQueues.lookup(tempWorkingQueueName);
eventQueue.subscribe(new EventListener() {
public void onEvent(org.zkoss.zk.ui.event.Event event)
throws Exception {
if ("onStart".equals(event.getName())) {
org.zkoss.lang.Threads.sleep(2000);
// eventQueue.unsubscribe(this);
eventQueue.publish(new Event("onFinish"));
}
}
}, true);
eventQueue.subscribe(new EventListener() {
public void onEvent(org.zkoss.zk.ui.event.Event event)
throws Exception {
if ("onFinish".equals(event.getName())) {
status.setValue("finished");
Clients.clearBusy();
EventQueues.remove(tempWorkingQueueName);
}
}
});
status.setValue("started");
Clients.showBusy("please wait for 2 seconds");
eventQueue.publish(new Event("onStart"));
}
// based on
// http://books.zkoss.org/wiki/ZK_Developer%27s_Reference/UI_Patterns/Long_Operations/Use_Event_Queues#A_Simpler_Approach
// --> works
@Listen("onClick=#btn2")
public void longOp2() {
final String tempWorkingQueueName = "workingQueue" + UUID.randomUUID();
final EventQueue eventQueue = EventQueues.lookup(tempWorkingQueueName);
eventQueue.subscribe(new EventListener() {
public void onEvent(Event event) throws Exception {
org.zkoss.lang.Threads.sleep(2000);
}
}, new EventListener() {
public void onEvent(Event event) throws Exception {
status.setValue("finished");
Clients.clearBusy();
EventQueues.remove(tempWorkingQueueName);
}
});
status.setValue("started");
Clients.showBusy("please wait for 2 seconds");
eventQueue.publish(new Event("onStart"));
}
}