OSDN Git Service

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