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;///任务的返回值 } }