• R/O
  • HTTP
  • SSH
  • HTTPS

CharacterManaJ: Commit

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


Commit MetaInfo

Revisione45260e3aee145c1f734da5f9da61fa69a2dfe30 (tree)
Time2019-03-31 23:14:57
Authorseraphy <seraphy@user...>
Commiterseraphy

Log Message

キャラクターデータの初回インボード時に必ず失敗していた問題の修正

Change Summary

Incremental Difference

--- a/src/main/java/charactermanaj/model/io/CharacterDataDefaultProvider.java
+++ b/src/main/java/charactermanaj/model/io/CharacterDataDefaultProvider.java
@@ -100,7 +100,7 @@ public class CharacterDataDefaultProvider {
100100 cd = prov.loadPredefinedCharacterData(reskey);
101101 cache = new SoftReference<CharacterData>(cd);
102102 }
103- return cd;
103+ return cd.duplicateBasicInfo();
104104
105105 } catch (IOException ex) {
106106 throw new RuntimeException(
--- a/src/main/java/charactermanaj/model/io/CharacterDataIniReader.java
+++ b/src/main/java/charactermanaj/model/io/CharacterDataIniReader.java
@@ -19,7 +19,7 @@ import charactermanaj.model.io.CharacterDataDefaultProvider.DefaultCharacterData
1919
2020 /**
2121 * character.iniファイルを読み込むためのクラス.
22- *
22+ *
2323 * @author seraphy
2424 */
2525 public class CharacterDataIniReader {
@@ -33,7 +33,7 @@ public class CharacterDataIniReader {
3333 /**
3434 * character.iniファイルから、キャラクター定義を生成します.<br>
3535 * docBaseは設定されていないため、戻り値に設定する必要があります.<br>
36- *
36+ *
3737 * @param is
3838 * character.iniの入力ストリーム
3939 * @param version
--- a/src/main/java/charactermanaj/ui/ImportWizardDialog.java
+++ b/src/main/java/charactermanaj/ui/ImportWizardDialog.java
@@ -145,7 +145,7 @@ public class ImportWizardDialog extends JDialog {
145145 * 現在表示中もしくは選択中のプロファイル.<br>
146146 * 新規の場合はnull
147147 */
148- protected CharacterData current;
148+ private final CharacterData targetCd;
149149
150150
151151 private CardLayout mainPanelLayout;
@@ -179,7 +179,14 @@ public class ImportWizardDialog extends JDialog {
179179 */
180180 public ImportWizardDialog(JFrame parent, CharacterData current) {
181181 super(parent, true);
182- initComponent(parent, current);
182+ this.targetCd = current;
183+ if (targetCd != null && !targetCd.getDocBase().getScheme().equals("file")) {
184+ throw new IllegalArgumentException("ファイルベース以外のキャラクターデータにインポートできません");
185+ }
186+ if (targetCd != null && !targetCd.isValid()) {
187+ throw new IllegalArgumentException("妥当でないキャラクターデータにはインポートできません");
188+ }
189+ initComponent();
183190 }
184191
185192 /**
@@ -192,7 +199,25 @@ public class ImportWizardDialog extends JDialog {
192199 */
193200 public ImportWizardDialog(JDialog parent, CharacterData current) {
194201 super(parent, true);
195- initComponent(parent, current);
202+ this.targetCd = current;
203+ if (targetCd != null && !targetCd.getDocBase().getScheme().equals("file")) {
204+ throw new IllegalArgumentException("ファイルベース以外のキャラクターデータにインポートできません");
205+ }
206+ if (targetCd != null && !targetCd.isValid()) {
207+ throw new IllegalArgumentException("妥当でないキャラクターデータにはインポートできません");
208+ }
209+ initComponent();
210+ }
211+
212+ /**
213+ * インポート先のキャラクターデータを返す。新規の場合はnull
214+ * @return インポート先、新規の場合はnull
215+ */
216+ public CharacterData getTargetCharacterData() {
217+ if (targetCd != null && !targetCd.getDocBase().getScheme().equals("file")) {
218+ throw new IllegalStateException("ファイルベース以外のキャラクターデータにインポートできません: " + targetCd);
219+ }
220+ return targetCd;
196221 }
197222
198223 /**
@@ -210,14 +235,8 @@ public class ImportWizardDialog extends JDialog {
210235 /**
211236 * ウィザードダイアログのコンポーネントを初期化します.<br>
212237 * currentがnullの場合は新規インポート、そうでない場合は更新インポートとります。
213- *
214- * @param parent
215- * 親コンテナ
216- * @param current
217- * インポート対象プロファイル、新規の場合はnull
218238 */
219- private void initComponent(Component parent, CharacterData current) {
220- this.current = current;
239+ private void initComponent() {
221240
222241 setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
223242 addWindowListener(new WindowAdapter() {
@@ -231,7 +250,7 @@ public class ImportWizardDialog extends JDialog {
231250 .getLocalizedProperties(STRINGS_RESOURCE);
232251
233252 // タイトル
234- if (current == null) {
253+ if (targetCd == null) {
235254 setTitle(strings.getProperty("title.new"));
236255 } else {
237256 setTitle(strings.getProperty("title.update"));
@@ -397,7 +416,7 @@ public class ImportWizardDialog extends JDialog {
397416 // HiDpi環境でのスケールを考慮したウィンドウサイズに補正する
398417 dim = scaleSupport.manualScaled(dim);
399418 setSize(dim);
400- setLocationRelativeTo(parent);
419+ setLocationRelativeTo(getParent());
401420
402421 mainPanelLayout.first(mainPanel);
403422 updateBtnPanelState();
@@ -486,13 +505,13 @@ public class ImportWizardDialog extends JDialog {
486505 int exitCode;
487506 CharacterData importedCharacterData;
488507 try {
489- if (current == null) {
508+ if (targetCd == null) {
490509 // 新規作成
491510 importedCharacterData = createNewProfile();
492511 exitCode = EXIT_PROFILE_CREATED;
493512 } else {
494513 // 更新
495- importedCharacterData = updateProfile();
514+ importedCharacterData = updateProfile(targetCd.duplicateBasicInfo());
496515 exitCode = EXIT_PROFILE_UPDATED;
497516 }
498517 } finally {
@@ -604,15 +623,9 @@ public class ImportWizardDialog extends JDialog {
604623 * @throws IOException
605624 * 失敗
606625 */
607- protected CharacterData updateProfile() throws IOException {
608- if (current == null || !current.isValid()) {
609- throw new IllegalStateException("current profile is not valid. :" + current);
610- }
611-
626+ protected CharacterData updateProfile(CharacterData characterData) throws IOException {
612627 CharacterDataPersistent persist = CharacterDataPersistent.getInstance();
613628
614- CharacterData characterData = current.duplicateBasicInfo(); // 現在のもの。(インポートしたものではない)
615-
616629 boolean imported = false;
617630 boolean modCharacterDef = false;
618631 boolean modFavories = false;
@@ -673,7 +686,7 @@ public class ImportWizardDialog extends JDialog {
673686 // キャラクター定義の更新
674687 if (modCharacterDef) {
675688 persist.updateProfile(characterData); // キャラクター定義の構造に変化なし
676- current.setDescription(characterData.getDescription());
689+ targetCd.setDescription(characterData.getDescription()); // 現在保持しているCdの説明文は更新しておく(念のため)
677690 }
678691 // お気に入りの更新
679692 if (modFavories) {
@@ -1172,7 +1185,7 @@ class ImportFileSelectPanel extends ImportWizardCardPanel {
11721185 }
11731186
11741187 try {
1175- parent.importModel.openImportSource(importArchive, parent.current);
1188+ parent.importModel.openImportSource(importArchive, parent.getTargetCharacterData());
11761189
11771190 // ワーカースレッドでアーカイブの読み込みを行う.
11781191 Worker<Void> worker = new Worker<Void>() {
@@ -1635,7 +1648,7 @@ class ImportTypeSelectPanel extends ImportWizardCardPanel {
16351648 .getLocalizedProperties(ImportWizardDialog.STRINGS_RESOURCE);
16361649
16371650 // 呼び出しもと情報
1638- CharacterData current = parent.current;
1651+ CharacterData current = parent.getTargetCharacterData();
16391652
16401653 // キャラクター定義情報
16411654 CharacterData cd = parent.importModel.getCharacterData();
@@ -1818,7 +1831,7 @@ class ImportTypeSelectPanel extends ImportWizardCardPanel {
18181831 @Override
18191832 public boolean isReadyFinish() {
18201833 if (!isImportPartsImages() && !isImportPreset()) {
1821- if ((parent != null && parent.current == null)
1834+ if ((parent != null && parent.getTargetCharacterData() == null)
18221835 || isImportSampleImage()) {
18231836 // 新規プロファイル作成か、サンプルイメージの更新のみで
18241837 // イメージもパーツセットもいらなければ、ただちに作成可能.
@@ -2123,13 +2136,14 @@ class ImportPartsSelectPanel extends ImportWizardCardPanel {
21232136
21242137 // インポート対象のプロファイルサイズ
21252138 CharacterData characterData;
2126- if (parent.current == null) {
2139+ if (parent.getTargetCharacterData() == null) {
21272140 // 新規インポート
21282141 characterData = parent.importModel.getCharacterData();
21292142 } else {
21302143 // 更新インポート
2131- characterData = parent.current;
2144+ characterData = parent.getTargetCharacterData();
21322145 }
2146+
21332147 int profileWidth = 0;
21342148 int profileHeight = 0;
21352149 if (characterData != null) {
@@ -2155,7 +2169,7 @@ class ImportPartsSelectPanel extends ImportWizardCardPanel {
21552169 actSort.setEnabled(enabled);
21562170 actSortByTimestamp.setEnabled(enabled);
21572171
2158- CharacterData currentProfile = parent.current;
2172+ CharacterData currentProfile = parent.getTargetCharacterData();
21592173 Collection<PartsImageContent> partsImageContents = parent.importModel.getPartsImageContents();
21602174 PartsManageData partsManageData = parent.importModel.getPartsManageData();
21612175 partsTableModel.initModel(partsImageContents, partsManageData, currentProfile);
@@ -2169,11 +2183,10 @@ class ImportPartsSelectPanel extends ImportWizardCardPanel {
21692183 }
21702184 }
21712185
2172- String defaultPartsSetId;
2173- CharacterData presetImportTarget;
2174- boolean selectAllPreset;
2175- if (parent.current == null) {
2176- presetImportTarget = null;
2186+ final String defaultPartsSetId;
2187+ final CharacterData presetImportTarget = parent.getTargetCharacterData();
2188+ final boolean selectAllPreset;
2189+ if (presetImportTarget == null) { // 新規の場合
21772190 CharacterData cd = parent.importModel.getCharacterData();
21782191 if (cd != null) {
21792192 defaultPartsSetId = cd.getDefaultPartsSetId();
@@ -2182,9 +2195,8 @@ class ImportPartsSelectPanel extends ImportWizardCardPanel {
21822195 }
21832196 selectAllPreset = true; // 新規プロファイルの場合はプリセットをインポートする
21842197 } else {
2185- presetImportTarget = parent.current;
21862198 defaultPartsSetId = null; // 既存の場合はデフォルトのパーツセットであるかは表示する必要ないのでnullにする.
2187- selectAllPreset = (parent.current.getPartsCount() == 0); // パーツが空の場合はプリセットをインポートする
2199+ selectAllPreset = (presetImportTarget.getPartsCount() == 0); // パーツが空の場合はプリセットをインポートする
21882200 }
21892201
21902202 parent.importPresetSelectPanel.initModel(partsSets, defaultPartsSetId, presetImportTarget, selectAllPreset);
--- a/src/main/java/charactermanaj/ui/ProfileListManager.java
+++ b/src/main/java/charactermanaj/ui/ProfileListManager.java
@@ -379,7 +379,7 @@ public final class ProfileListManager {
379379 logger.info("オープンできるプロファイルがないため、新規プロファイルを作成します。");
380380 try {
381381 CharacterDataDefaultProvider defProv = new CharacterDataDefaultProvider();
382- characterData = defProv.createDefaultCharacterData(DefaultCharacterDataVersion.V3);
382+ characterData = defProv.createDefaultCharacterData(DefaultCharacterDataVersion.V3).duplicateBasicInfo();
383383 Map<CustomLayerOrderKey, List<CustomLayerOrder>> customLayerPatterns =
384384 defProv.createDefaultCustomLayerOrderMap(characterData, DefaultCharacterDataVersion.V3);
385385 persistent.createProfile(characterData, customLayerPatterns);
Show on old repository browser