OSDN Git Service

924080fa42149fdda1ed5b9233d79b2304710f90
[charactermanaj/CharacterManaJ.git] / src / charactermanaj / model / io / FilePartsDataLoader.java
1 package charactermanaj.model.io;\r
2 \r
3 import java.io.File;\r
4 import java.io.FileFilter;\r
5 import java.util.HashMap;\r
6 import java.util.Map;\r
7 \r
8 import charactermanaj.graphics.io.FileImageResource;\r
9 import charactermanaj.model.Layer;\r
10 import charactermanaj.model.PartsCategory;\r
11 import charactermanaj.model.PartsFiles;\r
12 import charactermanaj.model.PartsIdentifier;\r
13 import charactermanaj.model.PartsSpec;\r
14 import charactermanaj.util.FileNameNormalizer;\r
15 \r
16 /**\r
17  * ディレクトリを指定して、そこからキャラクターのパーツデータをロードするローダー.<br>\r
18  * \r
19  * @author seraphy\r
20  * \r
21  */\r
22 public class FilePartsDataLoader implements PartsDataLoader {\r
23 \r
24         /**\r
25          * ベースディレクトリ\r
26          */\r
27         private File baseDir;\r
28         \r
29         public FilePartsDataLoader(File baseDir) {\r
30                 if (baseDir == null) {\r
31                         throw new IllegalArgumentException();\r
32                 }\r
33                 this.baseDir = baseDir;\r
34         }\r
35         \r
36         public File getBaseDir() {\r
37                 return baseDir;\r
38         }\r
39         \r
40         public Map<PartsIdentifier, PartsSpec> load(PartsCategory category) {\r
41                 if (category == null) {\r
42                         throw new IllegalArgumentException();\r
43                 }\r
44                 // ファイル名をノーマライズする\r
45                 FileNameNormalizer normalizer = FileNameNormalizer.getDefault();\r
46 \r
47                 final Map<PartsIdentifier, PartsSpec> images = new HashMap<PartsIdentifier, PartsSpec>();\r
48                 for (Layer layer : category.getLayers()) {\r
49                         File searchDir = new File(baseDir, layer.getDir());\r
50                         if (!searchDir.exists() || !searchDir.isDirectory()) {\r
51                                 continue;\r
52                         }\r
53                         File[] imgFiles = searchDir.listFiles(new FileFilter() {\r
54                                 public boolean accept(File pathname) {\r
55                                         if (pathname.isFile()) {\r
56                                                 String lcfname = pathname.getName().toLowerCase();\r
57                                                 return lcfname.endsWith(".png");\r
58                                         }\r
59                                         return false;\r
60                                 }\r
61                         });\r
62                         if (imgFiles == null) {\r
63                                 imgFiles = new File[0];\r
64                         }\r
65                         for (File imgFile : imgFiles) {\r
66                                 String partsName = normalizer.normalize(imgFile.getName());\r
67 \r
68                                 int extpos = partsName.lastIndexOf(".");\r
69                                 if (extpos > 0) {\r
70                                         partsName = partsName.substring(0, extpos); \r
71                                 }\r
72                                 PartsIdentifier partsIdentifier = new PartsIdentifier(category, partsName, partsName);\r
73                                 PartsSpec partsSpec = images.get(partsIdentifier);\r
74                                 if (partsSpec == null) {\r
75                                         partsSpec = createPartsSpec(partsIdentifier);\r
76                                         images.put(partsIdentifier, partsSpec);\r
77                                 }\r
78                                 PartsFiles parts = partsSpec.getPartsFiles();\r
79                                 parts.put(layer, new FileImageResource(imgFile));\r
80                         }\r
81                 }\r
82                 return images;\r
83         }\r
84         \r
85         protected PartsSpec createPartsSpec(PartsIdentifier partsIdentifier) {\r
86                 return new PartsSpec(partsIdentifier);\r
87         }\r
88 \r
89 }\r