package org.infernus.idea.checkstyle.ui;
import com.intellij.ui.components.JBScrollPane;
import org.infernus.idea.checkstyle.CheckStyleBundle;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
import java.io.PrintWriter;
import java.io.StringWriter;
public class ErrorPanel extends JPanel {
private final JTextArea errorField = new JTextArea();
public ErrorPanel() {
super(new BorderLayout());
initialise();
setError(new RuntimeException());
}
private void initialise() {
setBorder(new EmptyBorder(8, 8, 8, 8));
final JLabel infoLabel = new JLabel(CheckStyleBundle.message("config.file.error.caption"));
infoLabel.setBorder(new EmptyBorder(0, 0, 8, 0));
add(infoLabel, BorderLayout.NORTH);
errorField.setEditable(false);
errorField.setTabSize(2);
final JScrollPane errorScrollPane = new JBScrollPane(errorField);
add(errorScrollPane, BorderLayout.CENTER);
}
public void setError(final Throwable t) {
final StringWriter errorWriter = new StringWriter();
causeOf(t).printStackTrace(new PrintWriter(errorWriter));
errorField.setText(errorWriter.getBuffer().toString());
errorField.setCaretPosition(0);
invalidate();
}
private Throwable causeOf(final Throwable t) {
if (t.getCause() != null && t.getCause() != t) {
return causeOf(t.getCause());
}
return t;
}
}