OSDN Git Service

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