private void renderErrors(PrintWriter writer, Collection<CompilationError> errors) throws IOException { sendJuzuCSS(writer); // writer.append("<div class=\"juzu\">"); for (CompilationError error : errors) { writer.append("<div class=\"juzu-box\">"); writer.append("<div class=\"juzu-message\">").append(error.getMessage()).append("</div>"); // Display the source code File source = error.getSourceFile(); if (source != null) { int line = error.getLocation().getLine(); int from = line - 2; int to = line + 3; BufferedReader reader = new BufferedReader(new FileReader(source)); int count = 1; writer.append("<pre><ol start=\"").append(String.valueOf(from)).append("\">"); for (String s = reader.readLine(); s != null; s = reader.readLine()) { if (count >= from && count < to) { if (count == line) { writer.append("<li><span class=\"error\">").append(s).append("</span></li>"); } else { writer.append("<li><span>").append(s).append("</span></li>"); } } count++; } writer.append("</ol></pre>"); } writer.append("</div>"); } writer.append("</div>"); }
private void renderThrowable(PrintWriter writer, Throwable t) throws IOException { // Trim the stack trace to remove stuff we don't want to see int size = 0; StackTraceElement[] trace = t.getStackTrace(); for (StackTraceElement element : trace) { if (element.getClassName().equals(JuzuPortlet.class.getName())) { break; } else { size++; } } StackTraceElement[] ourTrace = new StackTraceElement[size]; System.arraycopy(trace, 0, ourTrace, 0, ourTrace.length); t.setStackTrace(ourTrace); // sendJuzuCSS(writer); // We hack a bit final AtomicBoolean open = new AtomicBoolean(false); PrintWriter formatter = new PrintWriter(writer) { @Override public void println(Object x) { if (open.get()) { super.append("</ul></pre>"); } super.append("<div class=\"juzu-message\">"); super.append(String.valueOf(x)); super.append("</div>"); open.set(false); } @Override public void println(String x) { if (!open.get()) { super.append("<pre><ul>"); open.set(true); } super.append("<li><span>"); super.append(x); super.append("</span></li>"); } @Override public void println() { // Do nothing } }; // writer.append("<div class=\"juzu\">"); writer.append("<div class=\"juzu-box\">"); // We hack a bit with our formatter t.printStackTrace(formatter); // if (open.get()) { writer.append("</ul></pre>"); } // writer.append("</div>"); writer.append("</div>"); }