/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.core.common.progress;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import junit.framework.TestCase;
import com.jinhe.tss.core.common.progress.Progress;
import com.jinhe.tss.core.common.progress.ProgressManager;
import com.jinhe.tss.core.common.progress.ProgressPool;
import com.jinhe.tss.core.common.progress.Progressable;
import com.jinhe.tss.core.exception.BusinessException;
/**
* <p> ProgressTest.java </p>
*
* 测试进度条
*/
public class ProgressTest extends TestCase {
String code;
long delay = 3; //每次取进度信息间隔时间 单位 s
public void setUp() {
ProgressManager manager = new ProgressManager(new Progressable(){
public void execute(Map<String, Object> params, Progress progress) {
for(int i = 1; i <= 100; i++) {
// 随即的休眠1--5秒,然后打印出当前循环到的序号,直到100只进度100%完成。
try {
Thread.sleep(new Random().nextInt(5) * 100);
} catch (InterruptedException e) {
}
System.out.println(i);
if( i%10 == 0) {
progress.add(10); // 进度加10
}
}
}
}, 100, new HashMap<String, Object>());
code = manager.execute();
}
// 以下为不同的线程轮番请求进度信息
public void testProgressInMultiThread() {
int i = 0;
Progress progress = (Progress)ProgressPool.getSchedule(code);
while (!progress.isCompleted() && !progress.isConceal()) {
new Thread() {
public void run() {
delay = getProgress(code);
}
}.start();
try {
Thread.sleep(delay * 1000);
} catch (InterruptedException e) {
}
if(i++ == 32) {
// progress.setIsConceal(true); //设置中止标志
}
}
}
public void testProgressInMultiThread2() {
int i = 0;
Progress progress = ProgressPool.getSchedule(code);
while (!progress.isCompleted() && !progress.isConceal()) {
new Thread() {
public void run() {
delay = getProgress(code);
}
}.start();
try {
Thread.sleep(delay * 1000);
} catch (InterruptedException e) {
}
if(i++ == 3) {
progress.setIsConceal(true); //设置中止标志
}
}
assertTrue(progress.isConceal());
}
long getProgress(String code){
Progress progress = (Progress)ProgressPool.getSchedule(code);
if(!progress.isNormal()){
ProgressPool.removeSchedule(code);
Throwable t = progress.getException();
throw new BusinessException(t.getMessage());
}
if(progress.isConceal()){
System.out.println("取消进度成功");
}
Object[] info = progress.getProgressInfo();
System.out.println("已经完成" + info[0] + "%, 本次用时:" + info[1] + "s, 剩余时间" + info[2] + "s");
if(progress.isCompleted()){
ProgressPool.removeSchedule(code); //执行结束则将将进度对象从池中移除
}
return ((Long)info[1]);
}
}