Changeset 1243 for trunk/java-utils
- Timestamp:
- 06/28/13 14:38:46 (11 years ago)
- Location:
- trunk/java-utils/src/main/java/de/ugoe/cs/util
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/java-utils/src/main/java/de/ugoe/cs/util/FileTools.java
r1240 r1243 99 99 return (new String(buffer)).split(splitString); 100 100 } 101 102 /** 103 * <p> 104 * Autocompletes a give path. The path must be absolute. Otherwise, autocompletion 105 * is not possible. 106 * </p> 107 * 108 * @param prefix 109 * the prefix to be complete 110 * @return the auto completed path 111 */ 112 public static String autoCompletePath(String prefix) { 113 File prefixFile = new File(prefix); 114 File parentDir = prefixFile.getParentFile(); 115 116 if (parentDir == null) { 117 // the prefix does not denote a path or denotes one of the root directories. 118 // this can not be auto completed 119 return prefix; 120 } 121 122 String[] completions = null; 123 124 if (parentDir.exists()) { 125 completions = parentDir.list(); 126 } 127 128 if (completions == null) { 129 completions = new String[0]; 130 } 131 132 String completedPrefix; 133 134 completedPrefix = StringTools.autocomplete(prefixFile.getName(), completions); 135 136 File completedFile = new File(parentDir, completedPrefix); 137 138 if (completedFile.exists() && completedFile.isDirectory()) { 139 return completedFile.getAbsolutePath() + File.separator; 140 } 141 else { 142 return (parentDir.getAbsolutePath() + File.separator + completedPrefix) 143 .replaceAll("//", "/"); 144 } 145 } 101 146 102 147 } -
trunk/java-utils/src/main/java/de/ugoe/cs/util/StringTools.java
r1241 r1243 14 14 15 15 package de.ugoe.cs.util; 16 17 import java.util.ArrayList; 18 import java.util.List; 16 19 17 20 /** … … 63 66 return result; 64 67 } 68 69 /** 70 * <p> 71 * Performs an auto completion of the provided prefix using the given potential completions. 72 * The method searches for all completions that start with the given prefix and stores them in 73 * a subset. It then extends the prefix with characters of the subset of completions as long as 74 * the prefix still prefixes all completions in the subset. The result is then returned. If 75 * there is no matching completion or if there are several matching completions differing 76 * in the succeeding letter, the prefix is returned as is. If there is only one matching 77 * completion this completion is returned. 78 * </p> 79 * 80 * @param prefix the prefix to be further completed 81 * @param completions the potential completions of the prefix 82 * 83 * @return as described 84 */ 85 public static String autocomplete(String prefix, String[] completions) { 86 List<String> matchingCompletions = new ArrayList<String>(); 87 for (String completion : completions) { 88 if (completion.startsWith(prefix)) { 89 matchingCompletions.add(completion); 90 } 91 } 92 93 StringBuffer completedPrefix = new StringBuffer(prefix); 94 95 boolean foundCompletion = false; 96 97 while (!foundCompletion) { 98 char nextCompletionChar = 0; 99 for (String completion : matchingCompletions) { 100 if (completion.length() > completedPrefix.length()) { 101 if (nextCompletionChar == 0) { 102 nextCompletionChar = completion.charAt(completedPrefix.length()); 103 } 104 else if (nextCompletionChar != completion.charAt(completedPrefix.length())) { 105 foundCompletion = true; 106 } 107 } 108 else { 109 foundCompletion = true; 110 } 111 } 112 113 if (!foundCompletion && (nextCompletionChar != 0)) { 114 completedPrefix.append(nextCompletionChar); 115 } 116 else { 117 foundCompletion = true; 118 } 119 } 120 121 return completedPrefix.toString(); 122 } 65 123 } -
trunk/java-utils/src/main/java/de/ugoe/cs/util/console/CommandExecuter.java
r1238 r1243 30 30 import java.util.jar.JarInputStream; 31 31 import java.util.logging.Level; 32 33 import de.ugoe.cs.util.StringTools; 32 34 33 35 /** … … 356 358 Command[] commands = getAvailableCommands(); 357 359 358 List<Command> matchingCommands = new ArrayList<Command>(); 359 for (Command command : commands) { 360 String commandName = command.getClass().getSimpleName().substring(3); 361 if (commandName.startsWith(commandPrefix)) { 362 matchingCommands.add(command); 363 } 364 } 360 String[] completions = new String[commands.length]; 365 361 366 StringBuffer completedPrefix = new StringBuffer(commandPrefix); 362 for (int i = 0; i < commands.length; i++) { 363 completions[i] = commands[i].getClass().getSimpleName().substring(3); 364 } 367 365 368 boolean foundCompletion = false; 369 370 while (!foundCompletion) { 371 char nextCompletionChar = 0; 372 for (Command command : matchingCommands) { 373 String commandName = command.getClass().getSimpleName().substring(3); 374 if (commandName.length() > completedPrefix.length()) { 375 if (nextCompletionChar == 0) { 376 nextCompletionChar = commandName.charAt(completedPrefix.length()); 377 } 378 else if (nextCompletionChar != commandName.charAt(completedPrefix.length())) { 379 foundCompletion = true; 380 } 381 } 382 else { 383 foundCompletion = true; 384 } 385 } 386 387 if (!foundCompletion && (nextCompletionChar != 0)) { 388 completedPrefix.append(nextCompletionChar); 389 } 390 else { 391 foundCompletion = true; 392 } 393 } 394 395 return completedPrefix.toString(); 366 return StringTools.autocomplete(commandPrefix, completions); 396 367 } 397 368 }
Note: See TracChangeset
for help on using the changeset viewer.