/*
!=======================================================================
!
!  PROGRAM  PHASE-Viewer  (PHASE-Viewer 2014.01 ver.3.3.0)
!
!  Created on 2006/01/25, 15:04
!  AUTHOR(S): KOGA, Junichiro
!  File : AtomCoordsIO.java
!  
!  Contact address :  Phase System Consortium
!                     E-mail: phase_system@nims.go.jp URL https://azuma.nims.go.jp
!
!
!   Since 2002, this program set had been intensively developed as a part of the following 
!  national projects supported by the Ministry of Education, Culture, Sports, Science and
!  Technology (MEXT) of Japan; "Frontier Simulation Software for Industrial Science
!  (FSIS)" from 2002 to 2005, "Revolutionary Simulation Software (RSS21)" from 2006 to
!  2008. "Research and Development of Innovative Simulation Software (RISS)" from 2008
!  to 2013. These projects is lead by the Center for Research on Innovative Simulation 
!  Software (CISS), the Institute of Industrial Science (IIS), the University of Tokyo.
!   Since 2013, this program set has been further developed centering on PHASE System
!  Consortium. 
!   The activity of development of this program set has been supervised by Takahisa Ohno.
!
!=======================================================================
 */
/**
 * \package ciss.phase_viewer.atomcoord.io
 * AtomCoordsオブジェクトを, 様々な形式でエクスポートしたり, また様々な形式のファイルをインポートするために必要な
 * クラス群. Importer, Exporterなるインターフェースによって外部ファイルをパースするが, 実際の実装は
 * /ciss/phase_viewer/atomcoord/io/supported.xml に書かれたクラスに施されている. この仕組みによって, parse用
 * クラスさえ作成すればImporterGUIによってAtomCoordsオブジェクトを作成したり, また他のchaseオブジェクトにその情報を
 * 渡したりすることができるようになっている.
 */
package ciss.phase_viewer.atomcoord.io;

import java.beans.PropertyChangeListener;

import javax.swing.filechooser.FileFilter;

/**
 * ImporterおよびExporterのSuperInterface. インポートとエクスポートで必要なメソッドは実はほぼ同じ;
 * 従って大体のメソッドはここで定義.
 * 
 * @author
 */
public interface AtomCoordsIO {
    public static java.net.URL SUPPORTED_FILETYPE = AtomCoordsIO.class
            .getResource("/ciss/phase_viewer/atomcoord/io/supported.xml");

    /**
     * このクラスの扱うことができるファイル種を返す.
     * 
     * @return 扱えるファイルの種類
     */
    public String getType();

    /**
     * ファイル選択におけるフィルターを返す.
     * 
     * @return FileFilterのインスタンス(面倒あるいは決めかねる場合はnullでもよい)
     */
    public FileFilter getFileFilter();

    /**
     * 種類によってはオプションを付加したい場合も考えられる. その場合, 真を返すメソッド
     * 
     * @return オプションがある場合true
     */
    public boolean hasOptions();

    /**
     * オプションがある場合, このメソッドによって「オプション編集パネル」を起動できる. ようにつくる. オプションがないなら空メソッドにする.
     * さらに, hasOptions()をfalseとすることが望ましい.
     * 
     * @param heavy
     *            trueの場合, JInternalFrameなどではなくJFrameなどを使ってGUIを作成.
     * @param listener
     *            パネルの処理が終了したことを通知されるリスナー
     * @param fileName
     *            選択されたファイル
     */
    public void createOptionsPanel(boolean heavy,
            PropertyChangeListener listener, String fileName);

    /**
     * オプション用のHashMapのセッターもあると便利かも. OptionPanelから呼ばれることを想定している.
     * 
     * @param options
     *            「オプション」情報を格納したハッシュマップ.
     */
    public void setOptions(java.util.HashMap options);

}
