package org.shanbo.feluca.distribute.launch;
import java.lang.reflect.Constructor;
import java.util.List;
import java.util.concurrent.Future;
import org.shanbo.feluca.paddle.GlobalConfig;
import org.shanbo.feluca.util.concurrent.ConcurrentExecutor;
import com.alibaba.fastjson.JSONArray;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
public class LoopingRunner {
List<GlobalConfig> configs;
public LoopingRunner(JSONArray configs){
this.configs = Lists.newArrayList();
for(int i = 0 ; i < configs.size(); i++){
this.configs.add(GlobalConfig.parseJSON(configs.getJSONObject(i).toJSONString()));
}
}
public void runTasks(Class<? extends LoopingBase> jobClass) throws Exception{
System.out.println("(" + configs.size() + ")tasks : " + Lists.transform(configs, new Function<GlobalConfig, String>() {
public String apply(GlobalConfig input) {
return input.getWorkerName();
}
}));
System.out.println(">>>>>>>>>>>>>>>>>>>>>>");
List<Future<?>> futures = Lists.newArrayList();
Constructor<? extends LoopingBase> constructor = jobClass.getConstructor(GlobalConfig.class);
for(int i = 0 ; i < configs.size() ; i++){
Runnable r = constructor.newInstance(configs.get(i));
futures.add(ConcurrentExecutor.submit(r));
}
for( int i = 0; i < futures.size() ; i++){
futures.get(i).get();
}
System.out.println("<<<<<<<<<<<<<<<<<<<<<<");
}
}