package org.infosec.ismp.situation.calculate.substep.callable;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.Callable;
import org.infosec.ismp.situation.calculate.substep.callable.result.ResultExponential;
import org.infosec.ismp.situation.model.SituationEvent;
import org.infosec.ismp.situation.util.SituationUtils;
public class AttackCallable implements Callable<ResultExponential> {
private Map<String, int[]> counts;
private int index;
private Timestamp time;
private List<SituationEvent> list;
public AttackCallable(Map<String, int[]> counts,int vindex,Timestamp vtime,List<SituationEvent> list) {
this.counts = counts;
this.index = vindex;
this.time = vtime;
this.list = list;
}
@SuppressWarnings("unchecked")
public ResultExponential call() throws Exception {
Map<String,Float> map = new HashMap<String,Float>();
// List<SituationEvent> list = new ArrayList<SituationEvent>();
// for (SituationEvent situationEvent : list) {
// situationEvent.setTime(time);
// }
if(null != list && list.size() > 0){
for (SituationEvent situationevent : list) {
situationevent.setTime(time);///将态势的生成时间保存进situationevent对象
}
}
ResultExponential res = new ResultExponential();
if (counts != null && counts.size() > 0) {
Iterator<Entry<String, int[]>> it = counts.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = it.next();
String ip = (String) entry.getKey();///ip地址
int[] count = (int[]) entry.getValue();
float value = SituationUtils.exponentialCalculate(count);///计算态势指数。
map.put(ip, value);
}
}
res.setExp(map);
res.setIndex(index);
res.setTime(time);
res.setType(1);///类型为1,表示攻击事件。
res.setList(list);
return res;///任务的返回值
}
}