Statistics
| Revision:

gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.util / org.gvsig.tools.util.impl / src / main / java / org / gvsig / filedialogchooser / impl / VFSJFileChooserBased.java @ 1872

History | View | Annotate | Download (6.25 KB)

1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.filedialogchooser.impl;
7

    
8
import com.googlecode.vfsjfilechooser2.VFSJFileChooser;
9
import com.googlecode.vfsjfilechooser2.filechooser.AbstractVFSFileFilter;
10
import java.awt.Component;
11
import java.beans.PropertyChangeListener;
12
import java.io.File;
13
import javax.swing.JComponent;
14
import javax.swing.filechooser.FileFilter;
15
import org.apache.commons.vfs2.FileObject;
16
import org.apache.commons.vfs2.provider.local.LocalFile;
17
import org.gvsig.filedialogchooser.FileDialogChooser;
18
import org.gvsig.filedialogchooser.FileDialogChooserManager;
19
import org.gvsig.tools.util.ToolsUtilLocator;
20

    
21

    
22
public class VFSJFileChooserBased implements FileDialogChooser {
23

    
24
    private static class FileFilterAdapter extends AbstractVFSFileFilter {
25

    
26
        private final FileFilter filter;
27

    
28
        FileFilterAdapter(FileFilter filter) {
29
            this.filter = filter;
30
        }
31

    
32
        @Override
33
        public boolean accept(FileObject f) {
34
            if( f instanceof LocalFile ) {
35
                return this.filter.accept( new File(f.getName().getPath()));
36
            }
37
            return false;
38
        }
39

    
40
        @Override
41
        public String getDescription() {
42
            return this.filter.getDescription();
43
        }
44

    
45
        public FileFilter getFilter() {
46
            return this.filter;
47
        }
48
    }
49
    
50
    private final VFSJFileChooser jfc;
51
    private final String fileChooserID;
52

    
53
    public VFSJFileChooserBased(String fileChooserID) {
54
        super();
55
        this.jfc = new VFSJFileChooser();
56
        this.fileChooserID = fileChooserID;
57
    }
58
    
59
    @Override
60
    public void setCurrentDirectory(File dir) {
61
        if( dir == null ) {
62
            dir = new File(System.getProperty("user.home"));
63
        }
64
        this.jfc.setCurrentDirectory(dir);
65
    }
66

    
67
    @Override
68
    public File getCurrentDirectory() {
69
        return this.jfc.getCurrentDirectory();
70
    }
71

    
72
    @Override
73
    public void setDialogTitle(String dialogTitle) {
74
        this.jfc.setDialogTitle(dialogTitle);
75
    }
76

    
77
    @Override
78
    public void setDialogType(int dialogType) {
79
        switch(dialogType) {
80
        default:
81
        case OPEN_DIALOG:
82
            this.jfc.setDialogType(VFSJFileChooser.DIALOG_TYPE.OPEN);
83
            break;
84
        case SAVE_DIALOG:
85
            this.jfc.setDialogType(VFSJFileChooser.DIALOG_TYPE.SAVE);
86
            break;
87
        }
88
    }
89

    
90
    @Override
91
    public void setDragEnabled(boolean b) {
92
        this.jfc.setDragEnabled(b);
93
    }
94

    
95
    @Override
96
    public void setFileFilter(FileFilter filter) {
97
        if( filter == null ) {
98
            this.jfc.setFileFilter(null);
99
        } else {
100
            this.jfc.setFileFilter(new FileFilterAdapter(filter));
101
        }
102
    }
103

    
104
    @Override
105
    public FileFilter getFileFilter() {
106
        FileFilterAdapter f = (FileFilterAdapter) this.jfc.getFileFilter();
107
        return f.getFilter();
108
    }
109

    
110
    @Override
111
    public void setFileSelectionMode(int mode) {
112
        switch(mode) {
113
        case FILES_ONLY:
114
            this.jfc.setFileSelectionMode(VFSJFileChooser.SELECTION_MODE.FILES_ONLY);
115
            break;
116
        case DIRECTORIES_ONLY:
117
            this.jfc.setFileSelectionMode(VFSJFileChooser.SELECTION_MODE.DIRECTORIES_ONLY);
118
            break;
119
        default:
120
        case FILES_AND_DIRECTORIES:
121
            this.jfc.setFileSelectionMode(VFSJFileChooser.SELECTION_MODE.FILES_AND_DIRECTORIES);
122
            break;
123
        }
124
    }
125

    
126
    @Override
127
    public File getSelectedFile() {
128
        return this.jfc.getSelectedFile();
129
    }
130

    
131
    @Override
132
    public File[] getSelectedFiles() {
133
        return this.jfc.getSelectedFiles();
134
    }
135

    
136
    @Override
137
    public void setFileHidingEnabled(boolean b) {
138
        this.jfc.setFileHidingEnabled(b);
139
    }
140

    
141
    @Override
142
    public void setMultiSelectionEnabled(boolean b) {
143
        this.jfc.setMultiSelectionEnabled(b);
144
    }
145

    
146
    @Override
147
    public boolean isMultiSelectionEnabled() {
148
        return this.jfc.isMultiSelectionEnabled();
149
    }
150

    
151
    @Override
152
    public int showOpenDialog(Component parent) {
153
        FileDialogChooserManager manager = ToolsUtilLocator.getFileDialogChooserManager();
154
        File f = this.getCurrentDirectory();
155
        if( f==null ) {
156
            f = manager.getLastPath(fileChooserID, null);
157
            this.jfc.setCurrentDirectory(f);
158
        }        
159
        VFSJFileChooser.RETURN_TYPE r = this.jfc.showOpenDialog(parent);
160
        if( r == VFSJFileChooser.RETURN_TYPE.CANCEL ) {
161
            return CANCEL_OPTION;            
162
        }
163
        if( r == VFSJFileChooser.RETURN_TYPE.APPROVE ) {
164
            manager.setLastPath(fileChooserID, this.getCurrentDirectory());
165
            return APPROVE_OPTION;            
166
        }
167
        if( r == VFSJFileChooser.RETURN_TYPE.ERROR ) {
168
            return ERROR_OPTION;            
169
        }
170
        return ERROR_OPTION;            
171
    }
172

    
173
    @Override
174
    public int showSaveDialog(Component parent) {
175
        FileDialogChooserManager manager = ToolsUtilLocator.getFileDialogChooserManager();
176
        File f = manager.getLastPath(fileChooserID, this.getCurrentDirectory());
177
        this.jfc.setCurrentDirectory(f);
178
        VFSJFileChooser.RETURN_TYPE r = this.jfc.showSaveDialog(parent);
179
        if( r == VFSJFileChooser.RETURN_TYPE.CANCEL ) {
180
            return CANCEL_OPTION;            
181
        }
182
        if( r == VFSJFileChooser.RETURN_TYPE.APPROVE ) {
183
            manager.setLastPath(fileChooserID, this.getCurrentDirectory());
184
            return APPROVE_OPTION;            
185
        }
186
        if( r == VFSJFileChooser.RETURN_TYPE.ERROR ) {
187
            return ERROR_OPTION;            
188
        }
189
        return ERROR_OPTION;            
190
    }
191
    
192
    @Override
193
    public void setAcceptAllFileFilterUsed(boolean b) {
194
        this.jfc.setAcceptAllFileFilterUsed(b);
195
    }
196

    
197
    @Override
198
    public void addChoosableFileFilter(FileFilter next) {
199
        this.jfc.addChoosableFileFilter(new FileFilterAdapter(next));
200
    }
201

    
202
    @Override
203
    public void addPropertyChangeListener(PropertyChangeListener listener) {
204
        this.jfc.addPropertyChangeListener(listener);
205
    }
206

    
207
    @Override
208
    public void setAccessory(JComponent newAccessory) {
209
        this.jfc.setAccessory(newAccessory);
210
    }
211

    
212
}