Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2011 SAP AG All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: Lazar Kirchev, SAP AG - initial API and implementation /
 
 
 package org.eclipse.equinox.console.completion;
 
 import java.io.File;
 import java.net.URL;
 import java.util.Map;
 
This class implements completion of file names. It provides completion both for files with absolute filenames, as well as with names, relative to the current directory.
 
 public class FileNamesCompleter implements Completer {
 	private static final String FILE = "file:";
 	
 	public Map<StringIntegergetCandidates(String bufferint cursor) {
 		Map<StringIntegerresult = new HashMap<StringInteger>();
 		String currentToken = CommandLineParser.getCurrentToken(buffercursor);
 		if(currentToken == null || currentToken.equals("")) {
 			return new HashMap<StringInteger>();
 		}
 		
 		// if current token contains file:, then use URL class to parse the filename
 		if(currentToken.contains()) {
 			String fileName = currentToken.substring(currentToken.indexOf());
 			try {
 				URL url = new URL(fileName);
 				String canonicalFileName = url.getPath();
 				File file = new File(canonicalFileName);
 				File parent = file.getParentFile();
 				 
 				if ((file.isDirectory() && canonicalFileName.endsWith("/") )|| parent == null) {
 					// the entered filename is a directory name, ending with file separator character - here 
 					// all files in the directory will be returned as completion candidates; 
 					// or, if parent is null, the file is in the root directory and 
 					// the names of all files in this directory should be used to search for completion candidates
 					return checkChildren(file""cursorfalse);
 				} else {
 					// there is a filename for completion, and the names of all files in the same directory will be used
 					// to search for completion candidates
 					return checkChildren(parentfile.getName(), cursorfalse);
 				}
 			} catch (MalformedURLException e) {
 				return result;
 			}
 		}
 		
 		// the file name for completion is only the file separator character, so all files 
 		// in the current directory will be returned as completion candidates
 		if (currentToken.equals("\\\\") || currentToken.equals("/")) {
 			File file = new File(".");
 			return checkChildren(file""cursorfalse);
 		}
 		
 		// if the current token contains file separator character, then its parent directory can be extracted
 		if (currentToken.contains("\\\\") || currentToken.contains("/")) {
 			File file = new File(currentToken);
 			File parent = file.getParentFile();
 			if ((file.isDirectory() && (currentToken.endsWith("/") || currentToken.endsWith("\\\\")))
 					|| parent == null) {
 				// the entered filename is a directory name, ending with file separator character - here 
 				// all files in the directory will be returned as completion candidates; 
 				// or, if parent is null, the file is in the root directory and 
 				// the names of all files in this directory should be used to search for completion candidates
 				return checkChildren(file""cursorfalse);
 			} else {
 				// there is a filename for completion, and the names of all files in the same directory will be used
 				// to search for completion candidates
 				return checkChildren(parentfile.getName(), cursorfalse);
 			}
 		}
 		
 		// if the current token does not contain file separator character, 
 		// then search for candidates in the current directory
 		return checkChildren(new File("."), currentTokencursorfalse);
 	}
 
 	private Map<StringIntegercheckChildren(File parentString nameToCompleteint cursorboolean absolute) {
 		Map<StringIntegerresult = new HashMap<StringInteger>();
 		if(parent.exists()) {
 			File[] children = parent.listFiles();
 			for(File child : children) {
 				if(child.getName().startsWith(nameToComplete)) {
 					if(absolute == true) {
 						result.put(child.getAbsolutePath(), cursor - nameToComplete.length());
else {
						result.put(child.getName(), cursor - nameToComplete.length());
					}
				}
			}
		}
		return result;
	}
New to GrepCode? Check out our FAQ X