package asandatabasebrowser.action;

import java.awt.event.*;
import javax.swing.*;

import net.sourceforge.swingx.SxOptionPane;

import asandatabasebrowser.Global;
import asandatabasebrowser.AsanDatabaseBrowser;
import asandatabasebrowser.model.*;



public class OpenSqlFrameAction extends AbstractAction {
	final AsanDatabaseBrowser tools;

	public OpenSqlFrameAction(AsanDatabaseBrowser tools) {
		super("SQLウィンドウ");
		putValue(SHORT_DESCRIPTION, "SQLウィンドウを開きます");
		putValue(LONG_DESCRIPTION, "SQLウィンドウルを開きます");
		putValue(SMALL_ICON, Global.getImageIcon("/resources/SQLView.png"));
		this.tools = tools;
	}

	public void actionPerformed(ActionEvent ev) {
		TableInfo tableInfo = null;
		int index = tools.getTreeFrame().tab.getSelectedIndex();
		if (index == 0) {
			tableInfo = tools.getTreeFrame().getTree().getSelectedTableInfo();
		} else {
			// 選択されたテーブルを取得する。DBに接続されていること。
			Object obj = tools.getTreeFrame().getFavTree().getSelectionNodeObject();
			if (obj instanceof FavoriteTable) {
				FavoriteTable favtable = (FavoriteTable) obj;
				VvDatabase db = tools.doc.getDatabaseFromFavorite(favtable);
				if (db == null) {
					tools.showMessage(tools.getTreeFrame(),
							"指定されたデータベースがありません。:"+favtable.dbName, null, 
							SxOptionPane.ERROR_MESSAGE);
					return;
				}
				if (db.getConnection() == null) {
					tools.showMessage(tools.getTreeFrame(),
							"データベースに接続されていません。:"+favtable.dbName, null, 
							SxOptionPane.ERROR_MESSAGE);
					return;
				}
				tableInfo = tools.doc.getTableInfoFromFavorite(favtable);
			}
		}
		if (tableInfo == null) return;
		try {
			String sql = "select * from "+tableInfo.getSqlTableName();
			tools.openSqlFrame(tableInfo.db, sql);
		} catch (DbException e) {
			tools.showMessage(tools.getTreeFrame(), 
					"テーブルを開くことができません", e, SxOptionPane.ERROR_MESSAGE);
		}
	}
}

