package coverage;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
/**
*
* Data structure to represent the coverage for lines.
* @author Jens Meinicke
*
*/
public class Coverage {
private final TreeMap<String, Map<Integer, Interaction>> coverage;
private String type;
private int baseValue = 0;
private int minInteraction;
public Coverage() {
coverage = new TreeMap<>();
}
public void setType(String text) {
type = text;
}
public String getType() {
return type;
}
public void setLineCovered(final String fileName, int line, final int interaction, final Object text) {
setLineCovered(fileName, line, interaction, text, false);
}
public void setLineCovered(final String fileName, int line, final int interaction, final Object text, boolean force) {
final Map<Integer, Interaction> fileCoverage;
if (coverage.containsKey(fileName)) {
fileCoverage = coverage.get(fileName);
} else {
fileCoverage = new TreeMap<>();
coverage.put(fileName, fileCoverage);
}
if (!fileCoverage.containsKey(line)) {
fileCoverage.put(line, new Interaction(line, interaction, text));
} else {
final Interaction current = fileCoverage.get(line);
if (force || current.getInteraction() <= interaction) {
current.setInteraction(interaction);
current.setText(text);
}
}
}
public Collection<String> getFiles() {
return coverage.keySet();
}
public Interaction getCoverage(String file, Integer line) {
if (coverage.containsKey(file)) {
return coverage.get(file).get(line);
}
return null;
}
public Collection<Interaction> getCoverage(String file) {
if (coverage.containsKey(file)) {
return coverage.get(file).values();
}
return Collections.emptySet();
}
public void deleteMinInteraction() {
if (minInteraction <= -1) {
return;
}
for (Map<Integer, Interaction> interactions : coverage.values()) {
List<Integer> removeThese = new LinkedList<>();
for (Entry<Integer, Interaction> i : interactions.entrySet()) {
if (i.getValue().getInteraction() <= minInteraction) {
removeThese.add(i.getKey());
}
}
for (Integer remove : removeThese) {
interactions.remove(remove);
}
}
}
public void clear() {
coverage.clear();
}
@Override
public String toString() {
final StringBuilder builder = new StringBuilder();
for (Entry<String, Map<Integer, Interaction>> fileCoverage : coverage.entrySet()) {
builder.append("FILE: ");
builder.append(fileCoverage.getKey());
builder.append("\n");
Map<Integer, Interaction> c = fileCoverage.getValue();
for (Interaction interaction : c.values()) {
builder.append(interaction);
builder.append("\n");
}
builder.append("---------------------");
}
return builder.toString();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Coverage) {
Coverage other = (Coverage) obj;
return coverage.equals(other.coverage);
}
return false;
}
@Override
public int hashCode() {
return coverage.hashCode();
}
public int getBaseValue() {
return baseValue;
}
public void setBaseValue(int baseValue) {
this.baseValue = baseValue;
}
public void setMinInteraction(int minInteraction) {
this.minInteraction = minInteraction;
}
}