@Nullable private LookupFile getClosestParent(final String typed) { if (typed == null) return null; LookupFile lastFound = myFinder.find(typed); if (lastFound == null) return null; if (lastFound.exists()) { if (typed.charAt(typed.length() - 1) != File.separatorChar) return lastFound.getParent(); return lastFound; } final String[] splits = myFinder.normalize(typed).split(myFileSpitRegExp); StringBuilder fullPath = new StringBuilder(); for (int i = 0; i < splits.length; i++) { String each = splits[i]; fullPath.append(each); if (i < splits.length - 1) { fullPath.append(myFinder.getSeparator()); } final LookupFile file = myFinder.find(fullPath.toString()); if (file == null || !file.exists()) return lastFound; lastFound = file; } return lastFound; }
private void setTextToFile(final LookupFile file) { String text = file.getAbsolutePath(); if (file.isDirectory() && !text.endsWith(myFinder.getSeparator())) { text += myFinder.getSeparator(); } myPathTextField.setText(text); }
/** * Replace the path component under the caret with the file selected from the completion list. * * @param file the selected file. * @param caretPos * @param start the start offset of the path component under the caret. * @param end the end offset of the path component under the caret. * @throws BadLocationException */ private void replacePathComponent(LookupFile file, int caretPos, int start, int end) throws BadLocationException { final Document doc = myPathTextField.getDocument(); myPathTextField.setSelectionStart(0); myPathTextField.setSelectionEnd(0); final String name = file.getName(); boolean toRemoveExistingName; String prefix = ""; if (caretPos >= start) { prefix = doc.getText(start, caretPos - start); if (prefix.length() == 0) { prefix = doc.getText(start, end - start); } if (SystemInfo.isFileSystemCaseSensitive) { toRemoveExistingName = name.startsWith(prefix) && prefix.length() > 0; } else { toRemoveExistingName = name.toUpperCase().startsWith(prefix.toUpperCase()) && prefix.length() > 0; } } else { toRemoveExistingName = true; } int newPos; if (toRemoveExistingName) { doc.remove(start, end - start); doc.insertString(start, name, doc.getDefaultRootElement().getAttributes()); newPos = start + name.length(); } else { doc.insertString(caretPos, name, doc.getDefaultRootElement().getAttributes()); newPos = caretPos + name.length(); } if (file.isDirectory()) { if (!myFinder.getSeparator().equals(doc.getText(newPos, 1))) { doc.insertString( newPos, myFinder.getSeparator(), doc.getDefaultRootElement().getAttributes()); newPos++; } } if (newPos < doc.getLength()) { if (myFinder.getSeparator().equals(doc.getText(newPos, 1))) { newPos++; } } myPathTextField.setCaretPosition(newPos); }
private void addMacroPaths(final CompletionResult result, final String typedText) { result.myMacros = new ArrayList<LookupFile>(); final Iterator<String> macros = myMacroMap.keySet().iterator(); while (macros.hasNext()) { String eachMacro = macros.next(); if (eachMacro.toUpperCase().startsWith(typedText.toUpperCase())) { final String eachPath = myMacroMap.get(eachMacro); if (eachPath != null) { final LookupFile macroFile = myFinder.find(eachPath); if (macroFile != null && macroFile.exists()) { result.myMacros.add(macroFile); result.myToComplete.add(macroFile); macroFile.setMacro(eachMacro); } } } } }