/*
* Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved.
*
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License, Version 1.0,
* which accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*
*/
package net.rim.ejde.internal.util;
import java.io.File;
import java.io.FileFilter;
public class RecursiveSearchTask implements Runnable {
public interface ISearchDialog {
boolean isCanceled();
void updateProgress( String name );
}
private class RecursiveSearchFilter implements FileFilter {
String _target;
RecursiveSearchFilter( String target ) {
_target = target;
}
public boolean accept( File pathName ) {
if( pathName.isDirectory() ) {
return true;
}
return pathName.getName().equals( _target );
}
}
private ISearchDialog _dialog;
private final File _dir;
private final RecursiveSearchFilter _filter;
private File _file;
public RecursiveSearchTask( ISearchDialog dialog, File dir, String name ) {
_dialog = dialog;
_dir = dir;
_filter = new RecursiveSearchFilter( name );
}
public File getFile() {
return _file;
}
public void run() {
_file = recursiveSearch( _dir );
}
private File recursiveSearch( File dir ) {
if( _dialog.isCanceled() ) {
return null;
}
_dialog.updateProgress( dir.getName() );
// _label.setText( dir.getName() );
File[] files = dir.listFiles( _filter );
if( files == null )
return null;
for( int i = 0; i < files.length; ++i ) {
File f = files[ i ];
if( f.isFile() ) {
return f;
}
}
for( int i = 0; i < files.length; ++i ) {
File f = files[ i ];
if( f.isDirectory() ) {
f = recursiveSearch( f );
if( f != null )
return f;
}
}
return null;
}
}