package org.erlide.cover.ui.annotations;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.jface.text.source.Annotation;
import org.erlide.cover.views.model.LineResult;
/**
* Stores information about which lines are marked with coverage annotations
*
* @author Aleksnadra Lipiec <aleksandra.lipiec@erlang-solutions.com>
*
*/
public class CoverageMap {
private final Map<String, Map<LineResult, Annotation>> coverage;
public CoverageMap() {
coverage = new HashMap<>();
}
/**
* Adds annotation for specified file at specified line.
*
* @param name
* @param lr
* @param ann
*/
public void addAnnotation(final String name, final LineResult lr,
final Annotation ann) {
if (!coverage.containsKey(name)) {
coverage.put(name, new HashMap<LineResult, Annotation>());
}
coverage.get(name).put(lr, ann);
}
/**
* Gets annotation from specified file in specified line
*
* @param name
* @param lr
* @return
*/
public Annotation getAnnotation(final String name, final LineResult lr) {
if (!coverage.containsKey(name)) {
return null;
}
return coverage.get(name).get(lr);
}
/**
* Check if an there is any coverage annotation at specified line
*
* @param name
* @param lr
* @return
*/
public boolean containsAnnotation(final String name, final LineResult lr) {
return coverage.containsKey(name) && coverage.get(name).containsKey(lr)
&& coverage.get(name).get(lr) != null;
}
public boolean containsFile(final String name) {
return coverage.containsKey(name);
}
/**
* Check the type of specified cverage annotation
*
* @param name
* @param lr
* @param type
* @return
*/
public boolean checkType(final String name, final LineResult lr, final String type) {
return containsAnnotation(name, lr)
&& coverage.get(name).get(lr).getType().equals(type);
}
/**
* Remove coverage annotations.
*
* @param name
* @param lr
*/
public void removeAnnotation(final String name, final LineResult lr) {
if (containsAnnotation(name, lr)) {
coverage.get(name).remove(lr);
}
}
/**
* Remove all annotations for specified file
*
* @param name
*/
public void removeAll(final String name) {
coverage.get(name).clear();
}
public void removeAll() {
coverage.clear();
}
public Set<LineResult> getLineSet(final String name) {
return new HashSet<>(coverage.get(name).keySet());
}
}