package edu.usc.enl.dynamicmeasurement.algorithms.transform;
import edu.usc.enl.dynamicmeasurement.data.DataPacket;
import edu.usc.enl.dynamicmeasurement.model.WildcardPattern;
import edu.usc.enl.dynamicmeasurement.process.EpochPacket;
import edu.usc.enl.dynamicmeasurement.process.PacketUser;
import org.w3c.dom.Element;
import java.util.HashMap;
import java.util.Map;
/**
* Created with IntelliJ IDEA.
* User: masoud
* Date: 5/8/2014
* Time: 9:43 AM
*/
public class SourceDestinationPairTransformer extends TrafficTransformer {
private Map<Long, Map<Long, Long>> keyItemMap = new HashMap<>();
public SourceDestinationPairTransformer(Element element) {
super(element);
}
public SourceDestinationPairTransformer(WildcardPattern filter) {
super(filter);
}
public SourceDestinationPairTransformer(PacketUser nextUser, WildcardPattern filter) {
super(nextUser, filter);
}
@Override
public void reset() {
super.reset();
keyItemMap.clear();
}
// public void print() {
// DataPacket p = new DataPacket(getStep(), 0, 0, 0, 0, 0, 9);
// for (Map.Entry<Long, Map<Long, Long>> entry : keyItemMap.entrySet()) {
// p.setSrcIP(entry.getKey());
// for (Map.Entry<Long, Long> item : entry.getValue().entrySet()) {
// p.setDstIP(item.getKey()); //////////////////////////////////////////////////
// p.setSize(item.getValue());
// pw.println(p.print());
// }
// }
// }
@Override
protected void process2(DataPacket p) {
Map<Long, Long> items = keyItemMap.get(p.getSrcIP());
if (items == null) {
items = new HashMap<>();
keyItemMap.put(p.getSrcIP(), items);
}
Long size = items.get(p.getDstIP());
if (size == null) {
size = 0l;
}
size += (long) p.getSize();
items.put(p.getDstIP(), size);
}
@Override
protected void step(EpochPacket ep) {
for (Map.Entry<Long, Map<Long, Long>> entry : keyItemMap.entrySet()) {
for (Map.Entry<Long, Long> item : entry.getValue().entrySet()) {
DataPacket p = new DataPacket(ep.getTime(), entry.getKey(), item.getKey(), 0, 0, 0, item.getValue());
passPacket(p);
}
}
passPacket(ep);
}
}