キャラクターなんとかJの本体
Revision | cbeae5255a8af13f6ac148e2d436a61bc3d016a6 (tree) |
---|---|
Time | 2019-02-07 08:29:29 |
Author | ![]() |
Commiter | seraphy |
お勧めリスト補完の修正
@@ -37,6 +37,7 @@ import charactermanaj.model.CustomLayerOrder; | ||
37 | 37 | import charactermanaj.model.CustomLayerOrderKey; |
38 | 38 | import charactermanaj.model.Layer; |
39 | 39 | import charactermanaj.model.PartsCategory; |
40 | +import charactermanaj.model.RecommendationURL; | |
40 | 41 | import charactermanaj.model.io.CharacterDataDefaultProvider.DefaultCharacterDataVersion; |
41 | 42 | import charactermanaj.util.DirectoryConfig; |
42 | 43 | import charactermanaj.util.FileNameNormalizer; |
@@ -1010,14 +1011,59 @@ public class CharacterDataPersistent { | ||
1010 | 1011 | if (characterData == null) { |
1011 | 1012 | throw new IllegalArgumentException(); |
1012 | 1013 | } |
1013 | - if (characterData.getRecommendationURLList() != null) { | |
1014 | - // 補填の必要なし | |
1015 | - return; | |
1014 | + | |
1015 | + // キャラクターデータの構造がデフォルトのv2, v3と同一であれば、対応するリンクを設定する | |
1016 | + List<RecommendationURL> recommendations = getCompensateRecommendationList(characterData); | |
1017 | + if (recommendations != null) { | |
1018 | + characterData.setRecommendationURLList(recommendations); | |
1019 | + } | |
1020 | + } | |
1021 | + | |
1022 | + /** | |
1023 | + * キャラクターデータに対するお勧めリストの補完が必要であれば、そのリストを返す。 | |
1024 | + * すでに設定済みであるか、対応する補完リストがない場合はnullを返す。 | |
1025 | + * @param characterData | |
1026 | + * @return お勧めリスト、もしくはnull | |
1027 | + */ | |
1028 | + public List<RecommendationURL> getCompensateRecommendationList(CharacterData characterData) { | |
1029 | + if (characterData.getRecommendationURLList() == null) { | |
1030 | + // 補填の必要ある場合のみ | |
1031 | + CharacterDataDefaultProvider defProv = new CharacterDataDefaultProvider(); | |
1032 | + for (DefaultCharacterDataVersion dataVersion : DefaultCharacterDataVersion.values()) { | |
1033 | + CharacterData defaultCd = defProv.createDefaultCharacterData(dataVersion); | |
1034 | + if (defaultCd.toSignatureString().equals(characterData.toSignatureString())) { | |
1035 | + return defaultCd.getRecommendationURLList(); | |
1036 | + } | |
1037 | + } | |
1038 | + } | |
1039 | + return null; | |
1040 | + } | |
1041 | + | |
1042 | + /** | |
1043 | + * 補完されたものを除いたお勧めリストを取得する。 | |
1044 | + * デフォルト構造でデフォルトと同一のお勧めリストの場合、補完されたものとしてnullを返す。 | |
1045 | + * それ以外はお勧めリストをそのまま返す。 | |
1046 | + * @param cd | |
1047 | + */ | |
1048 | + public List<RecommendationURL> getUncompensateRecommendationList(CharacterData cd) { | |
1049 | + // デフォルトのキャラクターデータ構造で、 | |
1050 | + // お勧めリストと内容が同じの場合は、明示的にリストを設定しない. | |
1051 | + String cdSig = cd.toStructureString(); | |
1052 | + List<RecommendationURL> recommendations = cd.getRecommendationURLList(); | |
1053 | + if (recommendations != null) { | |
1054 | + CharacterDataDefaultProvider defProv = new CharacterDataDefaultProvider(); | |
1055 | + for (DefaultCharacterDataVersion dataVersion : DefaultCharacterDataVersion.values()) { | |
1056 | + CharacterData defaultCd = defProv.createDefaultCharacterData(dataVersion); | |
1057 | + String defSig = defaultCd.toStructureString(); | |
1058 | + if (cdSig.equals(defSig)) { | |
1059 | + List<RecommendationURL> defaultRecommendationURLList = defaultCd.getRecommendationURLList(); | |
1060 | + if (defaultRecommendationURLList != null && defaultRecommendationURLList.equals(recommendations)) { | |
1061 | + recommendations = null; | |
1062 | + break; | |
1063 | + } | |
1064 | + } | |
1065 | + } | |
1016 | 1066 | } |
1017 | - CharacterDataDefaultProvider defProv = new CharacterDataDefaultProvider(); | |
1018 | - CharacterData defaultCd = defProv | |
1019 | - .createDefaultCharacterData(DefaultCharacterDataVersion.V3); | |
1020 | - characterData.setRecommendationURLList(defaultCd | |
1021 | - .getRecommendationURLList()); | |
1067 | + return recommendations; | |
1022 | 1068 | } |
1023 | 1069 | } |
@@ -277,8 +277,8 @@ public class CharacterDataXMLWriter { | ||
277 | 277 | } |
278 | 278 | |
279 | 279 | // Recommendations |
280 | - List<RecommendationURL> recommendations = characterData | |
281 | - .getRecommendationURLList(); | |
280 | + List<RecommendationURL> recommendations = CharacterDataPersistent.getInstance() | |
281 | + .getUncompensateRecommendationList(characterData); // 補完解除されたお勧めリストを取得する。 | |
282 | 282 | if (recommendations != null) { |
283 | 283 | Element nodeRecommendations = doc.createElementNS(NS, |
284 | 284 | "recommendations"); |
@@ -72,8 +72,6 @@ import charactermanaj.model.PartsCategory; | ||
72 | 72 | import charactermanaj.model.PartsIdentifier; |
73 | 73 | import charactermanaj.model.PartsSet; |
74 | 74 | import charactermanaj.model.RecommendationURL; |
75 | -import charactermanaj.model.io.CharacterDataDefaultProvider; | |
76 | -import charactermanaj.model.io.CharacterDataDefaultProvider.DefaultCharacterDataVersion; | |
77 | 75 | import charactermanaj.model.io.CharacterDataPersistent; |
78 | 76 | import charactermanaj.ui.model.AbstractTableModelWithComboBoxModel; |
79 | 77 | import charactermanaj.ui.util.ScaleSupport; |
@@ -1219,13 +1217,12 @@ public class ProfileEditDialog extends JDialog { | ||
1219 | 1217 | partssetsTableModel.setDefaultPartsSetId(original.getDefaultPartsSetId()); |
1220 | 1218 | |
1221 | 1219 | // お勧めリンク |
1220 | + CharacterDataPersistent persist = CharacterDataPersistent.getInstance(); | |
1222 | 1221 | List<RecommendationURL> recommendationURLList = original.getRecommendationURLList(); |
1223 | 1222 | if (recommendationURLList == null) { |
1224 | - // キャラクターデータのお勧めリンクがnull(古い形式)の場合は、デフォルトのお勧めリンクで代替する. | |
1225 | - CharacterDataDefaultProvider defProv = new CharacterDataDefaultProvider(); | |
1226 | - CharacterData defaultCd = defProv | |
1227 | - .createDefaultCharacterData(DefaultCharacterDataVersion.V3); | |
1228 | - recommendationURLList = defaultCd.getRecommendationURLList(); | |
1223 | + // お勧めリンクが設定されていない場合は、キャラクターデータに対応する | |
1224 | + // 既定のお勧めリストがあれば取得する (なければnull) | |
1225 | + recommendationURLList = persist.getCompensateRecommendationList(original); | |
1229 | 1226 | } |
1230 | 1227 | if (recommendationURLList != null) { |
1231 | 1228 | for (RecommendationURL recommendationURL : recommendationURLList) { |
@@ -1234,7 +1231,6 @@ public class ProfileEditDialog extends JDialog { | ||
1234 | 1231 | } |
1235 | 1232 | } |
1236 | 1233 | |
1237 | - | |
1238 | 1234 | protected void onOpenDir() { |
1239 | 1235 | try { |
1240 | 1236 | URI docBase = original.getDocBase(); |
@@ -1470,14 +1466,6 @@ public class ProfileEditDialog extends JDialog { | ||
1470 | 1466 | recommendationURLList.add(recommendationURL); |
1471 | 1467 | } |
1472 | 1468 | } |
1473 | - CharacterDataDefaultProvider defProv = new CharacterDataDefaultProvider(); | |
1474 | - CharacterData defaultCd = defProv | |
1475 | - .createDefaultCharacterData(DefaultCharacterDataVersion.V3); | |
1476 | - List<RecommendationURL> defaultRecommendationURLList = defaultCd.getRecommendationURLList(); | |
1477 | - if (defaultRecommendationURLList != null && defaultRecommendationURLList.equals(recommendationURLList)) { | |
1478 | - // デフォルトのお勧めリストと内容が同じの場合は、明示的にリストを設定しない. | |
1479 | - recommendationURLList = null; | |
1480 | - } | |
1481 | 1469 | cd.setRecommendationURLList(recommendationURLList); |
1482 | 1470 | |
1483 | 1471 | return cd; |
@@ -441,7 +441,7 @@ public final class ProfileListManager { | ||
441 | 441 | // rev:c587663f3dda3a4a874ef6810a336126f07d482c まではMainFrameのお薦めリンクメニュー構築時に補完していた。 |
442 | 442 | // キャラクターデータのダウンロード問い合わせ対応のため、ここで先に補完しておく。 |
443 | 443 | if (characterData.getRecommendationURLList() == null) { |
444 | - CharacterData v2 = defProv.createDefaultCharacterData(DefaultCharacterDataVersion.V3); | |
444 | + CharacterData v2 = defProv.createDefaultCharacterData(DefaultCharacterDataVersion.V2); | |
445 | 445 | if (v2.toStructureString().equals(structureSig) || v3.toStructureString().equals(structureSig)) { |
446 | 446 | // デフォルトのキャラクターセット(v2, v3)と同一構造であれば、デフォルトで補完する |
447 | 447 | final CharacterDataPersistent persistent = CharacterDataPersistent.getInstance(); |