KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > antlr > works > debugger > panels > DBEventsPanel


1 package org.antlr.works.debugger.panels;
2
3 import org.antlr.works.debugger.Debugger;
4 import org.antlr.works.debugger.events.DBEvent;
5 import org.antlr.works.debugger.tivo.DBPlayerContextInfo;
6 import org.antlr.works.swing.DetachablePanel;
7 import org.antlr.xjlib.appkit.swing.XJTable;
8 import org.antlr.xjlib.appkit.swing.XJTableView;
9
10 import javax.swing.*;
11 import javax.swing.table.AbstractTableModel JavaDoc;
12 import java.awt.*;
13 import java.util.ArrayList JavaDoc;
14 import java.util.List JavaDoc;
15 /*
16
17 [The "BSD licence"]
18 Copyright (c) 2005-2006 Jean Bovet
19 All rights reserved.
20
21 Redistribution and use in source and binary forms, with or without
22 modification, are permitted provided that the following conditions
23 are met:
24
25 1. Redistributions of source code must retain the above copyright
26 notice, this list of conditions and the following disclaimer.
27 2. Redistributions in binary form must reproduce the above copyright
28 notice, this list of conditions and the following disclaimer in the
29 documentation and/or other materials provided with the distribution.
30 3. The name of the author may not be used to endorse or promote products
31 derived from this software without specific prior written permission.
32
33 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
34 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
35 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
36 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
37 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
38 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
39 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
40 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
41 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
42 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
43
44 */

45
46 public class DBEventsPanel extends DetachablePanel {
47
48     public static final int INFO_COLUMN_COUNT = 0;
49     public static final int INFO_COLUMN_EVENT = 1;
50     public static final int INFO_COLUMN_SUBRULE = 2;
51     public static final int INFO_COLUMN_DECISION = 3;
52     public static final int INFO_COLUMN_MARK = 4;
53     public static final int INFO_COLUMN_BACKTRACK = 5;
54
55     protected XJTableView infoTableView;
56
57     protected EventTableDataModel eventTableDataModel;
58
59     public DBEventsPanel(Debugger debugger) {
60         super("Events", debugger);
61
62         eventTableDataModel = new EventTableDataModel();
63
64         infoTableView = new XJTableView();
65         infoTableView.setFocusable(true);
66         setInfoTableModel(infoTableView.getTable(), eventTableDataModel);
67
68         mainPanel.add(infoTableView, BorderLayout.CENTER);
69
70         infoTableView.autoresizeColumns();
71     }
72
73     public void setInfoTableModel(XJTable table, AbstractTableModel JavaDoc model) {
74         table.setModel(model);
75         selectLastInfoTableItem();
76     }
77
78     public void selectLastInfoTableItem() {
79         infoTableView.scrollToLastRow();
80     }
81
82     public int getNumberOfEvents() {
83         return eventTableDataModel.getRowCount();
84     }
85     
86     public void clear() {
87         eventTableDataModel.clear();
88     }
89
90     public void updateOnBreakEvent() {
91         eventTableDataModel.update();
92
93         SwingUtilities.invokeLater(new Runnable JavaDoc() {
94             public void run() {
95                 selectLastInfoTableItem();
96             }
97         });
98     }
99
100     public void addEvent(DBEvent event, DBPlayerContextInfo info) {
101         eventTableDataModel.add(event, info);
102     }
103
104     public String JavaDoc getEventsAsString() {
105         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
106         sb.append(eventTableDataModel.getHeadersAsString());
107         sb.append("\n");
108
109         List JavaDoc<EventTableDataModel.EventInfo> events = eventTableDataModel.events;
110         for(int i=0; i<events.size(); i++) {
111             sb.append(i);
112             sb.append(":\t");
113             sb.append(events.get(i).toString());
114             sb.append("\n");
115         }
116         return sb.toString();
117     }
118
119     public class EventTableDataModel extends AbstractTableModel JavaDoc {
120
121         protected List JavaDoc<EventInfo> events = new ArrayList JavaDoc<EventInfo>();
122
123         public void add(DBEvent event, DBPlayerContextInfo info) {
124             events.add(new EventInfo(event, info));
125         }
126
127         public void clear() {
128             events.clear();
129             fireTableDataChanged();
130             infoTableView.autoresizeColumns();
131         }
132
133         public void update() {
134             fireTableDataChanged();
135             infoTableView.autoresizeColumns();
136         }
137
138         public int getRowCount() {
139             return events.size();
140         }
141
142         public int getColumnCount() {
143             return 6;
144         }
145
146         public String JavaDoc getColumnName(int column) {
147             switch(column) {
148                 case INFO_COLUMN_COUNT: return "#";
149                 case INFO_COLUMN_EVENT: return "Event";
150                 case INFO_COLUMN_SUBRULE: return "Subrule";
151                 case INFO_COLUMN_DECISION: return "Decision";
152                 case INFO_COLUMN_MARK: return "Mark";
153                 case INFO_COLUMN_BACKTRACK: return "Backtrack";
154             }
155             return super.getColumnName(column);
156         }
157
158         public Class JavaDoc getColumnClass(int columnIndex) {
159             switch(columnIndex) {
160                 case INFO_COLUMN_COUNT: return String JavaDoc.class;
161                 case INFO_COLUMN_EVENT: return String JavaDoc.class;
162                 case INFO_COLUMN_SUBRULE: return String JavaDoc.class;
163                 case INFO_COLUMN_DECISION: return String JavaDoc.class;
164                 case INFO_COLUMN_MARK: return String JavaDoc.class;
165                 case INFO_COLUMN_BACKTRACK: return String JavaDoc.class;
166             }
167             return super.getColumnClass(columnIndex);
168         }
169
170         public Object JavaDoc getValueAt(int rowIndex, int columnIndex) {
171             EventInfo info = events.get(rowIndex);
172             switch(columnIndex) {
173                 case INFO_COLUMN_COUNT: return String.valueOf(rowIndex);
174                 case INFO_COLUMN_EVENT: return info.event;
175                 case INFO_COLUMN_SUBRULE: return info.getSubrule();
176                 case INFO_COLUMN_DECISION: return info.getDecision();
177                 case INFO_COLUMN_MARK: return info.getMark();
178                 case INFO_COLUMN_BACKTRACK: return info.getBacktrack();
179             }
180             return null;
181         }
182
183         public String JavaDoc getHeadersAsString() {
184             return "#\tEvent\tSubrule\tDecision\tMark\tBacktrack";
185         }
186
187         public class EventInfo {
188
189             public DBEvent event;
190             public int subrule;
191             public int decision;
192             public int mark;
193             public int backtrack;
194
195             public EventInfo(DBEvent event, DBPlayerContextInfo info) {
196                 this.event = event;
197                 this.subrule = info.getSubrule();
198                 this.decision = info.getDecision();
199                 this.mark = info.getMark();
200                 this.backtrack = info.getBacktrack();
201             }
202
203             public Object JavaDoc getSubrule() {
204                 return subrule==-1?null:String.valueOf(subrule);
205             }
206
207             public Object JavaDoc getDecision() {
208                 return decision==-1?null:String.valueOf(decision);
209             }
210
211             public Object JavaDoc getMark() {
212                 return mark==-1?null:String.valueOf(mark);
213             }
214
215             public Object JavaDoc getBacktrack() {
216                 return backtrack==-1?null:String.valueOf(backtrack);
217             }
218
219             public String JavaDoc getTextForExport(int value) {
220                 if(value == -1)
221                     return "-";
222                 else
223                     return String.valueOf(value);
224             }
225
226             public String JavaDoc toString() {
227                 StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
228                 sb.append(event.toString());
229                 sb.append("\t");
230                 sb.append(getTextForExport(subrule));
231                 sb.append("\t");
232                 sb.append(getTextForExport(decision));
233                 sb.append("\t");
234                 sb.append(getTextForExport(mark));
235                 sb.append("\t");
236                 sb.append(getTextForExport(backtrack));
237                 return sb.toString();
238             }
239         }
240     }
241
242 }
243
Popular Tags