/*
 * @(#)RidFileAction.java
 *
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 *
 * RID-X : rid file action
 *
 * @author  Intelligent Technology Inc.
 * @version 1.01 2002/01/21
 */
package jp.co.nri.rid.action;

import java.awt.Frame;
import java.awt.Point;

import java.io.File;
import java.io.IOException;

import javax.swing.Action;
import javax.swing.JFileChooser;

import jp.co.iti.fagot.util.ZResource;
import jp.co.iti.fagot.util.ZFile;
import jp.co.iti.fagot.util.ZFileFilter;

import jp.co.iti.fagot.action.ZFileAction;

import jp.co.iti.fagot.IZApp;
import jp.co.iti.fagot.IZFileable;

import jp.co.nri.rid.RUpdateManager;
/**
 * ディレクトリ指定のopenを可能にするためのクラス
 *
 * 「開く」アクションにディレクトリ選択を可能とする
 * 「新規作成」はRidApplication.openにて、パラメータがnullの場合に対応
 */
public class RidFileAction extends ZFileAction {
	/**
	 * デフォルトコンストラクタ(new)
	 * @param app      アプリケーションクラス
	 * @param cmp      コンポーネント
	 * @param szAction アクション名
	 */
	public RidFileAction(IZApp app,IZFileable cmp,String szAction) {
    super(app,cmp,szAction);
	}

	/**
	 * リソースから直前に開いたファイルを取得する場合のキー＋
	 * ファイルフィルタ設定用のコンストラクタ(主にopen)
	 * @param app      アプリケーションクラス
	 * @param cmp      コンポーネント
	 * @param szAction アクション名
	 * @param szRecent リソースキー
	 * @param filter   ファイルフィルタ
	 */
	public RidFileAction(IZApp app,IZFileable cmp,String szAction,
		String szRecent,ZFileFilter filter) {
    super(app,cmp,szAction,szRecent,filter);
	}

	//## オーバライド #################################################
	/**
	 * 開く
	 */
	protected void open() {
		openImpl();
	}

	/**
	 * 開く
	 */
	public boolean openImpl() {
    Frame   frame = getApp().getFrame();

    if (mDialog == null) {
		ZResource res = getApp().getResource();

		mDialog = new JFileChooser();
		// ファイルフィルタの設定
		if ( mFileFilter != null ) {
			mDialog.setFileFilter(mFileFilter);
		}

		// 初期ディレクトリの設定
/*		if ( mRecent != null ) {
			String szFile = res.getString(mRecent);
			if ( szFile != null ) {
				mDialog.setCurrentDirectory(
					new File(ZFile.getParent(szFile) ) );
			}
		}
*/
		String szFile = res.getString("app.install.path")+File.separator
			   +res.getString("app.project.dir") ;
		mDialog.setCurrentDirectory(new File(szFile));
	}

	if ( frame.isShowing()) {
		// 位置修正
	    Point p = frame.getLocationOnScreen();
		mDialog.setLocation(p.x + 10, p.y +10);
	}

	// ディレクトリ選択を可能にする
	mDialog.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

	// ダイアログを開く
	boolean bRet = false;
	int nRet = mDialog.showOpenDialog(frame);
	if ( nRet == JFileChooser.APPROVE_OPTION) {
		// ファイルを開く
		File fFile = mDialog.getSelectedFile();
		String szFile = null ;
		try {
			szFile = fFile.getCanonicalPath();
	    } catch ( java.io.IOException e) {
			szFile = fFile.getAbsolutePath();
		}
		bRet = mCmp.open( szFile );
	} else {
		RUpdateManager.update(RUpdateManager.SET_DOCUMENT);
	}
	return bRet;
	}

	//## アトリビュート ###############################################
    /**
     * ダイアログボックス
     */
    protected JFileChooser mDialog = null;
}
