Helius
2021-01-16 9564ac5d43965f8d268a6fc6196ea71a6ac214eb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package com.matrix.component.ueditor.hunter;
 
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
 
import com.matrix.component.ueditor.PathFormat;
import com.matrix.component.ueditor.define.AppInfo;
import com.matrix.component.ueditor.define.BaseState;
import com.matrix.component.ueditor.define.MultiState;
import com.matrix.component.ueditor.define.State;
import org.apache.commons.io.FileUtils;
 
 
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;
        
    }
    
}