package de.ovgu.cide.configuration;
/*package coloredide.configuration;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.dom.CompilationUnit;
import coloredide.features.source.ColoredJavaSourceFile;
import coloredide.validator.ColorProblem;
public class ErrorCodePrinter extends HideColoredCodePrinter {
private static class ProblemSeg {
int begin;
int end;
String msg;
ProblemSeg(int b, int e, String m) {
begin = b;
end = e;
msg = m;
}
void merge(ProblemSeg first) {
end = Math.max(end, first.end);
msg = msg + "\n" + first.msg;
}
public String toString() {
return "<problem " + begin + "-" + end + " : "
+ msg.substring(0, 10) + ">";
}
}
private Queue<ProblemSeg> problemQueue;
protected String printCode(String buffer, CompilationUnit ast) {
IFile file = ColoredJavaSourceFile.getResource(ast);
IMarker[] markers = null;
try {
// only show errors when all features included, because otherwise
// the position can move
if (hiddenColors.isEmpty())
markers = file.findMarkers(ColorProblem.TYPEID, true,
IResource.DEPTH_ZERO);
} catch (CoreException e) {
}
problemQueue = interpretMarkers(markers);
return "<style type=\"text/css\">.error {color:red;text-weight:bold;text-decoration:underline}</style>"
+ super.printCode(buffer, ast);
}
private Queue<ProblemSeg> interpretMarkers(IMarker[] markers) {
LinkedList<ProblemSeg> result = new LinkedList<ProblemSeg>();
List<ProblemSeg> tmp = new ArrayList<ProblemSeg>();
if (markers != null)
for (IMarker marker : markers) {
int begin = marker.getAttribute(IMarker.CHAR_START, -1);
int end = marker.getAttribute(IMarker.CHAR_END, -1);
String msg = marker.getAttribute(IMarker.MESSAGE, "");
if (begin >= 0 && end >= 0) {
tmp.add(new ProblemSeg(begin, end, msg));
}
}
while (!tmp.isEmpty()) {
ProblemSeg first = tmp.get(0);
for (ProblemSeg s : tmp) {
if (s.begin < first.begin)
first = s;
}
tmp.remove(first);
ProblemSeg last = result.isEmpty() ? null : result.get(result
.size() - 1);
if (last != null && last.end > first.begin)
last.merge(first);
else
result.add(first);
}
return result;
}
protected String printSegment(String buffer, CodeSegment seg) {
// remove finished problems
while (problemQueue.peek() != null
&& problemQueue.peek().end <= seg.getOffset())
problemQueue.poll();
ProblemSeg firstProblem = problemQueue.peek();
if (firstProblem == null || firstProblem.begin > seg.endPosition())
return super.printSegment(buffer, seg);
// first problem starts later
if (firstProblem.begin > seg.getOffset()) {
CodeSegment firstSeg = seg.copy();
firstSeg.setEndPosition(firstProblem.begin);
seg.moveStartPosition(firstProblem.begin);
return super.printSegment(buffer, firstSeg)
+ this.printSegment(buffer, seg);
}
// problem starts at the beginning of the segment
// firstproblem goes beyond end
if (firstProblem.end >= seg.endPosition()) {
return openProblem(firstProblem) + super.printSegment(buffer, seg)
+ closeProblem(firstProblem);
}
// problem closes inside
CodeSegment firstSeg = seg.copy();
firstSeg.setEndPosition(firstProblem.end);
seg.moveStartPosition(firstProblem.end);
return openProblem(firstProblem) + super.printSegment(buffer, firstSeg)
+ closeProblem(firstProblem) + this.printSegment(buffer, seg);
}
private String closeProblem(ProblemSeg problem) {
return "</span>";
}
private String openProblem(ProblemSeg problem) {
return "<span class=\"error\" title=\"" + problem.msg + "\">";
}
}
*/