import java.io.OutputStream;
import java.net.URI;
import java.util.Collection;
+import java.util.List;
+import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import charactermanaj.model.AppConfig;
import charactermanaj.model.CharacterData;
+import charactermanaj.model.CustomLayerOrder;
+import charactermanaj.model.CustomLayerOrderKey;
import charactermanaj.model.PartsAuthorInfo;
import charactermanaj.model.PartsCategory;
import charactermanaj.model.PartsManageData;
* インポートもとファイル
*/
private URI importSource;
-
+
/**
* プロファイル先のキャラクター定義、新規の場合はnull
*/
private CharacterData currentCharacterData;
-
-
+
+
/**
* インポートもとアーカイブ. ロードされた場合に非nullとなる.
*/
private CharacterDataArchiveFile archiveFile;
-
-
+
+
/**
* インポートされたキャラクター定義、なければnull
*/
private CharacterData sourceCharacterData;
-
+
+ /**
+ * インポートされたカスタムレイヤーパターン定義、なければnull
+ */
+ private Map<CustomLayerOrderKey, List<CustomLayerOrder>> sourceCustomLayerPatternMap;
+
/**
* インポートされたサンプルピクチャ、なければnull
*/
private BufferedImage samplePicture;
-
+
/**
* インポートされたreadme
*/
private String readme;
-
+
/**
* インポート先のキャラクター定義、もしくは現在のキャラクター定義のディレクトリ構成から 読み取ることのできるパーツのコレクション、なければ空.<br>
*/
private Collection<PartsImageContent> partsImageContentsMap;
-
+
/**
* パーツ管理データ、なければ空
*/
private PartsManageData partsManageData;
-
+
public void openImportSource(URI importSource, CharacterData currentCharacterData) throws IOException {
if (archiveFile != null || importSource == null) {
this.importSource = importSource;
this.currentCharacterData = currentCharacterData;
}
-
+
public void closeImportSource() throws IOException {
if (archiveFile != null) {
try {
}
}
}
-
+
public void loadContents(ProgressHandle progressHandle) throws IOException {
if (archiveFile != null) {
throw new IllegalStateException("既にアーカイブがオープンされています。");
}
CharacterDataFileReaderWriterFactory factory = CharacterDataFileReaderWriterFactory.getInstance();
-
+
progressHandle.setCaption("open archive...");
archiveFile = factory.openArchive(importSource);
sourceCharacterData.setDescription(readme);
}
}
-
+
} else {
// character.xmlがあった場合、favorites.xmlもあれば読み込む.
archiveFile.readFavorites(sourceCharacterData);
}
+ if (sourceCharacterData != null && sourceCharacterData.isEnableCustonLayerPattern()) {
+ // キャラクターデータの読み取りができ、且つ、カスタムレイヤーパターンが有効であれば
+ sourceCustomLayerPatternMap = archiveFile.readCustomLayerPatterns(sourceCharacterData);
+ }
+
// サンプルピクチャの読み込み、なければnull
progressHandle.setCaption("load sample picture...");
samplePicture = archiveFile.readSamplePicture();
-
+
// パーツセットの読み込み、なければ空
progressHandle.setCaption("load partssets...");
if (currentCharacterData != null) {
// インポート元にあるキャラクター定義をもとにパーツディレクトリを探索する場合
partsImageContentsMap = archiveFile.getPartsImageContents(sourceCharacterData, true);
}
-
+
// パーツ管理データの読み込み
progressHandle.setCaption("load parts definitions...");
partsManageData = archiveFile.getPartsManageData();
partsImageContentsMap = null;
partsManageData = null;
}
-
+
public URI getImportSource() {
return importSource;
}
-
+
protected void checkArchiveOpened() {
if (archiveFile == null) {
throw new IllegalStateException("アーカイブはオープンされていません。");
}
}
-
+
public CharacterData getCharacterData() {
checkArchiveOpened();
return sourceCharacterData;
}
+ public Map<CustomLayerOrderKey, List<CustomLayerOrder>> getCustomLayerPatternMap() {
+ checkArchiveOpened();
+ return sourceCustomLayerPatternMap;
+ }
+
public BufferedImage getSamplePicture() {
checkArchiveOpened();
return samplePicture;
return partsManageData;
}
-
-
+
+
/**
* パーツデータをプロファイルの画像ディレクトリに一括コピーする.<br>
- *
+ *
* @param partsImageContents
* コピー対象のパーツデータ
* @param cd
AppConfig appConfig = AppConfig.getInstance();
byte[] stmbuf = new byte[appConfig.getFileTransferBufferSize()];
-
+
// ファイルコピー
for (PartsImageContent content : partsImageContents) {
InputStream is = new BufferedInputStream(content.openStream());
} finally {
os.close();
}
-
+
if (!outFile.setLastModified(content.lastModified())) {
logger.log(Level.WARNING, "can't change the modified-date: " + outFile);
}
-
+
} finally {
is.close();
}
* パーツ管理情報がnullまたは空であれば何もしない.<br>
* そうでなければインポートするパーツに該当するパーツ管理情報を、現在のプロファイルのパーツ管理情報に追記・更新し、 それを書き出す.<br>
* インポートもとにパーツ管理情報がなく、既存にある場合、インポートしても管理情報は削除されません.(上書きセマンティクスのため)
- *
+ *
* @param partsImageContents
* インポートするパーツ
* @param partsManageData
if (target == null || !target.isValid()) {
throw new IllegalArgumentException();
}
-
+
if (partsImageContents == null || partsImageContents.isEmpty()
|| partsManageData == null || partsManageData.isEmpty()) {
// インポートするパーツが存在しないか、管理情報がない場合は更新しようがないので何もしないで戻る.
}
PartsInfoXMLReader xmlReader = new PartsInfoXMLReader();
-
+
PartsManageData mergedPartsManagedData;
if (current != null && current.isValid()) {
// 現在のプロファイルからパーツ管理情報を取得する.
// 新規の場合は空
mergedPartsManagedData = new PartsManageData();
}
-
+
// インポート対象のパーツに該当するパーツ管理情報のみを取り出して追記する.
for (PartsImageContent partsImageContent : partsImageContents) {
String partsName = partsImageContent.getPartsName();
for (CategoryLayerPair catLayerPair : partsImageContent.getCategoryLayerPairs()) {
PartsCategory partsCategory = catLayerPair.getPartsCategory();
String categoryId = partsCategory.getCategoryId();
-
+
PartsManageData.PartsKey partsKey = new PartsManageData.PartsKey(partsName, categoryId);
-
+
PartsAuthorInfo partsAuthorInfo = partsManageData.getPartsAuthorInfo(partsKey);
PartsManageData.PartsVersionInfo versionInfo = partsManageData.getVersion(partsKey);
String localizedName = partsManageData.getLocalizedName(partsKey);
-
+
if (partsAuthorInfo != null || versionInfo != null || localizedName != null) {
// いずれかの情報の登録がある場合、パーツ管理情報として追記する.
mergedPartsManagedData.putPartsInfo(partsKey, localizedName, partsAuthorInfo, versionInfo);