20 package net.sf.gridarta.gui.dialog.errorview;
22 import java.awt.Component;
23 import java.awt.Dialog;
24 import java.awt.Dimension;
25 import java.lang.reflect.InvocationTargetException;
26 import java.util.EnumMap;
28 import java.util.concurrent.Semaphore;
29 import javax.swing.JButton;
30 import javax.swing.JOptionPane;
31 import javax.swing.JScrollPane;
32 import javax.swing.JTree;
33 import javax.swing.SwingUtilities;
34 import javax.swing.tree.DefaultMutableTreeNode;
35 import javax.swing.tree.DefaultTreeModel;
36 import javax.swing.tree.TreePath;
40 import net.
sf.japi.swing.action.ActionBuilder;
41 import net.
sf.japi.swing.action.ActionBuilderFactory;
42 import net.
sf.japi.swing.action.ActionMethod;
43 import org.jetbrains.annotations.NotNull;
44 import org.jetbrains.annotations.Nullable;
56 private static final ActionBuilder
ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder(
"net.sf.gridarta");
62 private final DefaultTreeModel
treeModel =
new DefaultTreeModel(
null);
130 addEntry(categoryName, lineNo +
": " + message);
136 addEntry(categoryName,
"Warning: " + message);
141 addEntry(categoryName,
"Warning: line " + lineNo +
": " + message);
150 final Runnable runnable =
new Runnable() {
156 category.
add(errorEntry);
161 if (SwingUtilities.isEventDispatchThread()) {
165 SwingUtilities.invokeAndWait(runnable);
166 }
catch (
final InterruptedException ignored) {
167 Thread.currentThread().interrupt();
168 }
catch (
final InvocationTargetException ex) {
169 throw new RuntimeException(ex);
182 if (existingErrorEntry !=
null) {
183 return existingErrorEntry;
219 final JScrollPane scrollPane =
new JScrollPane(tree);
220 tree.setExpandsSelectedPaths(
true);
221 final TreePath path =
new TreePath(
new Object[] {
treeRoot, category, errorEntry, });
222 tree.setSelectionPath(path);
223 tree.scrollPathToVisible(path);
225 final JOptionPane pane =
new JOptionPane(scrollPane, JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION,
null,
new Object[] { okButton, },
okButton) {
228 private static final long serialVersionUID = 1L;
231 public void setValue(@Nullable
final Object newValue) {
232 super.setValue(newValue);
233 if (newValue != UNINITIALIZED_VALUE) {
239 pane.setPreferredSize(
new Dimension(800, 600));
243 pane.selectInitialValue();
255 final Runnable runnable =
new Runnable() {
264 if (SwingUtilities.isEventDispatchThread()) {
268 SwingUtilities.invokeAndWait(runnable);
269 }
catch (
final InvocationTargetException ex) {
270 throw new RuntimeException(ex);
277 if (Thread.interrupted()) {
278 throw new InterruptedException(
"current thread was interrupted");