OSDN Git Service

dmg作成バージョンの取得方法の修正
[charactermanaj/CharacterManaJ.git] / src / main / java / charactermanaj / model / io / PartsImageCollectionParser.java
1 package charactermanaj.model.io;\r
2 \r
3 import java.util.List;\r
4 import java.util.Map;\r
5 \r
6 import charactermanaj.graphics.filters.ColorConvertParameter;\r
7 import charactermanaj.graphics.io.ImageResource;\r
8 import charactermanaj.model.ColorInfo;\r
9 import charactermanaj.model.Layer;\r
10 import charactermanaj.model.PartsColorInfo;\r
11 import charactermanaj.model.PartsFiles;\r
12 import charactermanaj.model.PartsIdentifier;\r
13 import charactermanaj.model.PartsSet;\r
14 import charactermanaj.model.PartsSpec;\r
15 import charactermanaj.model.PartsSpecResolver;\r
16 \r
17 /**\r
18  * パーツセットから複合画像イメージを生成するために必要なイメージリソースを抽出する.\r
19  * @author seraphy\r
20  *\r
21  */\r
22 public class PartsImageCollectionParser {\r
23 \r
24         /**\r
25          * 抽出された複合画像イメージの個々のイメージソースと、カラー情報を受け取るハンドラ.<br>\r
26          * @author seraphy\r
27          */\r
28         public interface PartsImageCollectionHandler {\r
29                 \r
30                 /**\r
31                  * 個々のイメージリソースとカラー情報を受け取るハンドラ.<br>\r
32                  *  \r
33                  * @param partsIdentifier 対象のパーツ識別子\r
34                  * @param layer パーツのレイヤー\r
35                  * @param imageResource パーツのレイヤーの画像リソース\r
36                  * @param param カラー情報、設定されていない場合はnull\r
37                  */\r
38                 void detectImageSource(PartsIdentifier partsIdentifier,\r
39                                 Layer layer, ImageResource imageResource,\r
40                                 ColorConvertParameter param);\r
41         }\r
42         \r
43         /**\r
44          * パーツ設定を解決するためのインターフェイス\r
45          */\r
46         protected PartsSpecResolver partsSpecResolver;\r
47         \r
48         /**\r
49          * パーツ設定のリゾルバを指定して構築する\r
50          * @param partsSpecResolver パーツ設定のリゾルバ\r
51          */\r
52         public PartsImageCollectionParser(PartsSpecResolver partsSpecResolver) {\r
53                 if (partsSpecResolver == null) {\r
54                         throw new IllegalArgumentException("resolver is null");\r
55                 }\r
56                 this.partsSpecResolver = partsSpecResolver;\r
57         }\r
58         \r
59         public PartsSpecResolver getPartsSpecResolver() {\r
60                 return this.partsSpecResolver;\r
61         }\r
62 \r
63         /**\r
64          * パーツセットを指定して複合画像を生成するために必要なイメージソースおよびカラー設定を解決する.<br>\r
65          * protectedなので派生クラスで呼び出すか、publicに昇格させる.<br>\r
66          * @param partsSet パーツセット\r
67          */\r
68         public void parse(PartsSet partsSet, PartsImageCollectionHandler listener) {\r
69                 if (listener == null) {\r
70                         throw new IllegalArgumentException("listener is null");\r
71                 }\r
72                 if (partsSet == null) {\r
73                         throw new IllegalArgumentException("PartsSet is null");\r
74                 }\r
75 \r
76                 for (List<PartsIdentifier> partsIdentifiers : partsSet.values()) {\r
77                         for (PartsIdentifier partsIdentifier : partsIdentifiers) {\r
78                                 PartsColorInfo partsColorInfo = partsSet.getColorInfo(partsIdentifier);\r
79                                 PartsSpec partsSpec = partsSpecResolver.getPartsSpec(partsIdentifier);\r
80                                 if (partsSpec != null) {\r
81                                         PartsFiles partsFiles = partsSpec.getPartsFiles();\r
82                                         for (Map.Entry<Layer, ImageResource> entry : partsFiles.entrySet()) {\r
83                                                 Layer layer = entry.getKey();\r
84                                                 ImageResource file = entry.getValue();\r
85                                                 ColorConvertParameter param = null;\r
86                                                 if (partsColorInfo != null) {\r
87                                                         ColorInfo colorInfo = partsColorInfo.get(layer);\r
88                                                         if (colorInfo != null) {\r
89                                                                 param = colorInfo.getColorParameter();\r
90                                                         }\r
91                                                 }\r
92                                                 listener.detectImageSource(partsIdentifier, layer, file, param);\r
93                                         }\r
94                                 }\r
95                         }\r
96                 }\r
97         }\r
98         \r
99 }\r