package de.ovgu.cide.typing.internal;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import de.ovgu.cide.typing.model.ITypingCheck;
public class TypingMarkerFactory {
public final static String MARKER_TYPE_ID = "de.ovgu.cide.core.typing.problem";
public static final String PARAM_PROBLEMTYPE = "de.ovgu.cide.core.typing.problem.problemtype";
public static final String PARAM_PROBLEMDATA = "de.ovgu.cide.core.typing.problem.problemdata";
private final static String[] ATTRIBUTE_NAMES = { IMarker.MESSAGE,
IMarker.SEVERITY, IMarker.CHAR_START, IMarker.CHAR_END, PARAM_PROBLEMTYPE, PARAM_PROBLEMDATA };
public IMarker createErrorMarker(ITypingCheck check) throws CoreException {
assert null != check.getFile();
IMarker marker = check.getFile().getResource().createMarker(
MARKER_TYPE_ID);
assert marker != null;
updateErrorMarker(marker, check);
return marker;
}
public void updateErrorMarker(IMarker marker, ITypingCheck check)
throws CoreException {
marker.setAttributes(ATTRIBUTE_NAMES, new Object[] {
check.getErrorMessage(), getSeverity(check),
getStartPosition(check), getEndPosition(check),
check.getProblemType(), getNodeId(check) });
}
private Integer getStartPosition(ITypingCheck check) {
return check.getSource().getStartPosition();
}
private Integer getEndPosition(ITypingCheck check) {
return check.getSource().getStartPosition() + check.getSource().getLength();
}
private Integer getSeverity(ITypingCheck check) {
switch (check.getSeverity()) {
case ERROR:
return IMarker.SEVERITY_ERROR;
case WARNING:
return IMarker.SEVERITY_WARNING;
default:
return IMarker.SEVERITY_INFO;
}
}
private String getNodeId(ITypingCheck check) {
return check.getSource().getId();
}
}