1 package charactermanaj.model.io;
\r
3 import java.util.Collection;
\r
4 import java.util.Collections;
\r
5 import java.util.Map;
\r
6 import java.util.regex.Matcher;
\r
7 import java.util.regex.Pattern;
\r
9 import charactermanaj.model.AppConfig;
\r
10 import charactermanaj.model.ColorGroup;
\r
11 import charactermanaj.model.PartsCategory;
\r
12 import charactermanaj.model.PartsIdentifier;
\r
13 import charactermanaj.model.PartsSpec;
\r
16 * パーツ名の末尾が、カラーグループの表記を括弧でくくったものと同じであれば、
\r
17 * そのパーツ固有のカラーグループとして設定するためのデコレータ.<br>
\r
18 * このクラス自身はパーツのロードは行わず、コンストラクタで指定したローダーによりロードを行い、
\r
19 * その結果に対してカラーグループの設定を行う.<br>
\r
24 public class PartsSpecDecorateLoader implements PartsDataLoader {
\r
26 private PartsDataLoader parent;
\r
28 private Collection<ColorGroup> colorGroups;
\r
31 * パーツローダとカラーグループを指定して構築する.
\r
32 * @param parent 元パーツローダー
\r
33 * @param colorGroups カラーグループのコレクション、nullの場合は空とみなす.
\r
35 public PartsSpecDecorateLoader(PartsDataLoader parent, Collection<ColorGroup> colorGroups) {
\r
36 if (parent == null) {
\r
37 throw new IllegalArgumentException();
\r
39 if (colorGroups == null) {
\r
40 colorGroups = Collections.emptyList();
\r
42 this.parent = parent;
\r
43 this.colorGroups = colorGroups;
\r
46 public Map<PartsIdentifier, PartsSpec> load(PartsCategory category) {
\r
47 Map<PartsIdentifier, PartsSpec> partsSpecs = parent.load(category);
\r
48 decolatePartsSpec(partsSpecs);
\r
53 * パーツ識別子の表示名に、カラーグループの表示名により判定されるパターンに合致する場合、
\r
54 * パーツ設定のカラーグループを、そのカラーグループとして設定する.
\r
55 * @param partsSpecs パーツマップ
\r
57 protected void decolatePartsSpec(Map<PartsIdentifier, PartsSpec> partsSpecs) {
\r
58 String templ = AppConfig.getInstance().getPartsColorGroupPattern();
\r
59 if (templ == null || templ.trim().length() == 0) {
\r
60 // パターンが設定されていない場合は無視する.
\r
63 // パーツ名にカラーグループが含まれる場合、それを登録する.
\r
64 for (ColorGroup colorGroup : colorGroups) {
\r
65 String pattern = templ.replace("@", colorGroup.getLocalizedName());
\r
66 Pattern pat = Pattern.compile(pattern);
\r
67 for (PartsSpec partsSpec : partsSpecs.values()) {
\r
68 Matcher mat = pat.matcher(partsSpec.getPartsIdentifier()
\r
69 .getLocalizedPartsName());
\r
70 if (mat.matches()) {
\r
71 partsSpec.setColorGroup(colorGroup);
\r