/*
 * 作成日： 2004/11/25
 *
 * TODO この生成されたファイルのテンプレートを変更するには次を参照。
 * ウィンドウ ＞ 設定 ＞ Java ＞ コード・スタイル ＞ コード・テンプレート
 */
package jp.riken.brain.ni.samuraigraph.base;

import java.awt.Component;
import java.io.File;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;


/**
 * @author kuromaru
 *
 * TODO この生成された型コメントのテンプレートを変更するには次を参照。
 * ウィンドウ ＞ 設定 ＞ Java ＞ コード・スタイル ＞ コード・テンプレート
 */
public class SGFileChooser extends JFileChooser
{

	/**
	 * 
	 */
	public static final String TITLE = "Overwrite Confirmation";
	
	
	/**
	 * 
	 */
	public static final String MSG_CONFIRM_OVERWRITE
		= "The file you have selected already exists.\n" + "Overwrite it?";


	/**
	 * 
	 *
	 */
	public SGFileChooser()
	{
		super();
	}
	

	/**
	 * 
	 * @param currentDirectory
	 */
	public SGFileChooser( File currentDirectory )
	{
		super( currentDirectory );
	}
	
	
	/**
	 * 
	 * @param currentDirectoryPath
	 */
	public SGFileChooser( String currentDirectoryPath )
	{
		super( currentDirectoryPath );
	}

	
	
	/**
	 * Override to show confirmation dialog whene the file already exists. 
	 */
	public void approveSelection()
	{
		if( this.getSelectedFile()!=null )
		{
			// if selected file already exists
			if( this.getSelectedFile().exists()
				&& this.getDialogType()==JFileChooser.SAVE_DIALOG )
			{
				int ret = JOptionPane.showConfirmDialog(
					this,
					MSG_CONFIRM_OVERWRITE,
					TITLE,
					JOptionPane.YES_NO_OPTION
				);
		        if( ret == JOptionPane.YES_OPTION )
		        {
		        	super.approveSelection();
		        }
			}
	        else
	        {
	        	super.approveSelection();
	        }
		}
	}



	/**
	 * Override not to select directories.
	 */
	public void setSelectedFile( File f )
	{
		if( f!=null && f.isDirectory() )
		{
			return;
		}
		super.setSelectedFile(f);
	}


	/**
	 * 
	 */
	public int showDialog( Component parent, String approveButtonText)
	{
		File old = this.getSelectedFile();
//System.out.println(old);
		final int ret = super.showDialog( parent, approveButtonText );
		switch( ret )
		{
			// selected
			case JFileChooser.APPROVE_OPTION :
			{
				break;
			}

			// canceled
			case JFileChooser.CANCEL_OPTION :
			{
				this.setSelectedFile(old);
				break;
			}

			// error
			case JFileChooser.ERROR_OPTION :
			{
				this.setSelectedFile(old);
				break;
			}
		}

		return ret;
	}

}
