• R/O
  • HTTP
  • SSH
  • HTTPS

CharacterManaJ: Commit

キャラクターなんとかJの本体


Commit MetaInfo

Revisioncbeae5255a8af13f6ac148e2d436a61bc3d016a6 (tree)
Time2019-02-07 08:29:29
Authorseraphy <seraphy@user...>
Commiterseraphy

Log Message

お勧めリスト補完の修正

Change Summary

Incremental Difference

--- a/src/main/java/charactermanaj/model/io/CharacterDataPersistent.java
+++ b/src/main/java/charactermanaj/model/io/CharacterDataPersistent.java
@@ -37,6 +37,7 @@ import charactermanaj.model.CustomLayerOrder;
3737 import charactermanaj.model.CustomLayerOrderKey;
3838 import charactermanaj.model.Layer;
3939 import charactermanaj.model.PartsCategory;
40+import charactermanaj.model.RecommendationURL;
4041 import charactermanaj.model.io.CharacterDataDefaultProvider.DefaultCharacterDataVersion;
4142 import charactermanaj.util.DirectoryConfig;
4243 import charactermanaj.util.FileNameNormalizer;
@@ -1010,14 +1011,59 @@ public class CharacterDataPersistent {
10101011 if (characterData == null) {
10111012 throw new IllegalArgumentException();
10121013 }
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+ }
10161066 }
1017- CharacterDataDefaultProvider defProv = new CharacterDataDefaultProvider();
1018- CharacterData defaultCd = defProv
1019- .createDefaultCharacterData(DefaultCharacterDataVersion.V3);
1020- characterData.setRecommendationURLList(defaultCd
1021- .getRecommendationURLList());
1067+ return recommendations;
10221068 }
10231069 }
--- a/src/main/java/charactermanaj/model/io/CharacterDataXMLWriter.java
+++ b/src/main/java/charactermanaj/model/io/CharacterDataXMLWriter.java
@@ -277,8 +277,8 @@ public class CharacterDataXMLWriter {
277277 }
278278
279279 // Recommendations
280- List<RecommendationURL> recommendations = characterData
281- .getRecommendationURLList();
280+ List<RecommendationURL> recommendations = CharacterDataPersistent.getInstance()
281+ .getUncompensateRecommendationList(characterData); // 補完解除されたお勧めリストを取得する。
282282 if (recommendations != null) {
283283 Element nodeRecommendations = doc.createElementNS(NS,
284284 "recommendations");
--- a/src/main/java/charactermanaj/ui/ProfileEditDialog.java
+++ b/src/main/java/charactermanaj/ui/ProfileEditDialog.java
@@ -72,8 +72,6 @@ import charactermanaj.model.PartsCategory;
7272 import charactermanaj.model.PartsIdentifier;
7373 import charactermanaj.model.PartsSet;
7474 import charactermanaj.model.RecommendationURL;
75-import charactermanaj.model.io.CharacterDataDefaultProvider;
76-import charactermanaj.model.io.CharacterDataDefaultProvider.DefaultCharacterDataVersion;
7775 import charactermanaj.model.io.CharacterDataPersistent;
7876 import charactermanaj.ui.model.AbstractTableModelWithComboBoxModel;
7977 import charactermanaj.ui.util.ScaleSupport;
@@ -1219,13 +1217,12 @@ public class ProfileEditDialog extends JDialog {
12191217 partssetsTableModel.setDefaultPartsSetId(original.getDefaultPartsSetId());
12201218
12211219 // お勧めリンク
1220+ CharacterDataPersistent persist = CharacterDataPersistent.getInstance();
12221221 List<RecommendationURL> recommendationURLList = original.getRecommendationURLList();
12231222 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);
12291226 }
12301227 if (recommendationURLList != null) {
12311228 for (RecommendationURL recommendationURL : recommendationURLList) {
@@ -1234,7 +1231,6 @@ public class ProfileEditDialog extends JDialog {
12341231 }
12351232 }
12361233
1237-
12381234 protected void onOpenDir() {
12391235 try {
12401236 URI docBase = original.getDocBase();
@@ -1470,14 +1466,6 @@ public class ProfileEditDialog extends JDialog {
14701466 recommendationURLList.add(recommendationURL);
14711467 }
14721468 }
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- }
14811469 cd.setRecommendationURLList(recommendationURLList);
14821470
14831471 return cd;
--- a/src/main/java/charactermanaj/ui/ProfileListManager.java
+++ b/src/main/java/charactermanaj/ui/ProfileListManager.java
@@ -441,7 +441,7 @@ public final class ProfileListManager {
441441 // rev:c587663f3dda3a4a874ef6810a336126f07d482c まではMainFrameのお薦めリンクメニュー構築時に補完していた。
442442 // キャラクターデータのダウンロード問い合わせ対応のため、ここで先に補完しておく。
443443 if (characterData.getRecommendationURLList() == null) {
444- CharacterData v2 = defProv.createDefaultCharacterData(DefaultCharacterDataVersion.V3);
444+ CharacterData v2 = defProv.createDefaultCharacterData(DefaultCharacterDataVersion.V2);
445445 if (v2.toStructureString().equals(structureSig) || v3.toStructureString().equals(structureSig)) {
446446 // デフォルトのキャラクターセット(v2, v3)と同一構造であれば、デフォルトで補完する
447447 final CharacterDataPersistent persistent = CharacterDataPersistent.getInstance();
Show on old repository browser