/*
 * 作成日: 2007/07/06
 */
package asandatabasebrowser.action;

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.Global;
import asandatabasebrowser.AsanDatabaseBrowser;
import asandatabasebrowser.model.DbException;
import asandatabasebrowser.model.VvDatabase;
import asandatabasebrowser.view.DbTreeView;


public class DatabaseRefreshAction extends AbstractAction {
	AsanDatabaseBrowser tools;
	public DatabaseRefreshAction(AsanDatabaseBrowser tools) {
		super("データベースツリーを最新に(R)");
		putValue(MNEMONIC_KEY, new Integer('R'));
		putValue(SHORT_DESCRIPTION, "データベースツリーを最新にします");
		putValue(LONG_DESCRIPTION, "データベースツリーを最新にします");
		putValue(SMALL_ICON, Global.getImageIcon("/resources/Update.png"));
		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;
    	// ツリーを一旦削除する。
        TreePath path = tree.getSelectionPath();
        DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getPathComponent(DbTreeView.NODE_DEPTH_DB-1);
        tree.切断したので枝を削除する(node);
        try {
            db.createSchemaList();
			tree.接続したので枝を作る(node, db);
		} catch (DbException ex) {
			tools.showMessage(tree, "データベースの再構築に失敗しました", ex, SxOptionPane.ERROR_MESSAGE);
		}
    	tools.getTreeFrame().updateMainFrame();
	}
}
