[LIB-9] Separate chesshog-graphics module
[chesshog.git] / chesshog-graphics / src / main / java / org / hedgecode / chess / img / piece / PieceSetLoader.java
 
 package org.hedgecode.chess.img.piece;
 
-import java.io.File;
-import java.io.IOException;
+import java.awt.image.BufferedImage;
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.imageio.ImageIO;
-
 import org.hedgecode.chess.img.AbstractImageLoader;
+import org.hedgecode.chess.img.FilenameUtils;
 import org.hedgecode.chess.img.ImageConstants;
 import org.hedgecode.chess.img.ImageException;
 import org.hedgecode.chess.img.ImageFilter;
@@ -35,7 +33,7 @@ import org.hedgecode.chess.img.ImageFilter;
  */
 public class PieceSetLoader extends AbstractImageLoader {
 
-    private static final File PIECES_PATH = new File(IMAGES_PATH, ImageConstants.RESOURCE_PIECES_DIR);
+    private static final String PIECES_DIR = ImageConstants.RESOURCE_PIECES_DIR;
 
     private static final String[] PIECES_NAMES = PieceSet.getAllPieceNames();
 
@@ -43,12 +41,10 @@ public class PieceSetLoader extends AbstractImageLoader {
 
     @Override
     public PieceSet load(String name) throws ImageException {
-        PieceSet pieceSet = null;
+        PieceSet pieceSet;
         if (Type.STATELESS.equals(loadType()) || !pieceSetMap.containsKey(name)) {
-            File piecePath = new File(PIECES_PATH, name);
-            if (piecePath.exists() && piecePath.isDirectory()) {
-                pieceSet = loadPieces(piecePath);
-            }
+            String piecePath = FilenameUtils.getFullPath(PIECES_DIR, name);
+            pieceSet = loadPieces(piecePath);
             if (Type.STATEFUL.equals(loadType()) && pieceSet != null) {
                 pieceSetMap.put(name, pieceSet);
             }
@@ -70,25 +66,22 @@ public class PieceSetLoader extends AbstractImageLoader {
         pieceSetMap.clear();
     }
 
-    private PieceSet loadPieces(File piecePath) throws ImageException {
+    private PieceSet loadPieces(String piecePath) throws ImageException {
         PieceSet pieceSet = PieceSet.create();
-        File[] images = piecePath.listFiles(new ImageFilter(PIECES_NAMES));
-        if (images != null) {
-            for (File image : images) {
-                if (image.isFile()) {
-                    String filename = image.getName();
-                    try {
-                        pieceSet.add(
-                                filename.substring(0, filename.lastIndexOf('.')),
-                                ImageIO.read(image)
-                        );
-                    } catch (IOException e) {
-                        throw new ImageException(e.getMessage()); // todo: locale
-                    }
-                }
-            }
+        Map<String, BufferedImage> images =
+                loadImages(
+                        piecePath,
+                        new ImageFilter(PIECES_NAMES)
+                );
+        for (String name : PIECES_NAMES) {
+            pieceSet.add(
+                    name,
+                    images.get(name)
+            );
         }
-        return pieceSet.isFull() ? pieceSet : null;
+        return pieceSet.isFull()
+                ? pieceSet
+                : null; // todo: ImageException
     }
 
 }