package org.jbehave.eclipse.editor.story;
import org.apache.commons.lang.StringEscapeUtils;
import org.eclipse.core.resources.IMarker;
import org.jbehave.eclipse.editor.JDTUtils;
import org.jbehave.eclipse.editor.step.StepCandidate;
import org.jbehave.eclipse.editor.text.MarkData;
public class Marks {
public static final String ERROR_CODE = "errorCode";
public static final String STEPS_HTML = "stepsHtml";
public static final String MESSAGE = "message";
public enum Code {
Unknown(-1),
MultipleMatchingSteps(1),
MultipleMatchingSteps_PrioritySelection(12),
NoMatchingStep(2),
InvalidNarrativePosition(3),
InvalidNarrativeSequence_multipleNarrative(4),
InvalidNarrativeSequence_multipleInOrderTo(5),
InvalidNarrativeSequence_multipleAsA(6),
InvalidNarrativeSequence_multipleIWantTo(7),
InvalidNarrativeSequence_multipleSoThat(8),
InvalidNarrativeSequence_missingNarrative(9),
InvalidNarrativeSequence_missingInOrderTo(10),
InvalidNarrativeSequence_missingAsA(11),
InvalidNarrativeSequence_missingIWantTo(12),
InvalidNarrativeSequence_missingSoThat(13);
private final int legacyCode;
private Code(int legacyCode) {
this.legacyCode = legacyCode;
}
public static Code lookup(int intCode, Code fallback) {
for(Code c : values()) {
if(c.legacyCode == intCode)
return c;
}
return fallback;
}
}
public static MarkData putCode(MarkData markData, Code errorCode) {
return markData.attribute(ERROR_CODE, errorCode.legacyCode);
}
public static Code getCode(IMarker marker) {
return Code.lookup(marker.getAttribute(ERROR_CODE, -1), Code.Unknown);
}
public static MarkData putStepsAsHtml(MarkData mark, Iterable<StepCandidate> candidates) {
StringBuilder builder = new StringBuilder();
builder.append("<ul>");
for(StepCandidate pStep : candidates) {
String qualifiedName = JDTUtils.formatQualifiedName(pStep.method);
builder
.append("<li>")
.append("<b>")
.append(StringEscapeUtils.escapeHtml(pStep.stepPattern))
.append("</b>")
.append(" (<code>")
.append("<a href=\"").append(qualifiedName).append("\">")
.append(qualifiedName)
.append("</a>")
.append("</code>)")
.append("</li>");
}
builder.append("</ul>");
return mark.attribute(STEPS_HTML, builder.toString());
}
}