OSDN Git Service

mavenによるビルドに変更
[charactermanaj/CharacterManaJ.git] / src / main / java / charactermanaj / model / io / CharacterDataFileReaderWriterFactory.java
1 package charactermanaj.model.io;\r
2 \r
3 import java.io.File;\r
4 import java.io.IOException;\r
5 import java.net.URI;\r
6 \r
7 \r
8 public class CharacterDataFileReaderWriterFactory {\r
9 \r
10         private static final CharacterDataFileReaderWriterFactory singleton = new CharacterDataFileReaderWriterFactory();\r
11 \r
12         private CharacterDataFileReaderWriterFactory() {\r
13                 super();\r
14         }\r
15         \r
16         public static CharacterDataFileReaderWriterFactory getInstance() {\r
17                 return singleton;\r
18         }\r
19         \r
20         /**\r
21          * ファイルの拡張子に応じてzip/cmj形式でのライターを構築して帰します.<br>\r
22          * 拡張子がjarとcmjは同じ意味で、ともにjarファイル形式となります.<br>\r
23          * zip/cmj/jar以外の拡張子はIOExceptionとなります.<br>\r
24          * @param outfile 出力先ファイル名\r
25          * @return ライター\r
26          * @throws IOException 該当するライターがみつからない場合\r
27          */\r
28         public CharacterDataWriter createWriter(File outfile) throws IOException {\r
29                 if (outfile == null) {\r
30                         throw new IllegalArgumentException();\r
31                 }\r
32                 \r
33                 String name = outfile.getName().toLowerCase();\r
34                 if (name.endsWith(".jar") || name.endsWith(".cmj")) {\r
35                         return new CharacterDataJarFileWriter(outfile);\r
36 \r
37                 } else if (name.endsWith(".zip")) {\r
38                         return new CharacterDataZipFileWriter(outfile);\r
39                 }\r
40                 \r
41                 throw new IOException("unsupported file type: " + name);\r
42         }\r
43         \r
44         public CharacterDataArchiveFile openArchive(URI archiveFile) throws IOException {\r
45                 if (archiveFile == null) {\r
46                         throw new IllegalArgumentException();\r
47                 }\r
48 \r
49                 if ("file".equals(archiveFile.getScheme())) {\r
50                         // ファイルまたはディレクトリの場合\r
51                         File file = new File(archiveFile);\r
52                         return openArchive(file);\r
53                 }\r
54 \r
55                 // file以外は現在のところサポートしない。\r
56                 throw new UnsupportedOperationException();\r
57         }\r
58         \r
59         \r
60         public CharacterDataArchiveFile openArchive(File archiveFile) throws IOException {\r
61                 if (archiveFile == null) {\r
62                         throw new IllegalArgumentException();\r
63                 }\r
64 \r
65                 if (archiveFile.exists() && archiveFile.isDirectory()) {\r
66                         // ディレクトリの場合\r
67                         return new CharacterDataDirectoryFile(archiveFile);\r
68                 }\r
69                 \r
70                 // zipまたはcmjファイルの場合\r
71                 String name = archiveFile.getName().toLowerCase();\r
72                 if (name.endsWith(".jar") || name.endsWith(".cmj")) {\r
73                         return new CharacterDataJarArchiveFile(archiveFile);\r
74 \r
75                 } else if (name.endsWith(".zip")) {\r
76                         return new CharacterDataZipArchiveFile(archiveFile);\r
77                 }\r
78                 \r
79                 throw new IOException("unsupported file type: " + name);\r
80         }\r
81         \r
82 }\r