// Path: src/main/java/com/baidu/unbiz/multiengine/common/DisTaskPair.java
// public class DisTaskPair extends TaskPair {
// 
//     public DisTaskPair(String taskName, Object param) {
//         this.field1 = taskName;
//         this.field2 = param;
//     }
// 
//     @Override
//     public TaskPair wrap(String taskName, Object param) {
//         return new DisTaskPair(taskName, param);
//     }
// }
// 
// Path: src/test/java/com/baidu/unbiz/multiengine/vo/DeviceRequest.java
// public class DeviceRequest {
// 
//     private List<Integer> deviceIds;
// 
//     public List<Integer> getDeviceIds() {
//         return deviceIds;
//     }
// 
//     public void setDeviceIds(List<Integer> deviceIds) {
//         this.deviceIds = deviceIds;
//     }
// 
//     public static DeviceRequest build(QueryParam target) {
//         DeviceRequest req = new DeviceRequest();
// //        req.copyProperties(target);
//         return req;
//     }
// }
// 
// Path: src/test/java/com/baidu/unbiz/multiengine/vo/DeviceViewItem.java
// public class DeviceViewItem {
// 
//     private static final long serialVersionUID = 6132709579470894604L;
// 
//     private int planId;
// 
//     private String planName;
// 
//     private Integer deviceId;
// 
//     private String deviceName ;
// 
//     // getter and setter
//     public int getPlanId() {
//         return planId;
//     }
// 
//     public void setPlanId(int planId) {
//         this.planId = planId;
//     }
// 
//     public Integer getDeviceId() {
//         return deviceId;
//     }
// 
//     public void setDeviceId(Integer deviceId) {
//         this.deviceId = deviceId;
//     }
// 
//     public String getPlanName() {
//         return planName;
//     }
// 
//     public void setPlanName(String planName) {
//         this.planName = planName;
//     }
// 
//     public String getDeviceName() {
//         return deviceName;
//     }
// 
//     public void setDeviceName(String deviceName) {
//         this.deviceName = deviceName;
//     }
// 
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// }
// 
// Path: src/test/java/com/baidu/unbiz/multiengine/vo/QueryParam.java
// public class QueryParam extends EnableCast implements TaskRequest {
// 
//     // 基础查询相关公共字段
//     /** 起始查询日期 */
//     protected Date from;
//     /** 终止查询日期 */
//     protected Date to;
//     /** 查询的时间粒度 */
//     protected int timeUnit;
//     /** 第几页 */
//     protected int page;
//     /** 每页大小 */
//     protected int pageSize = 20;
//     /** 前端过滤字符 */
//     protected String query;
// 
//     public String getQuery() {
//         return query;
//     }
// 
//     public void setQuery(String query) {
//         this.query = query;
//     }
// 
//     public Date getFrom() {
//         return from;
//     }
// 
//     public void setFrom(Date from) {
//         this.from = from;
//     }
// 
//     public Date getTo() {
//         return to;
//     }
// 
//     public void setTo(Date to) {
//         this.to = to;
//     }
// 
//     public int getTimeUnit() {
//         return timeUnit;
//     }
// 
//     public void setTimeUnit(int timeUnit) {
//         this.timeUnit = timeUnit;
//     }
// 
//     public int getPage() {
//         return page;
//     }
// 
//     public void setPage(int page) {
//         this.page = page;
//     }
// 
//     public int getPageSize() {
//         return pageSize;
//     }
// 
//     public void setPageSize(int pageSize) {
//         this.pageSize = pageSize;
//     }
// 
// 
// }


import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import com.baidu.unbiz.multiengine.common.DisTaskPair;
import com.baidu.unbiz.multiengine.vo.DeviceRequest;
import com.baidu.unbiz.multiengine.vo.DeviceViewItem;
import com.baidu.unbiz.multiengine.vo.QueryParam;
import com.baidu.unbiz.multitask.common.TaskPair;
import com.baidu.unbiz.multitask.forkjoin.ForkJoin;
import com.baidu.unbiz.multitask.policy.DefautExecutePolicy;
import com.baidu.unbiz.multitask.task.ParallelExePool;
import com.baidu.unbiz.multitask.task.thread.MultiResult;
package com.baidu.unbiz.multiengine.demo.test;





// 可以显示指定spring前置依赖
@DependsOn("devicePlanStatServiceImpl")
@Component
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext-test.xml")
public class DistributededParallelFetchTest {

    @Resource(name = "distributedParallelExePool")
    private ParallelExePool parallelExePool;

    /**
     * 测试分布式并行执行task
     */
    @Test
    public void testDistributedParallelRunDisTask() {
        QueryParam qp = new QueryParam();
        MultiResult ctx =
                parallelExePool.submit(
// Path: src/main/java/com/baidu/unbiz/multiengine/common/DisTaskPair.java
// public class DisTaskPair extends TaskPair {
// 
//     public DisTaskPair(String taskName, Object param) {
//         this.field1 = taskName;
//         this.field2 = param;
//     }
// 
//     @Override
//     public TaskPair wrap(String taskName, Object param) {
//         return new DisTaskPair(taskName, param);
//     }
// }
// 
// Path: src/test/java/com/baidu/unbiz/multiengine/vo/DeviceRequest.java
// public class DeviceRequest {
// 
//     private List<Integer> deviceIds;
// 
//     public List<Integer> getDeviceIds() {
//         return deviceIds;
//     }
// 
//     public void setDeviceIds(List<Integer> deviceIds) {
//         this.deviceIds = deviceIds;
//     }
// 
//     public static DeviceRequest build(QueryParam target) {
//         DeviceRequest req = new DeviceRequest();
// //        req.copyProperties(target);
//         return req;
//     }
// }
// 
// Path: src/test/java/com/baidu/unbiz/multiengine/vo/DeviceViewItem.java
// public class DeviceViewItem {
// 
//     private static final long serialVersionUID = 6132709579470894604L;
// 
//     private int planId;
// 
//     private String planName;
// 
//     private Integer deviceId;
// 
//     private String deviceName ;
// 
//     // getter and setter
//     public int getPlanId() {
//         return planId;
//     }
// 
//     public void setPlanId(int planId) {
//         this.planId = planId;
//     }
// 
//     public Integer getDeviceId() {
//         return deviceId;
//     }
// 
//     public void setDeviceId(Integer deviceId) {
//         this.deviceId = deviceId;
//     }
// 
//     public String getPlanName() {
//         return planName;
//     }
// 
//     public void setPlanName(String planName) {
//         this.planName = planName;
//     }
// 
//     public String getDeviceName() {
//         return deviceName;
//     }
// 
//     public void setDeviceName(String deviceName) {
//         this.deviceName = deviceName;
//     }
// 
//     public String toString() {
//         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
//     }
// }
// 
// Path: src/test/java/com/baidu/unbiz/multiengine/vo/QueryParam.java
// public class QueryParam extends EnableCast implements TaskRequest {
// 
//     // 基础查询相关公共字段
//     /** 起始查询日期 */
//     protected Date from;
//     /** 终止查询日期 */
//     protected Date to;
//     /** 查询的时间粒度 */
//     protected int timeUnit;
//     /** 第几页 */
//     protected int page;
//     /** 每页大小 */
//     protected int pageSize = 20;
//     /** 前端过滤字符 */
//     protected String query;
// 
//     public String getQuery() {
//         return query;
//     }
// 
//     public void setQuery(String query) {
//         this.query = query;
//     }
// 
//     public Date getFrom() {
//         return from;
//     }
// 
//     public void setFrom(Date from) {
//         this.from = from;
//     }
// 
//     public Date getTo() {
//         return to;
//     }
// 
//     public void setTo(Date to) {
//         this.to = to;
//     }
// 
//     public int getTimeUnit() {
//         return timeUnit;
//     }
// 
//     public void setTimeUnit(int timeUnit) {
//         this.timeUnit = timeUnit;
//     }
// 
//     public int getPage() {
//         return page;
//     }
// 
//     public void setPage(int page) {
//         this.page = page;
//     }
// 
//     public int getPageSize() {
//         return pageSize;
//     }
// 
//     public void setPageSize(int pageSize) {
//         this.pageSize = pageSize;
//     }
// 
// 
// }


// Path: src/test/java/com/baidu/unbiz/multiengine/demo/test/DistributededParallelFetchTest.java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import com.baidu.unbiz.multiengine.common.DisTaskPair;
import com.baidu.unbiz.multiengine.vo.DeviceRequest;
import com.baidu.unbiz.multiengine.vo.DeviceViewItem;
import com.baidu.unbiz.multiengine.vo.QueryParam;
import com.baidu.unbiz.multitask.common.TaskPair;
import com.baidu.unbiz.multitask.forkjoin.ForkJoin;
import com.baidu.unbiz.multitask.policy.DefautExecutePolicy;
import com.baidu.unbiz.multitask.task.ParallelExePool;
import com.baidu.unbiz.multitask.task.thread.MultiResult;

package com.baidu.unbiz.multiengine.demo.test;





// 可以显示指定spring前置依赖
@DependsOn("devicePlanStatServiceImpl")
@Component
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext-test.xml")
public class DistributededParallelFetchTest {

    @Resource(name = "distributedParallelExePool")
    private ParallelExePool parallelExePool;

    /**
     * 测试分布式并行执行task
     */
    @Test
    public void testDistributedParallelRunDisTask() {
        QueryParam qp = new QueryParam();
        MultiResult ctx =
                parallelExePool.submit(
                        new TaskPair("deviceUvFetcher", DeviceRequest.build(qp)),