OSDN Git Service

a7a29e07096c59bf2fefcd0ebe8e17678c1734a8
[mikutoga/Pmd2XML.git] / src / main / java / jp / sfjp / mikutoga / pmd / model / ToonMap.java
1 /*
2  * toon file mapping
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.pmd.model;
9
10 import java.util.Collections;
11 import java.util.Map;
12 import java.util.TreeMap;
13
14 /**
15  * インデックス化されたトゥーンファイル構成。
16  * 既存のトゥーンファイル構成と異なるトゥーンファイル名を用いることが可能。
17  * <h1>デフォルトのトゥーンファイル構成。</h1>
18  * <ul>
19  * <li>0x00:toon01.bmp
20  * <li>0x01:toon02.bmp
21  * <li>.....
22  * <li>0x09:toon10.bmp
23  * <li>0xff:toon0.bmp
24  * </ul>
25  */
26 public class ToonMap {
27
28     /** カスタムトゥーンファイルの総数。 */
29     public static final int MAX_CUSTOM_TOON = 10;
30
31     private static final Map<Integer, String> DEF_TOONMAP;
32
33     private static final int IDX_SP = 0xff;  // 特殊トゥーンのインデックス
34
35     static{
36         Map<Integer, String> map = new TreeMap<Integer, String>();
37
38         int idx = 0x00;
39         map.put(idx++, "toon01.bmp");
40         map.put(idx++, "toon02.bmp");
41         map.put(idx++, "toon03.bmp");
42         map.put(idx++, "toon04.bmp");
43         map.put(idx++, "toon05.bmp");
44         map.put(idx++, "toon06.bmp");
45         map.put(idx++, "toon07.bmp");
46         map.put(idx++, "toon08.bmp");
47         map.put(idx++, "toon09.bmp");
48         map.put(idx++, "toon10.bmp");
49         map.put(IDX_SP, "toon0.bmp");
50
51         assert idx == MAX_CUSTOM_TOON;
52
53         DEF_TOONMAP = Collections.unmodifiableMap(map);
54
55         assert DEF_TOONMAP.size() == MAX_CUSTOM_TOON + 1;
56     }
57
58
59     private final Map<Integer, String> toonDefMap =
60             new TreeMap<Integer, String>(DEF_TOONMAP);
61
62
63     /**
64      * コンストラクタ。
65      */
66     public ToonMap(){
67         super();
68         return;
69     }
70
71
72     /**
73      * 指定したインデックス値に対応したトゥーンファイル名を返す。
74      * @param idx インデックス値
75      * @return トゥーンファイル名。該当するものがなければnull
76      */
77     public String getIndexedToon(int idx){
78         String result = this.toonDefMap.get(idx);
79         return result;
80     }
81
82     /**
83      * 指定したインデックス値にトゥーンファイル名を設定する。
84      * @param idx インデックス値
85      * @param toonFileName トゥーンフィル名
86      * @throws NullPointerException トゥーンファイル名がnull
87      */
88     public void setIndexedToon(int idx, String toonFileName)
89             throws NullPointerException{
90         if(toonFileName == null) throw new NullPointerException();
91         this.toonDefMap.put(idx, toonFileName);
92         return;
93     }
94
95     /**
96      * このトゥーンファイル構成が
97      * デフォルトのトゥーンファイル構成と等しいか判定する。
98      * @return 等しければtrue
99      */
100     public boolean isDefaultMap(){
101         boolean result = this.toonDefMap.equals(DEF_TOONMAP);
102         return result;
103     }
104
105     /**
106      * 指定インデックスのトゥーンファイル名がデフォルトと等しいか判定する。
107      * @param idx インデックス
108      * @return デフォルトと等しければtrue。
109      */
110     public boolean isDefaultToon(int idx){
111         String thisToon = this.toonDefMap.get(idx);
112         if(thisToon == null) return false;
113
114         String defToon = DEF_TOONMAP.get(idx);
115
116         boolean result = thisToon.equals(defToon);
117
118         return result;
119     }
120
121     /**
122      * このトゥーンファイル構成をデフォルト構成内容でリセットする。
123      */
124     public void resetDefaultMap(){
125         this.toonDefMap.clear();
126         this.toonDefMap.putAll(DEF_TOONMAP);
127         return;
128     }
129
130     /**
131      * 指定インデックスのトゥーンファイル名を
132      * デフォルトのトゥーンファイル名にリセットする。
133      * @param idx インデックス値
134      */
135     public void resetIndexedToon(int idx){
136         String toonFile = DEF_TOONMAP.get(idx);
137         this.toonDefMap.put(idx, toonFile);
138         return;
139     }
140
141     /**
142      * {@inheritDoc}
143      * @return {@inheritDoc}
144      */
145     @Override
146     public String toString(){
147         StringBuilder result = new StringBuilder();
148
149         boolean dumped = false;
150         for(Map.Entry<Integer, String> entry : this.toonDefMap.entrySet()){
151             Integer idx = entry.getKey();
152             String toonFile = entry.getValue();
153
154             if(dumped) result.append(", ");
155             result.append('(').append(idx).append(')');
156             result.append(toonFile);
157             dumped = true;
158         }
159
160         return result.toString();
161     }
162
163 }