glycoinfo / GlycanBuilder2

7 stars 5 forks source link

Incorrect extension used to graphic files #31

Closed e15d5605 closed 2 years ago

e15d5605 commented 2 years ago

GlycanBuilder2で糖鎖構造を描画してSVGなどの画像ファイルとして保存した場合、拡張子が".txt"となっていることを確認した\ 過去に糖鎖テキストを出力する"Export to sequence formats"機能で独自の拡張子が使われていたものを".txt"に置き換えたが、それが画像データ生成時にも影響していると考えられる\

e15d5605 commented 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)がGWSglycomindswurcs2の場合は.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に割り当てられる

e15d5605 commented 2 years ago

適当な糖鎖構造を描画してテキストと画像への出力を行った\ テキストファイルはglycan_{text format}.txtとし、画像ファイルはglycan{.format}とした\ 実際に出力された一部の画像ファイルにきになる点が見られたため添付する\

epsやpdfで一部の情報が正しく表示されていないことを確認した\ 詳しく調査していないが、画像データへ変更する際に文字情報がどのように扱われているのかを確認する必要がある

e15d5605 commented 2 years ago

20211215, Developへプッシュ済

e15d5605 commented 2 years ago

(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などの拡張子が選択された場合は、それがファイルに付与されると想定される