1 package charactermanaj.model.io;
\r
4 import java.io.FileFilter;
\r
5 import java.util.HashMap;
\r
6 import java.util.Map;
\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
17 * ディレクトリを指定して、そこからキャラクターのパーツデータをロードするローダー.<br>
\r
22 public class FilePartsDataLoader implements PartsDataLoader {
\r
27 private File baseDir;
\r
29 public FilePartsDataLoader(File baseDir) {
\r
30 if (baseDir == null) {
\r
31 throw new IllegalArgumentException();
\r
33 this.baseDir = baseDir;
\r
36 public File getBaseDir() {
\r
40 public Map<PartsIdentifier, PartsSpec> load(PartsCategory category) {
\r
41 if (category == null) {
\r
42 throw new IllegalArgumentException();
\r
45 FileNameNormalizer normalizer = FileNameNormalizer.getDefault();
\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
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
62 if (imgFiles == null) {
\r
63 imgFiles = new File[0];
\r
65 for (File imgFile : imgFiles) {
\r
66 String partsName = normalizer.normalize(imgFile.getName());
\r
68 int extpos = partsName.lastIndexOf(".");
\r
70 partsName = partsName.substring(0, extpos);
\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
78 PartsFiles parts = partsSpec.getPartsFiles();
\r
79 parts.put(layer, new FileImageResource(imgFile));
\r
85 protected PartsSpec createPartsSpec(PartsIdentifier partsIdentifier) {
\r
86 return new PartsSpec(partsIdentifier);
\r