//This product is provided under the terms of EPL (Eclipse Public License)
//version 1.0.
//
//The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php
package org.dtangler.swingui.windowmanager.impl;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
public class ErrorDisplayComponent {
private final JTextArea detailsField;
private final JComponent viewComponent;
ErrorDisplayComponent(Throwable t) {
detailsField = createDetailsField();
viewComponent = createViewComponent(detailsField);
setDetails(t);
}
private JTextArea createDetailsField() {
JTextArea area = new JTextArea();
area.setName("detailsField");
area.setEditable(false);
return area;
}
private JComponent createViewComponent(JTextArea detailsField) {
DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout(
"fill:250dlu:grow", "p,8dlu,p,p,p,8dlu,p,fill:50dlu:grow"));
builder.append("An internal error has occured.");
builder.nextRow();
builder
.append("<html>If you like, you can report the error to <b>contact@dtangler.org</b>");
builder
.append("Reporting the error to us will help us improve this tool\n");
builder.append("Thank you and sorry for the inconvenience.");
builder.nextRow();
builder.appendSeparator("Error details");
builder.append(new JScrollPane(detailsField));
return builder.getPanel();
}
private void setDetails(Throwable t) {
StringBuilder sb = new StringBuilder();
sb.append(getMessage(t));
sb.append("\nat:\n");
for (StackTraceElement item : t.getStackTrace()) {
sb.append(item);
sb.append("\n");
}
detailsField.setText(sb.toString());
detailsField.setCaretPosition(0);
}
private String getMessage(Throwable t) {
StringBuilder sb = new StringBuilder();
sb.append(t.getClass().getSimpleName());
if (t.getMessage() != null && !"".equals(t.getMessage())
&& !t.getMessage().equals("null"))
sb.append("\nmessage: " + t.getMessage());
return sb.toString();
}
public JComponent getViewComponent() {
return viewComponent;
}
}