1 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 44 protected static final String PREF_KEY = "CURSOR_BLINK_2"; 45 protected static final String PREF_KEY_FROM_DATE = "DATE_BLINK_2"; 46 47 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 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 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 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 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 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 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 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 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 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 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 ,String > eventNames = new HashMap<Integer , String >(); 140 static final List<Integer > eventList = new ArrayList<Integer >(); 141 142 static void register(int eventID, String 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 ,Integer > 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 date) { 245 AWPrefs.getPreferences().setString(PREF_KEY_FROM_DATE, date); 246 } 247 248 public String 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 count = getEvents().get(event); 266 if(count == null) 267 return 0; 268 else 269 return count; 270 } 271 272 protected synchronized Map<Integer ,Integer > getEvents() { 273 if(events == null) { 274 try { 275 events = (Map<Integer ,Integer >)AWPrefs.getPreferences().getObject(PREF_KEY, null); 276 } catch(Exception e) { 277 events = null; 278 System.err.println("Statistics: "+e); 279 } 280 if(events == null) { 281 events = new HashMap<Integer , Integer >(); 282 initDate(); 283 } 284 } 285 return events; 286 } 287 288 public String getRawString() { 289 StringBuffer s = new StringBuffer (); 290 s.append(XJApplication.getAppVersionShort()); 291 s.append('\t'); 292 for (Iterator<Integer > iterator = eventList.iterator(); iterator.hasNext();) { 293 Integer 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 getReadableString() { 302 StringBuffer s = new StringBuffer (); 303 s.append("Version: "); 304 s.append(XJApplication.getAppVersionShort()); 305 s.append('\n'); 306 307 for (Iterator<Integer > iterator = eventList.iterator(); iterator.hasNext();) { 308 Integer 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 |