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  /**
13   * Copyright (c) Ontos AG (http://www.ontosearch.com).
14   * This class is part of JAPE Debugger component for
15   * GATE (Copyright (c) "The University of Sheffield" see http://gate.ac.uk/) <br>
16   * @author Vladimir Karasev, Andrey Shafirin, Oleg Mishenko
17   */
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          //temporarily commented by Oleg
64          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                  // translate Annotation to String
90                  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                 //System.out.println("clicked = " + line);
107             }
108         }
109         );
110         //jtLHS.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
111         //panel.add(jlbRuleName, BorderLayout.NORTH);
112         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