1 package debugger.gui.debugging;
2
3 import debugger.resources.ResourcesFactory;
4 import gate.Annotation;
5
6 import javax.swing.*;
7 import java.awt.*;
8 import java.awt.event.MouseEvent;
9 import java.awt.event.MouseMotionAdapter;
10 import java.util.Iterator;
11
12
18
19 public class RulePanel extends JPanel {
20 private JPanel LHS;
21 private JPanel RHS;
22
23 private JLabel jlbRuleName;
24 private debugger.gui.debugging.debugviews.LHSModel lhsModel;
25 private debugger.gui.debugging.debugviews.RHSModel rhsModel;
26 private JTable jtLHS;
27 private JTable jtRHS;
28
29 public RulePanel() {
30 super(new BorderLayout());
31 JPanel inner = new JPanel(new GridBagLayout());
32 GridBagConstraints c = new GridBagConstraints();
33
34 jlbRuleName = new JLabel("Undefined rule");
35 this.add(jlbRuleName, BorderLayout.NORTH);
36
37 c.gridx = 0;
38 c.gridy = 0;
39 c.gridwidth = 1;
40 c.gridheight = 1;
41 c.weightx = 1;
42 c.weighty = 1;
43 c.insets = new Insets(4, 4, 4, 4);
44 c.fill = GridBagConstraints.BOTH;
45 LHS = createLHSView();
46 JScrollPane lhsScrollPane = new JScrollPane(LHS);
47 lhsScrollPane.getVerticalScrollBar().setUnitIncrement(30);
48 lhsScrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Left Hand Side"));
49 inner.add(lhsScrollPane, c);
50
51 c.gridx = 0;
52 c.gridy = 1;
53 c.gridwidth = 1;
54 c.gridheight = 1;
55 c.weightx = 1;
56 c.weighty = 1;
57 c.insets = new Insets(4, 4, 4, 4);
58 c.fill = GridBagConstraints.BOTH;
59 RHS = createRHSView();
60 JScrollPane rhsScrollPane = new JScrollPane(RHS);
61 rhsScrollPane.getVerticalScrollBar().setUnitIncrement(30);
62 rhsScrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Created Annotations"));
63 inner.add(rhsScrollPane, c);
65
66 this.add(inner, BorderLayout.CENTER);
67 }
68
69 public void ruleSelected() {
70 if (null != ResourcesFactory.getCurrentRuleModel()) {
71 this.jlbRuleName.setText(ResourcesFactory.getCurrentRuleModel().getName());
72 jtLHS.updateUI();
73 jtRHS.updateUI();
74 } else {
75 return;
76 }
77 }
78
79 public JPanel createLHSView() {
80 JPanel panel = new JPanel(new BorderLayout());
81 lhsModel = new debugger.gui.debugging.debugviews.LHSModel();
82 jtLHS = new JTable(lhsModel);
83 jtLHS.addMouseMotionListener(new MouseMotionAdapter() {
84 public void mouseMoved(MouseEvent e) {
85
86 String preparedAnnotation = "";
87 int line = jtLHS.rowAtPoint(e.getPoint());
88 Annotation ann = (Annotation) ResourcesFactory.getCurrentRuleModel().getMatchedAnnotations().get(line);
89 if (null != ann) {
91 preparedAnnotation += "{";
92 String annType = ann.getType();
93 gate.FeatureMap fm = ann.getFeatures();
94 Iterator iter = fm.keySet().iterator();
95 if (!iter.hasNext())
96 preparedAnnotation += ann.getType() + ", ";
97 while (iter.hasNext()) {
98 String key = (String) iter.next();
99 preparedAnnotation += annType + "." + key + "=" + fm.get(key) + ", ";
100 }
101 preparedAnnotation = preparedAnnotation.substring(0, preparedAnnotation.length() - 2);
102 preparedAnnotation += "}";
103 jtLHS.setToolTipText(preparedAnnotation);
104 } else
105 jtLHS.setToolTipText("");
106 }
108 }
109 );
110 panel.add(jtLHS.getTableHeader(), BorderLayout.NORTH);
113 panel.add(jtLHS, BorderLayout.SOUTH);
114 return panel;
115 }
116
117 public JPanel createRHSView() {
118 JPanel panel = new JPanel(new BorderLayout());
119 rhsModel = new debugger.gui.debugging.debugviews.RHSModel();
120 jtRHS = new JTable(rhsModel);
121 jtRHS.getColumnModel().getColumn(0).setPreferredWidth(40);
122 jtRHS.getColumnModel().getColumn(1).setPreferredWidth(80);
123 jtRHS.getColumnModel().getColumn(2).setPreferredWidth(100);
124 panel.add(jtRHS.getTableHeader(), BorderLayout.NORTH);
125 panel.add(jtRHS, BorderLayout.CENTER);
126 return panel;
127 }
128 }
129