OSDN Git Service

4f14182e31dd909a1544e4e9df296e6a7e2ed48d
[stigmata/stigmata.git] / src / main / java / jp / sourceforge / stigmata / ui / swing / FileIOManager.java
1 package jp.sourceforge.stigmata.ui.swing;
2
3 /*
4  * $Id$
5  */
6
7 import java.awt.Component;
8 import java.io.File;
9 import java.text.MessageFormat;
10
11 import javax.swing.JFileChooser;
12 import javax.swing.SwingUtilities;
13 import javax.swing.filechooser.FileFilter;
14
15 import jp.sourceforge.stigmata.BirthmarkEnvironment;
16
17 /**
18  * 
19  * @author Haruaki TAMADA
20  * @version $Revision$ 
21  */
22 public class FileIOManager{
23     private Component parent;
24     private File currentDirectory;
25     private BirthmarkEnvironment env;
26
27     public FileIOManager(Component parent, BirthmarkEnvironment env){
28         this.parent = parent;
29         this.env = env;
30         if(env.getProperty(".current.directory") != null){
31             currentDirectory = new File(env.getProperty(".current.directory"));
32         }
33         if(env.getProperty("startup.directory") != null){
34             currentDirectory = new File(env.getProperty("startup.directory"));
35         }
36         if(currentDirectory == null && System.getProperty("execution.directory") != null){
37             currentDirectory = new File(System.getProperty("execution.directory"));
38         }
39         if(currentDirectory == null){
40             currentDirectory = new File(".");
41         }
42     }
43
44     public File getCurrentDirectory(){
45         return currentDirectory;
46     }
47
48     public void setCurrentDirectory(File directory) throws IllegalArgumentException{
49         if(!directory.isDirectory()){
50             throw new IllegalArgumentException(directory.getName() + " is not directory");
51         }
52         this.currentDirectory = directory;
53         env.addProperty(".current.directory", directory.getAbsolutePath());
54     }
55
56     public File findFile(boolean open){
57         return findFile(open, new String[0], "");
58     }
59
60     public File[] openFiles(FileFilter[] filters, boolean multi, boolean directory){
61         JFileChooser chooser = new JFileChooser(getCurrentDirectory());
62         if(filters != null){
63             for(int i = 0; i < filters.length; i++){
64                 chooser.addChoosableFileFilter(filters[i]);
65             }
66         }
67         chooser.setMultiSelectionEnabled(multi);
68         if(directory){
69             chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
70         }
71         else{
72             chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
73         }
74         int returnValue = chooser.showOpenDialog(SwingUtilities.getRootPane(parent));
75         if(returnValue == JFileChooser.APPROVE_OPTION){
76             setCurrentDirectory(chooser.getCurrentDirectory());
77             return chooser.getSelectedFiles();
78         }
79         return new File[0];
80     }
81
82     public File findFile(boolean open, String[] exts, String desc){
83         JFileChooser chooser = new JFileChooser(getCurrentDirectory());
84         if(exts != null){
85             MessageFormat formatter = new MessageFormat(desc);
86             for(int i = 0; i < exts.length; i++){
87                 chooser.addChoosableFileFilter(
88                     new ExtensionFilter(exts[i], formatter.format(new Object[] { exts[i], }))
89                 );
90             }
91         }
92         int returnValue = -1;
93         if(open){
94             returnValue = chooser.showOpenDialog(SwingUtilities.getRootPane(parent));
95         }
96         else{
97             returnValue = chooser.showSaveDialog(SwingUtilities.getRootPane(parent));
98         }
99         if(returnValue == JFileChooser.APPROVE_OPTION){
100             setCurrentDirectory(chooser.getCurrentDirectory());
101             File file = chooser.getSelectedFile();
102             if(!open){
103                 FileFilter filter = chooser.getFileFilter();
104                 if(filter instanceof ExtensionFilter){
105                     ExtensionFilter ef = (ExtensionFilter)filter;
106                     if(!filter.accept(file)){
107                         String[] extensions = ef.getExtensions();
108                         file = setExtension(file, extensions[0]);
109                     }
110                 }
111             }
112             return file;
113         }
114         return null;
115     }
116
117     private File setExtension(File file, String ext){
118         String name = file.getName();
119         int index = name.lastIndexOf('.');
120         String n = name;
121         if(index > 0){
122             n = n.substring(0, index);
123         }
124         name = n + '.' + ext;
125         return new File(file.getParentFile(), name);
126     }
127 }