package com.github.sommeri.less4j;
import java.util.Arrays;
import java.util.List;
import com.github.sommeri.less4j.LessCompiler.CompilationResult;
import com.github.sommeri.less4j.LessCompiler.Problem;
import com.github.sommeri.less4j.utils.ArraysUtils;
import com.github.sommeri.less4j.utils.ProblemsPrinter;
@SuppressWarnings("serial")
public class Less4jException extends Exception {
private static final int SHOW_ERRORS = 2;
private final CompilationResult partialResult;
private final List<Problem> errors;
private final String message;
public Less4jException(Problem error, CompilationResult partialResult) {
this(Arrays.asList(error), partialResult);
}
public Less4jException(List<Problem> errors, CompilationResult partialResult) {
super();
this.errors = errors;
this.partialResult = partialResult;
this.message = createMessage();
}
public CompilationResult getPartialResult() {
return partialResult;
}
public List<Problem> getErrors() {
return errors;
}
@Override
public String getMessage() {
return message;
}
private String createMessage() {
ProblemsPrinter problemsPrinter = new ProblemsPrinter();
StringBuilder builder = new StringBuilder("Could not compile less. ");
builder.append(errors.size()).append(" error(s) occurred:\n");
List<Problem> visibleErrors = ArraysUtils.safeSublist(errors, 0, SHOW_ERRORS);
String visibleErrorsStr = problemsPrinter.printErrors(visibleErrors);
builder.append(visibleErrorsStr);
if (errors.size()>SHOW_ERRORS)
builder.append("...\n");
return builder.toString();
}
}