Closed e15d5605 closed 2 years ago
20210521にFileUtils
に以下の変更を加えている\
この関数はテキストファイルを生成するonExportTo
と画像ファイルを生成するonSaveAs
で参照されている
* @param extension
* the desired file extension
*/
static public String enforceExtension(String filename, String extension) {
/*
String ext = "";
int i = filename.lastIndexOf('.');
if (i > 0 && i < filename.length() - 1)
ext = filename.substring(i + 1).toLowerCase();
if (ext.equals(extension))
return filename;
return filename + "." + extension;
*/
return filename + ".txt";
}
従来の仕様では糖鎖テキストファイルに独自の拡張子(例、GlycoCT: .glycoct_condensed)が割り当てられていたためファイルを展開しづらかった\
対策として独自の拡張子を付与するのではなく、拡張子を.txt
とすることでテキストファイルを生成するようにしていた\
この関数は糖鎖テキストや画像データの生成時に参照されているため、本来ならばテキスト出力の場合は.txt
、画像出力の場合はコマンドに応じた画像形式のように、アクションの内容に応じて適切な拡張子を選択する必要がある
拡張子(extension
)はExport ~
の各コマンドに埋め込まれた値であり、export=[format]
のように定義されている\
formatはGlycanParserFactory
で管理されており、例えばテキスト出力の場合は以下のように実装されている
/**
Return a map of the supported formats for exporting glycan
structures. The map contains the identifier and the description
of each format.
*/
public static Map<String,String> getExportFormats() {
Map<String,String> ret = MolecularFrameworkParser.getExportFormats();
ret.put("GWS", "GlycoWorkbench sequence");
ret.put("glycominds","Glycominds");
ret.put("wurcs2", "WURCS Encoding");
// ret.put("rings","KCF Encoding");
// ret.put("wurcs1","WURCS1.0 Encoding");
// ret.put("wurcs2 via GlycoCT","WURCS2.0 Encoding(with GlycoCT)");
// ret.put("wurcs2","WURCS2.0 Encoding");
return ret;
}
コマンドパラメータはマップ型の変数で管理されており、keyがファイルの拡張子、valueがコマンドの名称として扱われる\
keyをtxt
にすることで出力されるファイル形式を.txt
にすることが可能であるが、マップ型であることから全ての形式のkeyをtxt
とすることは困難である\
以上の点から以下のようにenforceExtension
の処理を変更することが適切と考えられる
static public String enforceExtension(String filename, String extension) {
String ext = "";
int i = filename.lastIndexOf('.');
if (i > 0 && i < filename.length() - 1)
ext = filename.substring(i + 1).toLowerCase();
if (ext.equals(extension))
return filename;
//20211208_S.TSUCHIYA, add
// check export text format
// if an extension contains as a key in GlycanParserFactory.getExportFormats(), an extension change to .txt
if (GlycanParserFactory.getExportFormats().containsKey(extension))
return filename + ".txt";
return filename + "." + extension;
}
以下の処理は、生成するファイルの拡張子(extension
)がGWS
、glycominds
、wurcs2
の場合は.txt
に置き換えられる\
これにより、GWS、GlycoMinds(LinearCode)、WURCSをテキスト形式のファイルとして出力することが可能となる
一方で画像データを出力する場合はextension
が条件に一致しないため、元々の拡張子(.svg、.pngなど)で保存される
if (GlycanParserFactory.getExportFormats().containsKey(extension))
return filename + ".txt";
(20211215 追記)
ファイル選択ウインドウで適切なファイル形式
が表示されるように処理を少し変更した\
変更前ではテキスト出力時に利用可能なファイル形式が.linucs
や.wurcs2
などの拡張子のままになっていたので、上記の拡張子確認処理をファイル選択用のウインドウでも参照するようにした
JFileChooser fileChooser = new JFileChooser();
//20211215, S.TSUCHIYA add
if (GlycanParserFactory.getExportFormats().containsKey(format))
fileChooser.addChoosableFileFilter(new ExtensionFileFilter("txt"));
else
fileChooser.addChoosableFileFilter(new ExtensionFileFilter(format));
テキスト形式を選択した場合は条件が真になるためtxt
が渡される
また、画像形式の場合は上記のelse
に該当するため、選択した画像形式に対応した要素がformatに割り当てられる
適当な糖鎖構造を描画してテキストと画像への出力を行った\
テキストファイルはglycan_{text format}.txt
とし、画像ファイルはglycan{.format}
とした\
実際に出力された一部の画像ファイルにきになる点が見られたため添付する\
テキスト出力
画像出力
epsやpdfで一部の情報が正しく表示されていないことを確認した\ 詳しく調査していないが、画像データへ変更する際に文字情報がどのように扱われているのかを確認する必要がある
20211215, Developへプッシュ済
(20211215, 17:00~ 追記)\
GICよりGWBで編集状態を保存した際に拡張子がtxt
になっているとの報告を受けたが、本課題と同じ原因と考えられる\
そのため、GB2やGWBのキャンバスの編集状態を保存した際に出力されるファイルの形式を確認した\
Save
またはSave As
を選択すると以下のようなメニューが表示され、ファイル形式
ではGlycoWorkbench Structure file (.gws)
の利用が可能である\
gb_test
というファイル名でそれぞれのファイル形式を選択すると以下のファイルが出力される
また、これらのファイルの読み込みを行ったところ、読み込み可能なファイル形式
がStrcuture files (.gws)
に限定されており\
拡張子がついていないgb_test
を読み込むことができないが、これは元々そのように実装されていたものである
ファイル出力時にenforceExtension
で拡張子を選択する処理を修正し、糖鎖テキストの出力以外でtxt
が選択されない\
このことから、外部環境のGWBでgwp
などの拡張子が選択された場合は、それがファイルに付与されると想定される
GlycanBuilder2で糖鎖構造を描画してSVGなどの画像ファイルとして保存した場合、拡張子が".txt"となっていることを確認した\ 過去に糖鎖テキストを出力する"Export to sequence formats"機能で独自の拡張子が使われていたものを".txt"に置き換えたが、それが画像データ生成時にも影響していると考えられる\