OSDN Git Service

コミット漏れ
[coroid/inqubus.git] / frontend / src / saccubus / converter / filegetter / FileLocator.java
1 /* $Id$ */
2 package saccubus.converter.filegetter;
3
4 import java.io.File;
5 import java.io.FilenameFilter;
6 import java.util.logging.Level;
7 import java.util.logging.Logger;
8
9 /**
10  *
11  * @author yuki
12  */
13 class FileLocator {
14
15     private final boolean autoFileName;
16     private final File initFile;
17     private final String prefix;
18     private final String title;
19     private final String[] suffixes;
20
21     FileLocator(boolean autoFileName, File initFile, String prefix, String title, String... suffixes) {
22         this.autoFileName = autoFileName;
23         this.initFile = initFile;
24         this.prefix = prefix;
25         this.title = title;
26         this.suffixes = suffixes;
27     }
28
29     /**
30      * コンストラクタで指定した条件でファイルを検索する。
31      * autoFileNameがfalseの場合、直接名前指定であるため指定されたファイルをそのまま返す。
32      * autoFileNameがtrueの場合、initFileディレクトリにprefixで始まりsuffixで終わるファイルが存在するか検索し
33      * あればそれを返す。
34      * このファイルも無い場合、指定されたパラメータに従ったファイル名を返す。
35      * このとき拡張子(suffixes)が複数指定されていた場合は最初のものを返す。
36      * @return 所望のファイル。ファイルは存在する場合もあり、存在しない場合もあることに注意。
37      */
38     File getFile() {
39         if (!isAutoNaming()) {
40             return initFile;
41         } else {
42             File res = searchFile();
43             if (res != null) {
44                 return res;
45             }
46             return new File(initFile, prefix + title + suffixes[0]);
47         }
48     }
49
50     private File searchFile() {
51         FilenameFilter filter = new FilenameFilter() {
52
53             @Override
54             public boolean accept(File dir, String name) {
55                 if (name.startsWith(prefix)) {
56                     for (String suffix : suffixes) {
57                         if (name.endsWith(suffix)) {
58                             return true;
59                         }
60                     }
61                 }
62                 return false;
63             }
64         };
65         File[] res = initFile.listFiles(filter);
66         if (res == null || res.length == 0) {
67             return null;
68         }
69         if (res.length > 1) {
70             final String message = "複数の候補ファイルがヒットしました. 意図しないファイルが選択されている可能性があります:"
71                     + res[0];
72             Logger.getLogger(FileLocator.class.getName()).log(Level.WARNING, message);
73         }
74         return res[0];
75     }
76
77     protected boolean isAutoNaming() {
78         return autoFileName;
79     }
80
81     protected final boolean getAutoFileName() {
82         return autoFileName;
83     }
84 }