KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > antlr > works > stats > StatisticsAW


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

31
32 package org.antlr.works.stats;
33
34 import org.antlr.xjlib.appkit.app.XJApplication;
35 import org.antlr.works.prefs.AWPrefs;
36
37 import java.util.*;
38
39 public class StatisticsAW {
40
41     protected static StatisticsAW shared = new StatisticsAW();
42
43     /* Last change: version 1.0ea9 */
44     protected static final String JavaDoc PREF_KEY = "CURSOR_BLINK_2";
45     protected static final String JavaDoc PREF_KEY_FROM_DATE = "DATE_BLINK_2";
46
47     /* Menu File */
48     public static final int EVENT_EXPORT_AS_BITMAP = 0;
49     public static final int EVENT_EXPORT_AS_EPS = 1;
50     public static final int EVENT_EXPORT_AS_DOT = 2;
51     public static final int EVENT_EXPORT_EVENTS_AS_TEXT = 3;
52
53     /* Menu Find */
54     public static final int EVENT_FIND_DIALOG = 10;
55     public static final int EVENT_FIND_NEXT = 11;
56     public static final int EVENT_FIND_PREVIOUS = 12;
57     public static final int EVENT_FIND_TEXT_AT_CARET = 13;
58     public static final int EVENT_FIND_USAGES = 14;
59
60     /* Menu GoTo */
61     public static final int EVENT_GOTO_RULE = 20;
62     public static final int EVENT_GOTO_DECLARATION = 21;
63     public static final int EVENT_GOTO_LINE = 22;
64     public static final int EVENT_GOTO_CHAR = 23;
65     public static final int EVENT_GOTO_BACK = 24;
66     public static final int EVENT_GOTO_FORWARD = 25;
67     public static final int EVENT_GOTO_PREV_BRKPT = 26;
68     public static final int EVENT_GOTO_NEXT_BRKPT = 27;
69
70     /* Menu Grammar */
71     public static final int EVENT_SHOW_TOKENS_SD = 40;
72     public static final int EVENT_SHOW_TOKENS_DFA = 41;
73     public static final int EVENT_SHOW_DECISION_DFA = 42;
74     public static final int EVENT_SHOW_RULE_DEPENDENCY = 44;
75     public static final int EVENT_INSERT_RULE_TEMPLATE = 45;
76     public static final int EVENT_RULE_GROUP = 45;
77     public static final int EVENT_RULE_UNGROUP = 46;
78     public static final int EVENT_CHECK_GRAMMAR = 47;
79
80     /* Menu Refactor */
81     public static final int EVENT_RENAME = 60;
82     public static final int EVENT_REPLACE_LITERALS = 61;
83     public static final int EVENT_REMOVE_LEFT_RECURSION = 62;
84     public static final int EVENT_REMOVE_ALL_LEFT_RECURSION = 63;
85
86     public static final int EVENT_EXTRACT_RULE = 64;
87     public static final int EVENT_INLINE_RULE = 65;
88
89     public static final int EVENT_CONVERT_LITERALS_TO_SINGLE = 66;
90     public static final int EVENT_CONVERT_LITERALS_TO_DOUBLE = 67;
91     public static final int EVENT_CONVERT_LITERALS_TO_CSTYLE = 68;
92
93     /* Menu Generate */
94     public static final int EVENT_GENERATE_CODE = 80;
95     public static final int EVENT_SHOW_PARSER_GENERATED_CODE = 81;
96     public static final int EVENT_SHOW_LEXER_GENERATED_CODE = 82;
97     public static final int EVENT_SHOW_RULE_GENERATED_CODE = 83;
98
99     /* Menu Run */
100     public static final int EVENT_INTERPRETER_MENU = 90;
101     public static final int EVENT_INTERPRETER_BUTTON = 91;
102
103     public static final int EVENT_LOCAL_DEBUGGER = 92;
104     public static final int EVENT_LOCAL_DEBUGGER_BUILD = 93;
105     public static final int EVENT_REMOTE_DEBUGGER = 94;
106
107     /* Menu SCM */
108     public static final int EVENT_SCM_EDIT = 100;
109     public static final int EVENT_SCM_ADD = 101;
110     public static final int EVENT_SCM_REVERT = 102;
111     public static final int EVENT_SCM_DELETE = 103;
112     public static final int EVENT_SCM_SUBMIT = 104;
113     public static final int EVENT_SCM_SYNC = 105;
114
115     /* Toolbar toggle */
116     public static final int EVENT_TOGGLE_SYNTAX_COLORING = 120;
117     public static final int EVENT_TOGGLE_SYNTAX_DIAGRAM = 121;
118     public static final int EVENT_TOGGLE_IDEAS = 122;
119     public static final int EVENT_TOGGLE_RULE_SORT = 123;
120
121     /* Misc */
122     public static final int EVENT_SHOW_PREFERENCES = 130;
123     public static final int EVENT_SHOW_HELP = 131;
124     public static final int EVENT_CHECK_FOR_UPDATES = 132;
125     public static final int EVENT_SHOW_AUTO_COMPLETION_MENU = 133;
126     public static final int EVENT_DROP_RULE = 134;
127     public static final int EVENT_TOGGLE_SD_NFA = 135;
128
129     /* Debugger event */
130     public static final int EVENT_DEBUGGER_STOP = 140;
131     public static final int EVENT_DEBUGGER_STEP_BACK = 141;
132     public static final int EVENT_DEBUGGER_STEP_FORWARD = 142;
133     public static final int EVENT_DEBUGGER_STEP_OVER = 143;
134     public static final int EVENT_DEBUGGER_FAST_FORWARD = 144;
135     public static final int EVENT_DEBUGGER_GOTO_START = 145;
136     public static final int EVENT_DEBUGGER_GOTO_END = 146;
137     public static final int EVENT_DEBUGGER_TOGGLE_INPUT_TOKENS = 147;
138
139     static final Map<Integer JavaDoc,String JavaDoc> eventNames = new HashMap<Integer JavaDoc, String JavaDoc>();
140     static final List<Integer JavaDoc> eventList = new ArrayList<Integer JavaDoc>();
141
142     static void register(int eventID, String JavaDoc eventName) {
143         eventNames.put(eventID, eventName);
144         eventList.add(eventID);
145     }
146
147     static {
148         register(EVENT_EXPORT_AS_BITMAP, "Export as bitmap");
149         register(EVENT_EXPORT_AS_EPS, "Export as EPS");
150         register(EVENT_EXPORT_AS_DOT, "Export as DOT");
151         register(EVENT_EXPORT_EVENTS_AS_TEXT, "Export events as text");
152
153         register(EVENT_FIND_DIALOG, "Find dialog");
154         register(EVENT_FIND_NEXT, "Find next");
155         register(EVENT_FIND_PREVIOUS, "Find previous");
156         register(EVENT_FIND_TEXT_AT_CARET, "Find text at caret");
157         register(EVENT_FIND_USAGES, "Find usages");
158
159         register(EVENT_GOTO_RULE, "Goto rule");
160         register(EVENT_GOTO_DECLARATION, "Goto declaration");
161         register(EVENT_GOTO_LINE, "Goto line");
162         register(EVENT_GOTO_CHAR, "Goto character");
163         register(EVENT_GOTO_BACK, "Goto back");
164         register(EVENT_GOTO_FORWARD, "Goto forward");
165         register(EVENT_GOTO_PREV_BRKPT, "Goto previous breakpoint");
166         register(EVENT_GOTO_NEXT_BRKPT, "Goto next breakpoint");
167
168         register(EVENT_SHOW_TOKENS_SD, "Show tokens syntax diagram");
169         register(EVENT_SHOW_TOKENS_DFA, "Show tokens DFA");
170         register(EVENT_SHOW_DECISION_DFA, "Show decision DFA");
171         register(EVENT_SHOW_RULE_DEPENDENCY, "Show rule dependency");
172         register(EVENT_INSERT_RULE_TEMPLATE, "Insert rule from template");
173         register(EVENT_RULE_GROUP, "Group rule");
174         register(EVENT_RULE_UNGROUP, "Ungroup rule");
175         register(EVENT_CHECK_GRAMMAR, "Check grammar");
176
177         register(EVENT_RENAME, "Rename");
178         register(EVENT_REPLACE_LITERALS, "Replace literals");
179         register(EVENT_REMOVE_LEFT_RECURSION, "Remove left recursion");
180         register(EVENT_REMOVE_ALL_LEFT_RECURSION, "Remove all left recursion");
181         register(EVENT_EXTRACT_RULE, "Extract rule");
182         register(EVENT_INLINE_RULE, "Inline rule");
183         register(EVENT_CONVERT_LITERALS_TO_SINGLE, "Convert literals to single quote");
184         register(EVENT_CONVERT_LITERALS_TO_DOUBLE, "Convert literals to double quote");
185         register(EVENT_CONVERT_LITERALS_TO_CSTYLE, "Convert literals to C-style quote");
186
187         register(EVENT_GENERATE_CODE, "Generate code");
188         register(EVENT_SHOW_PARSER_GENERATED_CODE, "Show parser code");
189         register(EVENT_SHOW_LEXER_GENERATED_CODE, "Show lexer code");
190         register(EVENT_SHOW_RULE_GENERATED_CODE, "Show rule code");
191
192         register(EVENT_INTERPRETER_MENU, "Interpreter (menu)");
193         register(EVENT_INTERPRETER_BUTTON, "Interpreter (button)");
194
195         register(EVENT_LOCAL_DEBUGGER, "Debug");
196         register(EVENT_LOCAL_DEBUGGER_BUILD, "Build and debug");
197         register(EVENT_REMOTE_DEBUGGER, "Remote debug");
198
199         register(EVENT_SCM_EDIT, "SCM edit");
200         register(EVENT_SCM_ADD, "SCM add");
201         register(EVENT_SCM_REVERT, "SCM revert");
202         register(EVENT_SCM_DELETE, "SCM delete");
203         register(EVENT_SCM_SUBMIT, "SCM submit");
204         register(EVENT_SCM_SYNC, "SCM sync");
205
206         register(EVENT_TOGGLE_SYNTAX_COLORING, "Toggle syntax coloring");
207         register(EVENT_TOGGLE_SYNTAX_DIAGRAM, "Toggle syntax diagram");
208         register(EVENT_TOGGLE_IDEAS, "Toggle ideas");
209         register(EVENT_TOGGLE_RULE_SORT, "Toggle rule sort");
210
211         register(EVENT_SHOW_PREFERENCES, "Show preferences");
212         register(EVENT_SHOW_HELP, "Show help");
213         register(EVENT_CHECK_FOR_UPDATES, "Check for updates");
214         register(EVENT_SHOW_AUTO_COMPLETION_MENU, "Show auto-completion");
215         register(EVENT_DROP_RULE, "Drop rule (tree)");
216         register(EVENT_TOGGLE_SD_NFA, "Toggle syntax diagram/NFA");
217
218         register(EVENT_DEBUGGER_STOP, "Debugger stop");
219         register(EVENT_DEBUGGER_STEP_BACK, "Debugger step back");
220         register(EVENT_DEBUGGER_STEP_FORWARD, "Debugger step forward");
221         register(EVENT_DEBUGGER_STEP_OVER, "Debugger step over");
222         register(EVENT_DEBUGGER_FAST_FORWARD, "Debugger fast forward");
223         register(EVENT_DEBUGGER_GOTO_START, "Debugger goto start");
224         register(EVENT_DEBUGGER_GOTO_END, "Debugger goto end");
225         register(EVENT_DEBUGGER_TOGGLE_INPUT_TOKENS, "Debugger toggle input tokens");
226     }
227
228     protected Map<Integer JavaDoc,Integer JavaDoc> events = null;
229
230     public static StatisticsAW shared() {
231         return shared;
232     }
233
234     public void reset() {
235         if(events != null)
236             events.clear();
237         initDate();
238     }
239
240     public void initDate() {
241         setFromDate(new Date().toString());
242     }
243
244     public void setFromDate(String JavaDoc date) {
245         AWPrefs.getPreferences().setString(PREF_KEY_FROM_DATE, date);
246     }
247
248     public String JavaDoc getFromDate() {
249         return AWPrefs.getPreferences().getString(PREF_KEY_FROM_DATE, null);
250     }
251
252     public void close() {
253         AWPrefs.getPreferences().setObject(PREF_KEY, events);
254     }
255
256     public void recordEvent(int event) {
257         setCount(event, getCount(event)+1);
258     }
259
260     protected void setCount(int event, int count) {
261         getEvents().put(event, count);
262     }
263
264     protected int getCount(int event) {
265         Integer JavaDoc count = getEvents().get(event);
266         if(count == null)
267             return 0;
268         else
269             return count;
270     }
271
272     protected synchronized Map<Integer JavaDoc,Integer JavaDoc> getEvents() {
273         if(events == null) {
274             try {
275                 events = (Map<Integer JavaDoc,Integer JavaDoc>)AWPrefs.getPreferences().getObject(PREF_KEY, null);
276             } catch(Exception JavaDoc e) {
277                 events = null;
278                 System.err.println("Statistics: "+e);
279             }
280             if(events == null) {
281                 events = new HashMap<Integer JavaDoc, Integer JavaDoc>();
282                 initDate();
283             }
284         }
285         return events;
286     }
287
288     public String JavaDoc getRawString() {
289         StringBuffer JavaDoc s = new StringBuffer JavaDoc();
290         s.append(XJApplication.getAppVersionShort());
291         s.append('\t');
292         for (Iterator<Integer JavaDoc> iterator = eventList.iterator(); iterator.hasNext();) {
293             Integer JavaDoc key = iterator.next();
294             s.append(getCount(key));
295             if(iterator.hasNext())
296                 s.append('\t');
297         }
298         return s.toString();
299     }
300
301     public String JavaDoc getReadableString() {
302         StringBuffer JavaDoc s = new StringBuffer JavaDoc();
303         s.append("Version: ");
304         s.append(XJApplication.getAppVersionShort());
305         s.append('\n');
306
307         for (Iterator<Integer JavaDoc> iterator = eventList.iterator(); iterator.hasNext();) {
308             Integer JavaDoc key = iterator.next();
309
310             s.append(eventNames.get(key));
311             s.append(": ");
312             s.append(getCount(key));
313
314             if(iterator.hasNext())
315                 s.append('\n');
316         }
317
318         return s.toString();
319     }
320 }
321
Popular Tags