/*
 * 作成日: 2005/10/02
 */
package asandatabasebrowser.action;

import java.awt.Cursor;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;

import net.sourceforge.swingx.SxOptionPane;

import asandatabasebrowser.AsanDatabaseBrowser;
import asandatabasebrowser.model.DbException;
import asandatabasebrowser.model.VvDatabase;
import asandatabasebrowser.view.DbTreeView;



public class DatabaseDisconnectAction extends AbstractAction {
	AsanDatabaseBrowser tools;
	public DatabaseDisconnectAction(AsanDatabaseBrowser tools) {
		super("切断(D)");
		putValue(MNEMONIC_KEY, new Integer('D'));
		putValue(SHORT_DESCRIPTION, "データベースを切断");
		putValue(LONG_DESCRIPTION, "データベースを切断");
		this.tools = tools;
	}

    public void actionPerformed(ActionEvent ev) {
    	// 選択されているツリーを取得
    	DbTreeView tree = tools.getTreeFrame().getTree();
    	VvDatabase db = tree.getSelectedDatabase(true);
    	if (db == null) return;
    	// すでに切断されているか？
    	if (db.getConnection() == null) return;
    	// 切断
    	try {
			tools.getTreeFrame().setCursor(new Cursor(Cursor.WAIT_CURSOR));
			db.disconnect();
		} catch (DbException e) {
			tools.showMessage(tree, "データベースの切断に失敗しました", e, SxOptionPane.ERROR_MESSAGE);
		}
		finally {
	        // ノードを閉じる。
			TreePath path = tree.getSelectionPath();
	        DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getPathComponent(DbTreeView.NODE_DEPTH_DB-1);
	        tree.切断したので枝を削除する(node);
	        // カーソル、メニューを更新。
	        tools.getTreeFrame().setCursor(Cursor.getDefaultCursor());
        	tools.getTreeFrame().updateMainFrame();
		}
    }
}

