content: package com.baidu.ueditor.hunter;
  
  import java.io.File;
  import java.util.Arrays;
  import java.util.Collection;
  import java.util.Map;
  
  import org.apache.commons.io.FileUtils;
  
  import com.baidu.ueditor.PathFormat;
  import com.baidu.ueditor.define.AppInfo;
  import com.baidu.ueditor.define.BaseState;
  import com.baidu.ueditor.define.MultiState;
  import com.baidu.ueditor.define.State;
  
  public class FileManager {
  
  	private String dir = null;
  	private String rootPath = null;
  	private String[] allowFiles = null;
  	private int count = 0;
  	
  	public FileManager ( Map<String, Object> conf ) {
  
  		this.rootPath = (String)conf.get( "rootPath" );
  		this.dir = this.rootPath + (String)conf.get( "dir" );
  		this.allowFiles = this.getAllowFiles( conf.get("allowFiles") );
  		this.count = (Integer)conf.get( "count" );
  		
  	}
  	
  	public State listFile ( int index ) {
  		
  		File dir = new File( this.dir );
  		State state = null;
  
  		if ( !dir.exists() ) {
  			return new BaseState( false, AppInfo.NOT_EXIST );
  		}
  		
  		if ( !dir.isDirectory() ) {
  			return new BaseState( false, AppInfo.NOT_DIRECTORY );
  		}
  		
  		Collection<File> list = FileUtils.listFiles( dir, this.allowFiles, true );
  		
  		if ( index < 0 || index > list.size() ) {
  			state = new MultiState( true );
  		} else {
  			Object[] fileList = Arrays.copyOfRange( list.toArray(), index, index + this.count );
  			state = this.getState( fileList );
  		}
  		
  		state.putInfo( "start", index );
  		state.putInfo( "total", list.size() );
  		
  		return state;
  		
  	}
  	
  	private State getState ( Object[] files ) {
  		
  		MultiState state = new MultiState( true );
  		BaseState fileState = null;
  		
  		File file = null;
  		
  		for ( Object obj : files ) {
  			if ( obj == null ) {
  				break;
  			}
  			file = (File)obj;
  			fileState = new BaseState( true );
  			fileState.putInfo( "url", PathFormat.format( this.getPath( file ) ) );
  			state.addState( fileState );
  		}
  		
  		return state;
  		
  	}
  	
  	private String getPath ( File file ) {
  		
  		String path = file.getAbsolutePath();
  		
  		return path.replace( this.rootPath, "/" );
  		
  	}
  	
  	private String[] getAllowFiles ( Object fileExt ) {
  		
  		String[] exts = null;
  		String ext = null;
  		
  		if ( fileExt == null ) {
  			return new String[ 0 ];
  		}
  		
  		exts = (String[])fileExt;
  		
  		for ( int i = 0, len = exts.length; i < len; i++ ) {
  			
  			ext = exts[ i ];
  			exts[ i ] = ext.replace( ".", "" );
  			
  		}
  		
  		return exts;
  		
  	}
  	
  }
  