KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > armedbear > j > CommandTable


1 /*
2  * CommandTable.java
3  *
4  * Copyright (C) 1998-2004 Peter Graves
5  * $Id: CommandTable.java,v 1.53 2004/09/19 18:38:58 piso Exp $
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */

21
22 package org.armedbear.j;
23
24 import java.util.ArrayList JavaDoc;
25 import java.util.HashMap JavaDoc;
26 import java.util.Iterator JavaDoc;
27 import java.util.List JavaDoc;
28
29 public class CommandTable
30 {
31     // The default load factor is 0.75, so an initial capacity of 600 will
32
// accommodate 450 entries without rehashing.
33
private static final int INITIAL_CAPACITY = 600;
34
35     private static HashMap JavaDoc map;
36
37     public static final Command getCommand(String JavaDoc name)
38     {
39         if (name == null)
40             return null;
41         if (map == null)
42             init();
43         return (Command) map.get(name.toLowerCase());
44     }
45
46     private static synchronized void init()
47     {
48         if (map == null) {
49             map = new HashMap JavaDoc(INITIAL_CAPACITY);
50
51             // Commands implemented in Editor.java.
52
addCommand("backspace");
53             addCommand("bob");
54             addCommand("bol");
55             addCommand("bottom");
56             addCommand("cancelBackgroundProcess");
57             addCommand("closeAll");
58             addCommand("closeOthers");
59             addCommand("closeParen");
60             addCommand("commentRegion");
61             addCommand("copyAppend");
62             addCommand("copyPath");
63             addCommand("copyRegion");
64             addCommand("cppFindMatch");
65             addCommand("cycleIndentSize");
66             addCommand("cyclePaste");
67             addCommand("cycleTabWidth");
68             addCommand("defaultMode");
69             addCommand("delete");
70             addCommand("deleteWordLeft");
71             addCommand("deleteWordRight");
72             addCommand("dirBrowseFile");
73             addCommand("dirCopyFile");
74             addCommand("dirDeleteFiles");
75             addCommand("dirDoShellCommand");
76             addCommand("dirGetFile");
77             addCommand("dirHome");
78             addCommand("dirHomeDir");
79             addCommand("dirMoveFile");
80             addCommand("dirRescan");
81             addCommand("dirTagFile");
82             addCommand("dirUpDir");
83             addCommand("doShellCommandOnRegion");
84             addCommand("down");
85             addCommand("dropBookmark");
86             addCommand("dropTemporaryMarker");
87             addCommand("electricCloseAngleBracket");
88             addCommand("electricCloseBrace");
89             addCommand("electricColon");
90             addCommand("electricOpenBrace");
91             addCommand("electricPound");
92             addCommand("electricSemi");
93             addCommand("electricStar");
94             addCommand("end");
95             addCommand("eob");
96             addCommand("eol");
97             addCommand("escape");
98             addCommand("executeCommand");
99             addCommand("findFirstOccurrence");
100             addCommand("findMatchingChar");
101             addCommand("findNext");
102             addCommand("findNextWord");
103             addCommand("findPrev");
104             addCommand("findPrevWord");
105             addCommand("fold");
106             addCommand("foldMethods");
107             addCommand("foldRegion");
108             addCommand("gotoBookmark");
109             addCommand("gotoTemporaryMarker");
110             addCommand("help");
111             addCommand("home");
112             addCommand("httpDeleteCookies");
113             addCommand("incrementalFind");
114             addCommand("indentLine");
115             addCommand("indentLineOrRegion");
116             addCommand("indentRegion");
117             addCommand("insertBraces");
118             addCommand("insertByte");
119             addCommand("insertChar");
120             addCommand("insertKeyText");
121             addCommand("insertParentheses");
122             addCommand("insertString");
123             addCommand("insertTab");
124             addCommand("jmips");
125             addCommand("killAppend");
126             addCommand("killBuffer");
127             addCommand("killFrame");
128             addCommand("killLine");
129             addCommand("killRegion");
130             addCommand("killWordLeft");
131             addCommand("killWordRight");
132             addCommand("left");
133             addCommand("mode");
134             addCommand("movePastCloseAndReindent");
135             addCommand("newBuffer");
136             addCommand("newFrame");
137             addCommand("newline");
138             addCommand("newlineAndIndent");
139             addCommand("nextBuffer");
140             addCommand("nextFrame");
141             addCommand("offset");
142             addCommand("openFile");
143             addCommand("openFileInOtherWindow");
144             addCommand("otherWindow");
145             addCommand("pageDown");
146             addCommand("pageDownOtherWindow");
147             addCommand("pageUp");
148             addCommand("pageUpOtherWindow");
149             addCommand("paste");
150             addCommand("pasteColumn");
151             addCommand("popPosition");
152             addCommand("prevBuffer");
153             addCommand("pushPosition");
154             addCommand("quit");
155             addCommand("redo");
156             addCommand("resetDisplay");
157             addCommand("revertBuffer");
158             addCommand("right");
159             addCommand("save");
160             addCommand("saveAll");
161             addCommand("saveAllExit");
162             addCommand("saveAs");
163             addCommand("saveCopy");
164             addCommand("selectAll");
165             addCommand("selectBob");
166             addCommand("selectDown");
167             addCommand("selectEnd");
168             addCommand("selectEob");
169             addCommand("selectHome");
170             addCommand("selectLeft");
171             addCommand("selectPageDown");
172             addCommand("selectPageUp");
173             addCommand("selectRight");
174             addCommand("selectSyntax");
175             addCommand("selectUp");
176             addCommand("selectWord");
177             addCommand("selectWordLeft");
178             addCommand("selectWordRight");
179             addCommand("setEncoding");
180             addCommand("sidebarListBuffers");
181             addCommand("sidebarListTags");
182             addCommand("slideIn");
183             addCommand("slideOut");
184             addCommand("splitWindow");
185             addCommand("stamp");
186             addCommand("tab");
187             addCommand("textMode");
188             addCommand("toCenter");
189             addCommand("toTop");
190             addCommand("toggleSidebar");
191             addCommand("top");
192             addCommand("uncommentRegion");
193             addCommand("undo");
194             addCommand("unfold");
195             addCommand("unfoldAll");
196             addCommand("unsplitWindow");
197             addCommand("unwrapParagraph");
198             addCommand("up");
199             addCommand("visibleTabs");
200             addCommand("whatChar");
201             addCommand("windowDown");
202             addCommand("windowUp");
203             addCommand("wordLeft");
204             addCommand("wordRight");
205             addCommand("wrapParagraph");
206             addCommand("wrapParagraphsInRegion");
207             addCommand("wrapRegion");
208
209             // Commands implemented in other classes.
210
addCommand("about", "AboutDialog");
211             addCommand("alias", "AliasDialog");
212             addCommand("alignStrings", "AlignStrings");
213             addCommand("apropos", "Help");
214             addCommand("archiveOpenFile", "ArchiveMode");
215             addCommand("backwardSexp", "LispMode");
216             addCommand("backwardUpList", "LispMode");
217             addCommand("binaryMode", "BinaryMode");
218             addCommand("browseFileAtDot", "BrowseFile");
219             addCommand("centerTag", "TagCommands");
220             addCommand("changes", "ChangeMarks");
221             addCommand("checkPath", "CheckPath");
222             addCommand("chmod", "Directory");
223             addCommand("clearRegister", "Registers");
224             addCommand("compile", "CompilationCommands");
225             addCommand("compileAndLoadLispFile", "LispMode");
226             addCommand("compileLispFile", "LispMode");
227             addCommand("copyLink", "WebBuffer");
228             addCommand("copyXPath", "XmlMode");
229             addCommand("cvs", "CVS", "cvs");
230             addCommand("cvsAdd", "CVS", "add");
231             addCommand("cvsCommit", "CVS", "commit");
232             addCommand("cvsDiff", "CVS", "diff");
233             addCommand("cvsDiffDir", "CVS", "diffDir");
234             addCommand("cvsLog", "CVS", "log");
235             addCommand("decodeRegion", "RegionCommands");
236             addCommand("defaultKeyMaps", "KeyMap");
237             addCommand("describeKey", "DescribeKeyDialog");
238             addCommand("detabRegion", "RegionCommands");
239             addCommand("diff", "DiffMode");
240             addCommand("diffGotoFile", "DiffMode", "gotoFile");
241             addCommand("dir", "Directory");
242             addCommand("dirBack", "Directory");
243             addCommand("dirCycleSortBy", "Directory");
244             addCommand("dirDoShellCommand", "Directory");
245             addCommand("dirForward", "Directory");
246             addCommand("dirLimit", "Directory");
247             addCommand("dirOpenFile", "Directory");
248             addCommand("dirOpenFileAndKillDirectory", "Directory");
249             addCommand("dirUnlimit", "Directory");
250             addCommand("doShellCommandOnRegion", "RegionCommands");
251             addCommand("downList", "LispMode");
252             addCommand("editRegister", "Registers");
253             addCommand("entabRegion", "RegionCommands");
254             addCommand("evalDefunLisp", "LispMode");
255             addCommand("compileDefunLisp", "LispMode");
256             addCommand("evalRegionLisp", "LispMode");
257             addCommand("expand", "Expansion");
258             addCommand("find", "FindDialog");
259             addCommand("findInFiles", "FindInFiles");
260             addCommand("findOccurrenceAtDot", "ListOccurrences");
261             addCommand("findOccurrenceAtDotAndKillList", "ListOccurrences");
262             addCommand("findTag", "TagCommands");
263             addCommand("findTagAtDot", "TagCommands");
264             addCommand("findTagAtDotOtherWindow", "TagCommands");
265             addCommand("finish", "CheckinBuffer");
266             addCommand("followContext", "FollowContextTask");
267             addCommand("forwardSexp", "LispMode");
268             addCommand("google", "WebMode");
269             addCommand("gotoFile", "GotoFile");
270             addCommand("help", "Help");
271             addCommand("htmlBold", "HtmlMode");
272             addCommand("htmlElectricEquals", "HtmlMode");
273             addCommand("htmlEndTag", "HtmlMode");
274             addCommand("htmlFindMatch", "HtmlMode");
275             addCommand("htmlInsertMatchingEndTag", "HtmlMode");
276             addCommand("htmlInsertTag", "HtmlMode");
277             addCommand("htmlStartTag", "HtmlMode");
278             addCommand("httpShowHeaders", "HttpLoadProcess");
279             addCommand("hyperspec", "LispMode");
280             addCommand("iList", "IList");
281             addCommand("imageCycleBackground", "ImageMode");
282             addCommand("imageFit", "ImageMode");
283             addCommand("imageRestore", "ImageMode");
284             addCommand("imageZoomIn", "ImageMode");
285             addCommand("imageZoomOut", "ImageMode");
286             addCommand("insertRegister", "Registers");
287             addCommand("jdkHelp", "JDKHelp");
288             addCommand("jlisp", "JLisp");
289             addCommand("jumpToColumn", "JumpCommands");
290             addCommand("jumpToLine", "JumpCommands");
291             addCommand("jumpToOffset", "JumpCommands");
292             addCommand("jumpToTag", "ListTagsMode");
293             addCommand("jumpToTagAndKillList", "ListTagsMode");
294             addCommand("killCompilation", "CompilationBuffer");
295             addCommand("lisp", "LispShell");
296             addCommand("listBindings", "Help");
297             addCommand("listFiles", "FindInFiles");
298             addCommand("lispFindMatchingChar", "LispMode");
299             addCommand("lispSelectSyntax", "LispMode");
300             addCommand("listIncludes", "CheckPath");
301             addCommand("listMatchingTags", "TagCommands");
302             addCommand("listMatchingTagsAtDot", "TagCommands");
303             addCommand("listOccurrences", "ListOccurrences");
304             addCommand("listOccurrencesOfPatternAtDot", "ListOccurrences");
305             addCommand("listProperties", "PropertiesDialog");
306             addCommand("listRegisters", "Registers");
307             addCommand("listTags", "ListTagsDialog");
308             addCommand("listThreads", "Debug");
309             addCommand("loadLispFile", "LispMode");
310             addCommand("loadSession", "Session");
311             addCommand("lowerCaseRegion", "RegionCommands");
312             addCommand("makeTagFile", "TagCommands");
313             addCommand("man", "ManMode");
314             addCommand("manFollowLink", "ManMode");
315             addCommand("mouseFindOccurrence", "ListOccurrences");
316             addCommand("mouseFindTag", "TagCommands");
317             addCommand("mouseJumpToTag", "ListTagsMode");
318             addCommand("nextChange", "ChangeMarks");
319             addCommand("nextComment", "CheckinBuffer");
320             addCommand("nextError", "CompilationCommands");
321             addCommand("nextTag", "TagCommands");
322             addCommand("openFileInOtherFrame", "OpenFileDialog");
323             addCommand("p4", "P4");
324             addCommand("p4Add", "P4", "add");
325             addCommand("p4Change", "P4", "change");
326             addCommand("p4Diff", "P4", "diff");
327             addCommand("p4DiffDir", "P4", "diffDir");
328             addCommand("p4Edit", "P4", "edit");
329             addCommand("p4Log", "P4", "log");
330             addCommand("p4Revert", "P4", "revert");
331             addCommand("p4Submit", "P4", "submit");
332             addCommand("pastePrimarySelection", "SystemSelection");
333             addCommand("phpHelp", "PHPMode");
334             addCommand("playbackMacro", "Macro");
335             addCommand("previousChange", "ChangeMarks");
336             addCommand("previousComment", "CheckinBuffer");
337             addCommand("previousError", "CompilationCommands");
338             addCommand("previousTag", "TagCommands");
339             addCommand("print", "PrintCommands");
340             addCommand("printBuffer", "PrintCommands");
341             addCommand("printRegion", "PrintCommands");
342             addCommand("properties", "PropertiesDialog");
343             addCommand("recentFiles", "RecentFilesDialog");
344             addCommand("recompile", "CompilationCommands");
345             addCommand("recordMacro", "Macro");
346             addCommand("reloadKeyMaps", "KeyMap");
347             addCommand("renumberRegion", "RegionCommands");
348             addCommand("replace", "ReplaceDialog");
349             addCommand("replaceInFiles", "FindInFiles");
350             addCommand("resetLisp", "LispShellMode");
351             addCommand("saveSession", "Session");
352             addCommand("saveToRegister", "Registers");
353             addCommand("selectToMarker", "Marker");
354             addCommand("selectToTemporaryMarker", "Marker");
355             addCommand("shellCommand", "ShellCommand");
356             addCommand("shell", "Shell");
357             addCommand("shellBackspace", "CommandInterpreter");
358             addCommand("shellEnter", "CommandInterpreter");
359             addCommand("shellEscape", "CommandInterpreter");
360             addCommand("shellHome", "CommandInterpreter");
361             addCommand("shellInterrupt", "Shell");
362             addCommand("shellNextInput", "CommandInterpreter");
363             addCommand("shellNextPrompt", "CommandInterpreter");
364             addCommand("shellPreviousInput", "CommandInterpreter");
365             addCommand("shellPreviousPrompt", "CommandInterpreter");
366             addCommand("shellTab", "Shell");
367             addCommand("showMessage", "CompilationCommands");
368             addCommand("slime", "LispShell");
369             addCommand("sortLines", "Sort");
370             addCommand("source", "JDKHelp");
371             addCommand("ssh", "RemoteShell");
372             addCommand("tagDown", "ListTagsMode");
373             addCommand("tagUp", "ListTagsMode");
374             addCommand("telnet", "RemoteShell");
375             addCommand("thisError", "CompilationCommands");
376             addCommand("toggleWrap", "WrapText");
377             addCommand("upperCaseRegion", "RegionCommands");
378             addCommand("whereIs", "ExecuteCommandDialog");
379             addCommand("wrapComment", "WrapText");
380             addCommand("writeGlobalKeyMap", "SaveFileDialog");
381             addCommand("writeLocalKeyMap", "SaveFileDialog");
382             addCommand("xmlElectricEquals", "XmlMode");
383             addCommand("xmlElectricSlash", "XmlMode");
384             addCommand("xmlFindCurrentNode", "XmlMode");
385             addCommand("xmlFindMatch", "XmlMode");
386             addCommand("xmlInsertEmptyElementTag", "XmlMode");
387             addCommand("xmlInsertMatchingEndTag", "XmlMode");
388             addCommand("xmlInsertTag", "XmlMode");
389             addCommand("xmlParseBuffer", "XmlMode");
390             addCommand("xmlValidateBuffer", "XmlMode");
391
392             // Mail commands.
393
addCommand("attachFile", "mail.MailCommands");
394             addCommand("bounce", "mail.MailCommands");
395             addCommand("ccGroup", "mail.MailCommands");
396             addCommand("compose", "mail.MailCommands");
397             addCommand("foldThread", "mail.MailCommands");
398             addCommand("foldThreads", "mail.MailCommands");
399             addCommand("inbox", "mail.MailCommands");
400             addCommand("mailboxCreateFolder", "mail.MailCommands");
401             addCommand("mailboxDelete", "mail.MailCommands");
402             addCommand("mailboxDeleteFolder", "mail.MailCommands");
403             addCommand("mailboxExpunge", "mail.MailCommands");
404             addCommand("mailboxFlag", "mail.MailCommands");
405             addCommand("mailboxGetNewMessages", "mail.MailCommands");
406             addCommand("mailboxLastMessage", "mail.MailCommands");
407             addCommand("mailboxLimit", "mail.MailCommands");
408             addCommand("mailboxMarkRead", "mail.MailCommands");
409             addCommand("mailboxMarkUnread", "mail.MailCommands");
410             addCommand("mailboxMoveToFolder", "mail.MailCommands");
411             addCommand("mailboxReadMessage", "mail.MailCommands");
412             addCommand("mailboxReadMessageOtherWindow", "mail.MailCommands");
413             addCommand("mailboxSaveToFolder", "mail.MailCommands");
414             addCommand("mailboxStop", "mail.MailCommands");
415             addCommand("mailboxTag", "mail.MailCommands");
416             addCommand("mailboxTagPattern", "mail.MailCommands");
417             addCommand("mailboxToggleRaw", "mail.MailCommands");
418             addCommand("mailboxUndelete", "mail.MailCommands");
419             addCommand("mailboxUnlimit", "mail.MailCommands");
420             addCommand("mailboxUntagAll", "mail.MailCommands");
421             addCommand("messageDelete", "mail.MailCommands");
422             addCommand("messageFlag", "mail.MailCommands");
423             addCommand("messageForward", "mail.MailCommands");
424             addCommand("messageIndex", "mail.MailCommands");
425             addCommand("messageMoveToFolder", "mail.MailCommands");
426             addCommand("messageNext", "mail.MailCommands");
427             addCommand("messageNextInThread", "mail.MailCommands");
428             addCommand("messageParent", "mail.MailCommands");
429             addCommand("messagePrevious", "mail.MailCommands");
430             addCommand("messagePreviousInThread", "mail.MailCommands");
431             addCommand("messageReplyToGroup", "mail.MailCommands");
432             addCommand("messageReplyToSender", "mail.MailCommands");
433             addCommand("messageSaveAttachment", "mail.MailCommands");
434             addCommand("messageToggleHeaders", "mail.MailCommands");
435             addCommand("messageToggleRaw", "mail.MailCommands");
436             addCommand("messageToggleWrap", "mail.MailCommands");
437             addCommand("messageViewAttachment", "mail.MailCommands");
438             addCommand("openMailbox", "mail.MailCommands");
439             addCommand("send", "mail.MailCommands");
440             addCommand("sendMailBackTab", "mail.MailCommands");
441             addCommand("sendMailElectricColon", "mail.MailCommands");
442             addCommand("sendMailTab", "mail.MailCommands");
443             addCommand("toggleGroupByThread", "mail.MailCommands");
444
445             // News commands.
446
addCommand("news", "mail.NewsCommands");
447             addCommand("openGroup", "mail.NewsCommands");
448             addCommand("openGroupAtDot", "mail.NewsCommands");
449             addCommand("readArticle", "mail.NewsCommands");
450             addCommand("readArticleOtherWindow", "mail.NewsCommands");
451
452             // jdb commands.
453
addCommand("jdb", "jdb.JdbCommands");
454             addCommand("jdbContinue", "jdb.JdbCommands");
455             addCommand("jdbDeleteBreakpoint", "jdb.Jdb");
456             addCommand("jdbFinish", "jdb.JdbCommands");
457             addCommand("jdbLocals", "jdb.JdbCommands");
458             addCommand("jdbNext", "jdb.JdbCommands");
459             addCommand("jdbQuit", "jdb.JdbCommands");
460             addCommand("jdbRestart", "jdb.JdbCommands");
461             addCommand("jdbRunToCurrentLine", "jdb.Jdb");
462             addCommand("jdbSetBreakpoint", "jdb.Jdb");
463             addCommand("jdbStep", "jdb.JdbCommands");
464             addCommand("jdbSuspend", "jdb.JdbCommands");
465             addCommand("jdbToggleBreakpoint", "jdb.Jdb");
466
467             // Web browser commands.
468
addCommand("webBack", "WebBuffer", "back");
469             addCommand("webForward", "WebBuffer", "forward");
470             addCommand("webReload", "WebBuffer", "refresh");
471             addCommand("followLink", "WebBuffer");
472             addCommand("mouseFollowLink", "WebBuffer");
473             addCommand("viewPage", "WebBuffer");
474             addCommand("viewSource", "WebBuffer");
475
476             // Abbreviations.
477
addCommand("sr", "Registers", "saveToRegister");
478             addCommand("ir", "Registers", "insertRegister");
479             addCommand("lr", "Registers", "listRegisters");
480             addCommand("hs", "LispMode", "hyperspec");
481             addCommand("clhs", "LispMode", "hyperspec");
482             addCommand("abcl", "LispShell", "lisp");
483
484             if (Editor.isDebugEnabled() && map.size() > INITIAL_CAPACITY * 0.75) {
485                 Log.error("CommandTable.init need to increase initial capacity!");
486                 Log.error("CommandTable.init size = " + map.size());
487             }
488         }
489     }
490
491     // For commands that are implemented by a method of the same name in the
492
// org.armedbear.j.Editor class.
493
private static final void addCommand(String JavaDoc commandName)
494     {
495         map.put(commandName.toLowerCase(), new Command(commandName));
496     }
497
498     // For commands that are implemented by a method of the same name in the
499
// specified class.
500
private static final void addCommand(String JavaDoc commandName, String JavaDoc className)
501     {
502         map.put(commandName.toLowerCase(), new Command(commandName, className, commandName));
503     }
504
505     private static final void addCommand(String JavaDoc commandName, String JavaDoc className, String JavaDoc methodName)
506     {
507         map.put(commandName.toLowerCase(), new Command(commandName, className, methodName));
508     }
509
510     public static List JavaDoc getCompletionsForPrefix(String JavaDoc prefix)
511     {
512         String JavaDoc lower = prefix.toLowerCase();
513         Iterator JavaDoc it = map.values().iterator();
514         ArrayList JavaDoc list = new ArrayList JavaDoc();
515         while (it.hasNext()) {
516             Command command = (Command) it.next();
517             if (command.getName().toLowerCase().startsWith(lower))
518                 list.add(command.getName());
519         }
520         return list;
521     }
522
523     public static List JavaDoc apropos(String JavaDoc s)
524     {
525         String JavaDoc lower = s.toLowerCase();
526         Iterator JavaDoc it = map.values().iterator();
527         ArrayList JavaDoc list = new ArrayList JavaDoc();
528         while (it.hasNext()) {
529             String JavaDoc name = ((Command)it.next()).getName();
530             if (name.toLowerCase().indexOf(lower) >= 0)
531                 list.add(name);
532         }
533         return list;
534     }
535 }
536
Popular Tags